ARM Cortex

5000 円 STM32F7 ボードで ARM の最新テクノロジーをかい間見てみる
400MHz 級制御プロセッサ
ご購入はこちら
ARM Cortex-M7 初体験
第 5 回 キャッシュ&密結合メモリの効き目を実験で確かめる
今回は,超高性能 ARM Cortex-M7 搭載 STM32F7
マイコン(ST マイクロエレクトロニクス)の評価ボー
ド STM32F746G-Discovery を 使 っ て,Cortex-M7 の
特徴であるキャッシュや密結合メモリ(TCM)を使っ
たプログラムを作成し,その効き目を確かめてみま
す.
実験 1:命令用のキャッシュ&
密結合メモリの効き目を確かめる
● プログラム
命令を格納する領域としては,命令密結合メモリ
ITCM(Instruction Tightly Coupled Memory)RAM,
フラッシュ・メモリ,内蔵 SRAM,外部 SDRAM な
どがあります.今回は,
(1)フラッシュ・メモリ→ ART(Adaptive Real-time)
→ ITCM インターフェース
(2)ITCM RAM → ITCM インターフェース
(3)フラッシュ・メモリ→ AXIM インターフェース
(4)内蔵 SRAM → AXIM インターフェース
の 4 つの経路で実行する場合の実行時間の比較を行い
ます.プログラム(の一部)をリスト 1 に示します.
このプログラムは,三角関数のコサインの値を計算
する関数 Cos() を,命令キャッシュの ON/OFF と
ART アクセラレータ ON/OFF の条件で,それぞれ 4
つの場合に関し,その実行時間(CPU サイクル数)を
Cortex-M7 内蔵の SysTick タイマでを計測するもので
す.計測時間に多少の変動があるようなので,それぞ
れの条件で 4 回実行しています.なお,
s1=SYSTICK;
を 2 回実行していますが,これは,SysTick の初期化
後にタイマ値を読むと,0x00FFFFFF に近い値が期
待値なのに,なぜか 0 がリードできる場合があるから
です.2 回タイマをリードすれば,それらしい値が得
られます.
リスト 1 で特に注意することは,Cos() 関数の内
容を ITCM RAM 領域(0x000001000 番地から),また
は SRAM 領域(0x20010000 番地から)に転送する方法
です.リスト 1 ではそれぞれ,
148
中森 章
for(i=0;i<0x1000;i++)
((char*)0x00001000)[i]=
((char*)
(((char*)Cos)-1))[i];
for(i=0;i<0x1000;i++)
((char*)0x20010000)[i]=
((char*)
(((char*)Cos)-1))[i];
としています.この記述の要点は,Cos() の先頭ア
ドレスから 1 を引いている点です.Thumb コードで
記述された関数のアドレスを参照する場合,アドレス
のビット 0 が 1 になっています.そこでビット 0 をク
リアしないと,関数の内容を転送するときに,アンア
ラインド・アクセスとなって,正しいデータが転送で
きません(筆者はこれでかなり悩んでしまった)
.
また同様に,0x000001000 番地,または 0x20010000
番地から関数を実行する場合に,それぞれ,
((void(*)
(REAL))0x00001001)
(引き数);
((void(*)
(REAL))0x20010001)
(引き数);
としていますが,これも同じ理由です.分岐先アドレ
スのビット 0 が 1 でないとハード・フォールトが発生
してしまいます.
なお,リスト 1(左段中ほど)で,
*(volatile int*)0x40023c00 ^= 0x200;
// ART OFF
の行を生かすと ART アクセラレータ OFF,コメント・
アウトすると ART アクセレレータ ON になります.
● 実行結果…ざっくり 2 倍速くなる
サンプル・プログラムの実行結果を表 1 に示します.
(1)ITCM ON では,命令キャッシュの ON/OFF に
か か わ ら ず, 同 等 の 実 行 時 間 で す. つ ま り,
ITCM インターフェース上で実行すると(命令
キャッシュ・ミスをしない限り)同等の性能が得
られることが分かります.この結果では,フラッ
シュ・メモリから実行(ART アクセラレータ経
由)の場合の方が ITCM RAM から実行するより
速くなっていますが,誤差のようです.ART ア
クセラレータを OFF にすると ITCM RAM から
の実行の方がフラッシュから実行するより若干
第 1 回 最新 ARM Cortex-M7 コア入門(2016 年 11 月号)
第 2 回 高性能リアルタイム向け Cortex-M7 の演算性能(2016 年 12 月号)
第 3 回 ハードもソフトも至れり尽せり…Cortex-M7 内蔵 STM32F7 初体験(2017 年 1 月号)
2017 年 3 月号