Tomen Seminar 木村さん分 - LPCZone:NXP LPCマ … Cortex-M0 プロセッサ 32-ビットARM...
Transcript of Tomen Seminar 木村さん分 - LPCZone:NXP LPCマ … Cortex-M0 プロセッサ 32-ビットARM...
ARM と Cortex-M0
イントロダクション
3
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社を買収しています。
11:27 AM
4
ARM アーキテクチャ
Cortex-M0、M3とARM7TDMI 機能比較
5
Cortex™-M0 プロセッサ
ARM Cortex-M0 プロセッサ
32-ビット ARM RISC プロセッサ– Thumb 16-ビット 命令セット
パワーとエリアを最適化– 非常に小さなシリコン実装面積– 低消費電力デザイン
割込みと例外の時、状態の保持が自動– ソフトウェアへのオーバヘッドが小さい(exception entryとexit)
確定的(Deterministic)な処理時間– 命令実行時間は常に同じ
7
8
ARM Cortex-M0 プロセッサ
パワードメインに沿った配置配線。
Thumb 命令セット
Thumb命令: 32-ビット オペレーション, 16-ビット 固定命令長– ARM7TDMI (‘T’ = Thumb)
– ARM登場以来すべてのプロセッサでサポート
– 小さい コードサイズ
Thumb-2命令– 全てのプロセッサ オペレーションで‘Thumb’命令使用可能
– 16/32-ビット 命令長混在で性能重視
– 全てのCortex プロセッサをサポート
9
Thumb®
ARM7 ARM9 Cortex-A9Cortex-R4Cortex-M3Cortex-M0
Thumb 命令セット 上位互換
命令セット アーキテクチャー
16-ビット Thumb ISA(命令セットアーキテクチャ)はARM7TDMIがベース– 56 命令のみ, 実行 時間保証
– 8, 16 または 32-ビット データ 転送は1 命令で実行
Dhrystone 0.9DMIPS/MHz
参照:ARM ドキュメント(DDI0432、DDI0419B)
10
11
Cortex-M 命令セット 比較
12
プログラム レジスタ
全てのレジスタ は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
r15 (PC)
r14 (LR)
xPSR
r13 (SP)
13
命令の動作
ほとんどの命令は 2 バイトメモリを使用
実行時間は一定サイクル– データ処理(例 add, shift, logical OR)は1サイクル
– データ 転送(例 load, store) は 2 サイクル
– 分岐は、3 サイクル
命令は32-ビット データ値を 実行– プロセッサ レジスタ とALUは32-ビット幅!
MULS
15 0
MULS r0, r1; Assemblera = a * b; C コード
ネスト型ベクタ割り込みコントローラ(NVIC)
NVICにより 効率的なスタック・ベースの例外モデルを提供– Cortex-Mコアプロセッサの重要な一部として統合
– 卓越した割込み例外処理機能を提供します。
NVIC で32本の汎用割込み優先レベルのサポート– 例外の優先度
– テールチェイン と後着 割込み
例外ハンドリングの確定的(Deterministic)な動作タイミング– 例外は固定サイクル処理
– 固定16 クロックで ジッターなし
– 低レイテンシ低ジッタの割り込み応答
すべてCで記述可能
14
割り込みレスポンス
15
Cortex-M0 interruptHandling
ARM 7 interruptHandling
16
割込み 動作
割込み時, ハードウェアが自動的に現在の状態をスタック
割込み ハンドラをCすべて記述できる– Stack content supports C/C++ ARM Architecture Procedure Calling Standard
リセット時、プロセッサは初期のスタック ポインタ0x0からフェッチする
r0
r1
r2
r3
r12
r15 (PC)
r14 (LR)
xPSR メモリ
r13 (SP)
スタック
が増える
プッシュ
17
• 従来の方法
例外テーブル– 分岐の命令フェッチ
トップレベル ハンドラ– 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}
SUBS pc,lr,#4
ENDP
ARM Cortex-M ファミリの場合
NVIC 自動ハンドラ– 現在のレジスタ状態を保存– 例外の優先順位
– 例外のネスティング処理
割り込みサービスルーチン(Interrupt
Service Routine, ISR) は直接Cで記述
できる– Cルーティンのベクタでのポインタ設定
– C 言語で記述されたISR
高速の割込み動作– 最小限のソフトウェア処理
WFI(割り込み待ち), スリープ状態
書込み 割込みハンドラ
ARM Cortex-Mシリーズはスリープ状態をサポート– 超消費電力スタンバイ操作を可能にする– バッテリ 系アプリケーションは寿命が大事
– 少ないゲート数のウェークアップ割り込みコントローラ (WIC)を含む)
18
スリープ モード
NVIC
Cortex-M0
WIC
Wake-up
外部割込み
パワー マネイジメントユニット
ディープ
スリープ
スリープ– CPUのクロックをコントロールできる
– NVICは割り込みに対し反応できる
ディープ スリープ– WIC は割り込みを選択して反応できる
– Cortex-M0はNVICにより保存された状態に
戻すことができる
WIC 信号がPMUを起床する
M0コアは瞬時に起床する
重要な外部の事象に対して応答
Wake-up
sensitive
Interrupts
Cortex™-M0 ベンチマーク
19
コード サイズ:32 ビットと16/8ビットマイコン
8 ビット マイコンは、8 ビット データを処理するだけではない– 整数型(int)は、実際には16ビット
– 8 ビット マイコンでは整数型のデータを処理するために連続する複数の命令が必要
。つまり、多くのクロック・サイクルを消費。
– C ライブラリが非効率
– スタック サイズ が増える
– 割込み レテンシが影響を受ける
主記憶のアドレスを示すポインターに複数バイト必要
M0は整数型(int)を1命令で扱う
M0は8と16 ビット データを効率よく処理する– バイトレーンのサポート
– インストラクションは半ワードと半 バイト. LDR, LDRH, LDRB
M0は効率的なライブラリサポートがある– M0に最適化
20
21
アセンブラ命令長比較、32 ビットと16/8ビット MCU
A社 16bit MCUB社 8bit MCU2 B社 16bit MCU
データ処理に関して ?
16 ビット プロセッサ の課題– 長整数型– フローティング ポイント・タイプ
– プロセッサ のレジスタとメモリ間のデータ転送
16 ビット プロセッサは、16 ビット レジスタ搭載– 32 ビット 転送にレジスタが2個必要
– スタック の要求が増える
M0 は 32 ビット レジスタと32 ビット メモリを搭載– 少ない サイクル :長整数型
– 高い フローティング ポイント 性能
– 少ないサイクル: データ 転送
22
23
コード サイズ 性能
0.00
0.50
1.00
1.50
2.00
2.50a
2tim
e
aifi
rf
aiif
ft
bitm
np
ca
nrd
r
iirflt
pn
trch
pu
wm
od
rsp
ee
d
HC08
M0 using microlib
他社8bit MCU
24
コード サイズ 比較M0 コード サイズ : 42% または 36% 小さい
Floating Point and Fir Filter Code Size
0
200
400
600
800
1000
1200
1400
Ge
ne
ric
MS
P4
30
MS
P4
30
F5
43
8
MS
P4
30
F5
43
8
larg
ed
ata
mo
de
l
Co
rte
x-M
0
Co
de
Siz
e(b
yte
s)
MathFloat
FirfilterA社
16bitMCU
A社
16bitMCU2
A社
16bitMCU2
ラージデータ
モデル
25
コード サイズ 比較M0 コード サイズ : 30% 小さい
Whet
0
1000
2000
3000
4000
5000
6000
7000
Generic
MS
P430
MS
P430F
5438
MS
P430F
5438
larg
edata
model
Corte
x-M
0
Co
de
Siz
e(B
yte
s)
A社
16bitMCU
A社
16bitMCU2
A社
16bitMCU2
ラージデータ
モデル
26
コード サイズ 比較 (コアmark)M0 コード サイズ 16% 小さい
Coremark
6500
7000
7500
8000
8500
9000
9500
Generic MSP430 Cortex-M0
Co
de
Siz
e(B
yte
s)
A社 16bit MCU
27
コード サイズ 比較 (コアmark)M0 コード サイズ: 49% 小さい
Coremark
0
2000
4000
6000
8000
10000
12000
14000
16000
Atmel AVR8 Mega644 Cortex-M0
Co
de
Siz
e(B
yte
s)
C社 8bit MCU
28
性能比較
A社 16bit MCU B社 16bit MCU
29
パフォーマンス比較u
Se
c
A社 16bit MCU B社 16bit MCU B社 16bit MCU2 B社 8bit MCU C社 8bit MCU
16 ビット FIIR フィルタ性能 (1MHz)
30
性能比較
Coremark Score
0
0.5
1
1.5
2
2.5
3
3.5
AVR8 ATMega644 MSP430 M0
Co
rem
ark
(Ma
rk/s
ec)
C社 8bit MCU A社 16bit MCU
31