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® ARM7 Thumb 命令セット 上位互換 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
© Copyright 2024 Paperzz