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 月号
© Copyright 2024 ExpyDoc