ARM と Cortex-M0
イントロダクション
ARM の 歴 史 1979 年 : Acorn Computer 設 立 ( 英 国 ケンブリッジ) 1985 年 : 初 代 ARM Acorn RISC Machine (その 後 Advanced RISC Machineに 変 更 )が 誕 生 米 VLSI Technologyで 製 造 (25,000ゲート 以 下 ) 1986 年 : ARM2 完 成 当 時 の 世 界 で 最 もシンプルなRISCプロセッサ (30,000ゲート) 1990 年 : ARM 社 設 立 (Acorn, Apple, VLSIで) NXPはPhilips 時 代 にVLSI 社 を 買 収 しています 3
ARM アーキテクチャ 11:27 AM 4
Cortex-M0 M3とARM7TDMI 機 能 比 較 5
Cortex -M0 プロセッサ
ARM Cortex-M0 プロセッサ 32-ビット ARM RISC プロセッサ Thumb 16-ビット 命 令 セット パワーとエリアを 最 適 化 非 常 に 小 さなシリコン 実 装 面 積 低 消 費 電 力 デザイン 割 込 みと 例 外 の 時 状 態 の 保 持 が 自 動 ソフトウェアへのオーバヘッドが 小 さい(exception entryとexit) 確 定 的 (Deterministic)な 処 理 時 間 命 令 実 行 時 間 は 常 に 同 じ 7
ARM Cortex-M0 プロセッサ パワードメインに 沿 った 配 置 配 線 8
Thumb 命 令 セット Thumb 命 令 : 32-ビット オペレーション, 16-ビット 固 定 命 令 長 ARM7TDMI ( T = Thumb) ARM 登 場 以 来 すべてのプロセッサでサポート 小 さい コードサイズ Thumb-2 命 令 全 てのプロセッサ オペレーションで Thumb 命 令 使 用 可 能 16/32-ビット 命 令 長 混 在 で 性 能 重 視 全 てのCortex プロセッサをサポート Thumb Thumb 命 令 セット 上 位 互 換 ARM7 ARM9 Cortex-M0 Cortex-M3 Cortex-R4 Cortex-A9 9
命 令 セット アーキテクチャー 16-ビット Thumb ISA( 命 令 セットアーキテクチャ)はARM7TDMIがベース 56 命 令 のみ, 実 行 時 間 保 証 8, 16 または 32-ビット データ 転 送 は1 命 令 で 実 行 Dhrystone 0.9DMIPS/MHz 参 照 :ARM ドキュメント(DDI0432 DDI0419B) 1 0
Cortex-M 命令セット 比較 11
プログラム レジスタ 全てのレジスタ は32-ビット幅 8/16/32-ビットデータ混載なし 13 general purpose レジスタ レジスタ r0 r7 (Low レジスタ) レジスタ r8 r12 (High レジスタ) 3 レジスタ with special meaning/usage スタック ポインタ (SP) r13 リンクレジスタ (LR) r14 プログラム カウンタ (PC) r15 特別用途向け レジスタ - xpsr r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 (SP) r14 (LR) r15 (PC) xpsr 1 2
命令の動作 ほとんどの命令は 2 バイトメモリを使用 a = a * b; MULS r0, r1; C コード Assembler 15 0 MULS 実行時間は一定サイクル データ処理(例 add, shift, logical OR)は1サイクル データ 転送(例 load, store) は 2 サイクル 分岐は 3 サイクル 命令は32-ビット データ値を 実行 プロセッサ レジスタ とALUは32-ビット幅! 13
ネスト型ベクタ割り込みコントローラ NVIC NVICにより 効率的なスタック ベースの例外モデルを提供 Cortex-Mコアプロセッサの重要な一部として統合 卓越した割込み例外処理機能を提供します NVIC で32本の汎用割込み優先レベルのサポート 例外の優先度 テールチェイン と後着 割込み 例外ハンドリングの確定的 Deterministic)な動作タイミング 例外は固定サイクル処理 固定16 クロックで ジッターなし 低レイテンシ低ジッタの割り込み応答 すべてCで記述可能 14
割り込みレスポンス ARM 7 interrupt Handling Cortex-M0 interrupt Handling 15
割込み 動作 r0 r1 r2 r3 r12 r13 (SP) プッシュ スタック r14 (LR) r15 (PC) xpsr が増える メモリ 割込み時, ハードウェアが自動的に現在の状態をスタック 割込み ハンドラをCすべて記述できる Stack content supports C/C++ ARM Architecture Procedure Calling Standard リセット時 プロセッサは初期のスタック ポインタ0x0からフェッチする 16
書込み 割込みハンドラ ARM Cortex-M ファミリの場合 従来の方法 NVIC 自動ハンドラ 現在のレジスタ状態を保存 例外の優先順位 例外のネスティング処理 例外テーブル 分岐の命令フェッチ トップレベル ハンドラ Routine handles re-entrancy IRQVECTOR LDR PC, IRQHandler. IRQHandler PROC STMFD sp!,{r0-r4,r12,lr} MOV r4,#0x80000000 LDR r0,[r4,#0] SUB sp,sp,#4 CMP r0,#1 BLEQ C_int_handler MOV r0,#0 STR r0,[r4,#4] ADD sp,sp,#4 LDMFD sp!,{r0-r4,r12,lr}. 割り込みサービスルーチン(Interrupt Service Routine, ISR) は直接Cで記述 できる Cルーティンのベクタでのポインタ設定 C 言語で記述されたISR 高速の割込み動作 最小限のソフトウェア処理 WFI 割り込み待ち, スリープ状態 SUBS pc,lr,#4 ENDP 17
スリープ モード ARM Cortex-Mシリーズはスリープ状態をサポート 超消費電力スタンバイ操作を可能にする バッテリ 系アプリケーションは寿命が大事 少ないゲート数のウェークアップ割り込みコントローラ (WIC)を含む) パワー マネイジメントユニット スリープ CPUのクロックをコントロールできる NVICは割り込みに対し反応できる Cortex-M0 Wake-up ディープ スリープ NVIC WIC ディープ スリープ WIC は割り込みを選択して反応できる Cortex-M0はNVICにより保存された状態に 戻すことができる WIC 信号がPMUを起床する Wake-up sensitive Interrupts M0コアは瞬時に起床する 重要な外部の事象に対して応答 外部割込み 18
Cortex -M0 ベンチマーク 19
コード サイズ 32 ビットと16/8ビットマイコン 8 ビット マイコンは 8 ビット データを処理するだけではない 整数型 int は 実際には16ビット 8 ビット マイコンでは整数型のデータを処理するために連続する複数の命令が必要 つまり 多くのクロック サイクルを消費 C ライブラリが非効率 スタック サイズ が増える 割込み レテンシが影響を受ける 主記憶のアドレスを示すポインターに複数バイト必要 M0は整数型 int を1命令で扱う M0は8と16 ビット データを効率よく処理する バイトレーンのサポート インストラクションは半ワードと半 バイト. LDR, LDRH, LDRB M0は効率的なライブラリサポートがある M0に最適化 20
アセンブラ命令長比較 32 ビットと16/8ビット MCU B社 8bit MCU2 B社 16bit MCU A社 16bit MCU 21
データ処理に関して? 16 ビット プロセッサ の課題 長整数型 フローティング ポイント タイプ プロセッサ のレジスタとメモリ間のデータ転送 16 ビット プロセッサは 16 ビット レジスタ搭載 32 ビット 転送にレジスタが2個必要 スタック の要求が増える M0 は 32 ビット レジスタと32 ビット メモリを搭載 少ない サイクル 長整数型 高い フローティング ポイント 性能 少ないサイクル データ 転送 22
コード サイズ 性能 2.50 2.00 1.50 他社8bit HC08 MCU M0 using microlib 1.00 rspeed pntrch iirflt canrdr bitmnp aiifft aifirf a2time 0.00 puwmod 0.50 2 3
コード サイズ 比較 M0 コード サイズ : 42% または 36% 小さい Floating Point and Fir Filter Code Size 1200 1000 800 MathFloat 600 Firfilter 400 200 Cortex-M0 MSP430F5438 A社 16bit MCU2 large data ラージデータ model モデル A社 16bit MCU2 MSP430F5438 Generic MSP430 0 A社 16bit MCU Code Size(bytes) 1400 2 4
5000 4000 3000 2000 Code Size (Bytes) コード サイズ 比較 M0 コード サイズ : 30% 小さい Whet 7000 6000 1000 0 Cortex-M0 MSP430F5438 A社 16bit MCU2 ラージデータ large data モデル model MSP430F5438 A社 16bit MCU2 Generic MSP430 A社 16bit MCU 2 5
コード サイズ 比較 (コアmark) M0 コード サイズ 16% 小さい Coremark 9500 Code Size (Bytes) 9000 8500 8000 7500 7000 6500 Generic MSP430 A社 16bit MCU Cortex-M0 2 6
コード サイズ 比較 (コアmark) M0 コード サイズ 49% 小さい Coremark 16000 Code Size (Bytes) 14000 12000 10000 8000 6000 4000 2000 0 Atmel C社AVR8 8bit MCU Mega644 Cortex-M0 2 7
性能比較 A社 16bit MCU B社 16bit MCU 2 8
usec パフォーマンス比較 A社 16bit MCU B社 16bit MCU B社 16bit MCU2 B社 8bit MCU C社 8bit MCU 16 ビット FIIR フィルタ性能 (1MHz) 29
性能比較 Coremark Score 3.5 Coremark (Mark/sec) 3 2.5 2 1.5 1 0.5 0 AVR8 ATMega644 C社 8bit MCU A社MSP430 16bit MCU M0 3 0
31