ARM と Cortex-M0

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