パイプラインの概要、メモリマップ

パイプラインの概要

パイプラインについては、第4回〜5回で詳細に説明いたしますが、Cortex-M3/4からの大きな変更点ですので、最初に簡単に説明します。

デュアルの6段スーパースカラパイプライン

デュアルのスーパースカラなので、ALUが2つあります。コードを64bitでフェッチしてきて、2命令を同時にデコードして、デコードした結果を、2つのALUに発行します。そして同時実行します。そのため、前述した様にCoreMarkもDMIPSもCortex-M4の2倍近い演算能力になっています。残念ながら、同時にデコードされた2つの命令の関係で、同時実行ができない場合があるため、完全に2倍にはなりませんが、それでも高性能には変わりありません。(一般的にはデュアルのスーパースカラはシングルパイプラインの1.6倍のパフォーマンスと言われています。)

命令発行パイプライン(フェッチ~デコード処理)

フェッチからデコードして、命令を判別するまでは3段のパイプライン処理です。デコード処理が2段になっていて、最初のデコードはDecodeと呼んでいますが、2つ目のデコードはIssue(発行)と呼ばれています。 Decodeした命令を、後段の実行パイプラインにIssueします。

実行パイプライン

論理演算(シフト含)と算術演算はALUが実行しますが、その他の実行は専用のパイプラインが用意されていて、別のハードウエアが実行します。デコードされた命令の種類によって各パイプラインへ振り分けられます。ロード/ストア実行はロード/ストアパイプラン、複雑な積和演算等はMacパイプライン、浮動小数点演算は浮動小数点演算パイプラインです。これらのハードウエアが並列処理を行います。

図1

【Cortex-M7のパイプライン】

メモリマップ

メモリマップの概要

図3

【Cortex-M7のバスインターフェース】

Cortex-M7のメモリマップはCortex-M3/M4と変りません。しかし、 Cortex-M3/M4のインターフェースはI-Bus、D-Bus、S-busだけだったのに対しCortex-M7には、AXIM、ITCM 、DTCM 、 AHBP、 EPPBのバスインターフェースが存在します。Cortex-M7では、メモリマップの領域ごとに接続されているバスインターフェースが異なります。例えば、コード領域に設けられた内蔵Flashから命令をフェッチするのと、外部メモリに格納されている命令をフェッチするのでは、バスインターフェースが異なります。前者はITCMまたはAXIM経由、後者はAXIM経由のみになります。(バスの名前はAXIですが、マスターとなってAXIを制御するハードをAXIMと呼びます。MはMasterのM)

コード領域

通常この領域には命令コードを格納している内蔵メモリ(Flash、RAM)が接続されるようになっています。そして、バスインターフェースはAXIMとITCMに接続されています。ITCMのIは命令(Instruction)の意味です。0x00000000 番地から始まり、実際に内蔵されている内蔵メモリの大きさの分だけ存在します。最大で0.5GBです。

内蔵RAM(データ)領域

通常この領域にはデータを格納している内蔵メモリ(Flash、RAM)が接続されるようになっています。そして、バスインターフェースはAXIMとDTCMに接続されています。DTCMのDはデータ(data)の意味です。0x20000000番地から始まり、実際に内蔵されているメモリの大きさの分だけ存在します。最大で0.5GBです。

周辺領域メモリマップ

周辺機能のレジスタ等を配置する領域です。UARTやタイマ、USB、Ethernetなどがマッピングされています。バスインターフェースはAXIMとAHBPに接続されています。データアクセスの場合はAXIMまたはAHBP経由ですが、命令フェッチはAXIM経由のみになります。0x40000000番地から始まり、実際に内蔵されている周辺機能のレジスタ領域の大きさの分だけ存在します。最大で0.5GBです。

外部RAM領域

外部RAM(メモリ)用の領域です。命令フェッチとデータアクセスはAXIM経由で行われます。0x60000000番地から始まり、実装されている外部メモリ領域の大きさの分だけ存在します。最大で1.0GBです。

外部周辺領域

外部周辺機能用の領域です。命令フェッチとデータアクセスはAXIM経由で行われます。0xA0000000番地から始まり、実装されている外部周辺機能領域の大きさの分だけ存在します。最大で1.0GBです。

プライベート周辺バス領域

プロセッサの外部周辺機能のレジスタが配置される領域です。ここのレジスターへのデータアクセスは、EPPB経由で行われます。この領域はExecute Never(XN)です。これは「命令フェッチは禁止されている」と言う意味です。0xE0000000番地から始まり、実装されているレジスタ領域の大きさの分だけ存在します。

  • ①内部PPB 以下の機能にアクセスを提供します:
    • ●ITM(Instrumentation Trace Macrocell)
    • ●DWT(Data Watchpoint and Trace)
    • ●FPB(Breakpoint unit)
    • ●SCS(System Control Space :MPU含)、命令キャッシュとデータキャッシュと統合ネスト型ベクタ割り込みコントローラ(NVIC)、システムタイマ(Systick)
    • ●プロセッサーとPPB ROMテーブル
  • ②外部PPB 以下の機能にアクセスを提供します:
    • ●ETM(Embedded Trace Macrocell)
    • ●CTI(Cross Trigger Interface)
    • ●外部のシステムでのCoreSightデバッグとトレースコンポーネント。

ベンダSYS領域

ベンダシステム周辺装置のためのシステムセグメントです。データアクセスはAHBPインタフェース経由で行われます。この領域はXNであり、命令フェッチは禁止されています。0xE0100000 番地から始まります。

図4

32bitデータ境界におけるアンアラインドアクセスの取り扱い

Cortex-M7プロセッサはアンアラインドアクセス(Cortex-M編 第8回参照)をサポートしています。すべてのアクセスは見かけ上シングルサイクルで実行されます。しかし、内部で、それらが、2回以上のアラインドアクセスに変換されて実行されます。 従って、アラインドアクセスよりも遅くなります。加えて、いくつかのメモリ領域(PPB等)ではアンアラインドアクセスはサポートされていません。そのためARMではアラインドアクセスを使うように推奨しています。予測しないアンアラインドアクセスが発生した場合は、コンフィギュレーションコントロールレジスターの「UN ALIGN_TRP-bit」をチェックすればわかります。

また、アンアラインドアクセスが使えるのは次の命令に限られます。

  • ●LDR, LDRT
  • ●LDRH, LDRHT
  • ●LDRSH, LDRSHT
  • ●STR, STRT
  • ●STRH, STRHT

この他のロード・ストア命令では例外処理が発生します(UsageFault)。便利な機能ですが、使用する際には注意が必要です。