メモリインターフェース(前編)

メモリインターフェース概要

インターフェースの概要

メモリマップの章で述べましたが、Cortex-M7のインターフェースには、AXIM、ITCM、DTCM、AHBP、EPPBの様々なバスインターフェースが存在します。そして、各メモリ領域に接続されるメモリの種類、用途によって最適化されています。下表に、Cortex-M7のインターフェースをまとめました。

メモリタイプ メモリインターフェース
高速, 内蔵SRAM DTCM
内蔵Flash ITCM
アクセス時間の遅い 内蔵周辺 AHBP
低速Flashまたはチップ外の命令メモリ AXIM(命令キャッシュ経由)
低速またはチップ外のデータメモリ AXIM(データキャッシュ経由)
低速周辺機能 AXIM
低速周辺機能 APB周辺バス

TCM(Tightly Coupled Memory)インターフェース

TCMの概要

TCMには命令アクセス用のITCMとデータアクセス用のDTCMがあります。どちらもウェイトサイクルをサポートをしています。すなわち、低速メモリ用に最適化されているということになります。また、ブートアップに使用可能になっています。

ITCMのデータ幅はダブルワードの64bitです。DTCMはD1TCMとD0TCMで、各32bitです。上位ワードがD1TCMにアクセスし、下位ワードがD0TCMをアクセスするように分かれています。

ベースアドレスは決まっていて、次のアドレスです(第2回参照)。

  • ●ITCM:0x00000000
  • ●DTCM:0x20000000

どちらのTCMも命令実行とデータアクセスに使うことができますが、ITCMから命令をフェッチし、DTCMからデータを取り込むことで、パフォーマンスを最も高くできるようになっています。

TCMのインターフェース

図1

ITCMは1つの64ビットメモリインターフェースを持ち、DTCMは、D0TCM、およびD1TCMで各々32ビットメモリインターフェース持っていて、アドレスビット[2]で選択されます。RAMまたはRAMのようなメモリ(一般的なメモリ)を接続するように設計されています。すなわち書き込みや読み出しを繰り返すメモリ用バスです。読み出し専用バスや書き込み専用バスには向いていません。例えばFIFOの読み出し専用バスや書き込み専用バスには向いていません。

プリフェッチユニット(PFU)は、TCMインターフェースを使ってデータを読むことができます。ロードストアユニット(LSU)およびAHBSインターフェースも、TCMインターフェースを使ってデータの読み、書きができます。

TCMは、常にキャッシュ不要の占有の通常のメモリとして動作します。この際、メモリタイプ属性は無視されます。TCM自体はECC(誤りチェック、訂正)機能はありませんが、もし、TCMに接続されたメモリがECCをサポートする場合、訂正されたデータを戻すために、アクセスはリトライされなければなりません。

TCMのアービトレーション

TCMは、LSU(SW ロード用)とPFU(命令フェッチ用)とAHBS(AHBS読み出し用)から、アクセスされますが、その優先順位が決まっています。最も高いプライオリティはLSUです。次がPFUです。AHBSインターフェースは最も低い優先度になっています。より高い優先順位の機能がTCMをアクセスしている時には、それより低い優先順位の機能は、ストールされます。

ITCMとD0TCM とD1TCMの構成

TCMのサイズは、0KB、4KB、8KB、16KB、32KB、64KB、128KB、256KB、512KB、1MB、2MB、4MB、8MB、16MBで選択可能です。DTCMは2つのインターフェースD0TCMとD1TCMを持っています。これは、RAMの個々のインターフェースを取り付けたことになります。各々のサイズは全体のDTCMのサイズの半分になります。

命令/データTCMコントロールレジスタ構成を下図に示します。(※「ITCMCR – 0xE000EF90(R/W)」と「DTCMCR – 0xE000EF94(R/W)」の構成は同じ)

図2

AHBSインターフェース

AHBS(AHBスレーブ)の概要

図3

32ビットAHBスレーブ(AHBS)インターフェースは、ITCM、D1TCM、およびD0TCMへのシステムアクセスを提供します。AMBA 3 AHB-Liteプロトコルのスレーブインターフェースです。システムとプロセッサアクセスの同時要求をサポートします。書き込みはプロセッサストアキュウ(SQ : Store Queue)でバッファされます。TCMへのソフトウエア書き込みもバッファします。すべてのストアはインオーダー(順番通り)でマージはされません。プロセッサがスリープ状態でも使用可能です。

AHBSトランザクションにおける制限

プロセッサは、ソフトウエアメモリトランザクションに直接依存するAHBSのトランザクションをサポートしません。これは、AHBSトランザクションが終わるまで、システムが、ソフトウェアでメモリアクセスができないという意味です。したがって、AHBSへのプロセッサマスタポートからループバック(自分自身へデータを返すこと)を行うと、デッドロックを起こす可能性があるので、プロセッサマスタポートからのループバックはサポートされていません。

AHBSインターフェーストランザクションは、MPUルックアップを実行することはできません。そして、AHBSインターフェースアクセスが非特権(ユーザーモード)なのか、特権(スーパーバイザーモード)なのかの区別は内部的に行われません。したがって、保護機能はシステムが管理しなければなりません。AHBSインターフェースはシステムの要求に従って、アクセスされます。

TCMに共有される AHBSとソフトウエアストアのための書き込みバッファがあります。このバッファが、TCMのためのソフトウエアとAHBSの間の一貫性を可能にしています。AHBSインターフェースの書き込みは、バッファされ、投機的に(確定していない状態で)常にOKの反応を返します。もし、書き込みがその後中止されると、AHBSは書き込みを非同期で中止させます。

AHBSは排他的または、ロックされたアクセスをサポートしていません。そして、AHBSインターフェースストアーは内部の占有アクセス・モニターの状態に影響を及ぼしません。したがって、AHBSインターフェースとソフトウェアの間で並列性の同時実行を必要とするシステムには適していません。

AHBSのアービトレーション

プロセッサのアービトレーションには2つのポイントがあります:

  • ●ソフトウエアとAHBS用のSQへの書き込みを受け入れる
  • ●ソフトウエアとAHBSのためのTCM読み出し要求を実行する

この2つのケースのアービトレーションの方式は、両方とも、ラウンドロビン方式です。バス権の同時要求が無ければ、バス権を要求したバスマスターがバス権を得ますが、コンテンション(バス権の同時要求)が発生した場合は公正性カウンターがバス権の調停を行います。

公正性カウンター方式だと、コンテンションが余り発生しない場合の、バスマスターのための最適なスループットと、コンテンションが発生する場合の全てのバスマスターの最適な平均的スループットを保証することができます。

公平性カウンタでは、次の5つのソフトウェア設定可能なアービトレーション モードをサポートします:

  • ●ラウンドロビンのみ。
  • ●AHBSインターフェース帯域幅を縮小した公正性カウンターを使用しているラウンドロビン。
  • ●ソフトウエア帯域幅を縮小した公正性カウンターを使用しているラウンドロビン。
  • ●上記で定義された閾値をセットされた実行プライオリティーを持った公正性カウンターを使用している縮小したAHBSインターフェースのラウンドロビン。
  • ●システムがAHBSインターフェース帯域幅をコントロールする。

公正性カウンターは4ビット幅です。カウンターはTCMへのアクセス権を非優先にするために、ソフトウエアまたはAHBSに割り当てられます。コンテンション(複数が同時にアクセス権を要求)の場合、カウンターが0であるとき、割当てられたマスタが調停権を得ます、カウンターが0でないとき、他のマスターがバス権を得ます。各コンテンションで、カウンターはデクリメントして0から初期値に戻ります。ハードウエアは、特定の優先順位レベル(例外優先順位)だけのカウンターの使用をサポートします。

AHBスレーブコントロールレジスタ

公正性カウンターはAHBSCR(AHBスレーブコントロールレジスタ)で設定します。詳細を下図に示します。

図4

AHBSCR – 0xE000EFA0(RW)

ビット 名前 タイプ 機能
[15:11] INTCOUNT RW 公正性カウンターの初期設定値。AHBSCR.CTLにより選ばれたバス権要求マスターのアクセスプライオリティを下げるために使います
[10:2] TRPI RW AHBSの実行プライオリティを下げる閾値
0b0xxxxxxx:プライオリティはTRPI[7:0], NVICのエンコーディングと同じ
0b1111111:プライオリティ1
0b1111110:プライオリティ2
[1:0] CTL RW AHBプライオリティコントロール
0b00:AHBSのアクセスプライオリティが下がる
0b01:SWのアクセスプライオリティが下がる
0b10:AHBSのアクセスプライオリティが下がる(ソフトウエア実行のプライオリティがAHBSCR.TRI以上の場合)か、または等しいアクセスプライオリティが下がる
0b11:AHBSPRIシグナルはアクセスプライオリティのコントロールを持つ

AHB Peripheral インターフェース

AHBPインターフェース

図5

AHBPインターフェースは32-bit AHB-Liteインターフェース仕様に準拠しています。 32-bit AHB-Liteインターフェースは従来のCortex-M3やM4で使用した周辺機能のバス仕様(S-Bus)と同じですので、 Cortex-M3やM4で使用した周辺機能は、AHBPに接続することができます。また、AHBPインターフェースと接続されたAHBスレーブは、特別な場合を除いて、AHB仕様に準じていれば、どんなトランザクションも処理することができます。

AHBPインターフェースには次のような制限事項があります。

  • ●インターフェースは1回のみの転送で行います。したがって、すべてのバーストは1回です。
  • ●すべてのトランザクションは、メモリの4バイト境界はまたぎません。
  • ●32-bit AHB-Liteインターフェースなので、転送サイズの上限は32bitです。
  • ●データアクセスだけサポートします。命令フェッチはできません。
  • ●デバイス(Device)およびストロングリオーダ(Strongly-ordered)メモリへのトランザクションは、常に、転送サイズのアドレスに整列されます。
  • ●排他的なアクセスは、常に、転送サイズのアドレスに整列されます。

AHBP排他的アクセス

周辺のインターフェースは、共有されていないメモリロード/ストア/クリアの排他的命令を実行するために、メモリシステムの内部排他的モニタを使います。 内部のモニタは、共用メモリへの排他的なアクセスをチェックし、必要ならAHBメモリインターフェースを使っている外部のモニタもチェックします。排他的命令は、異なるプロセッサ間のセマフォや同期を保証するために使用可能です。

共用メモリへの排他的命令だけがAHBPでの排他的なアクセスを(結果として)行うことができます。共有されていないメモリへの排他的なアクセスは、バスでの非独占的なアクセスとしてマークされます。

コア内部では、AHBP拡張信号(内部信号)のEXREQPおよびEXRESPPシグナルが、AHBPの共有された独占的トランザクションのための排他的要求とレスポンスを伝えます。EXREQPはアドレスフェーズ信号です。EXRESPPはデータフェーズ信号です。EXREQP信号は以下の場合にアサートされます。

  • ●排他的ロード/ストアが、AHBP上および内部排他的アクセスモニタパス上の共有メモリに実行される。

Cortex-M7プロセッサは、 EXREQPとEXRESPPをCortex-M3プロセッサとCortex-M4プロセッサとは異なる使い方をしていますので、Cortex-M7プロセッサを使ったシステムでは、システム・ハードウェアとソフトウェアをアップデートする必要があります。

AHBPコントロールレジスタ

AHBPCR(AHBPコントロールレジスタ)の仕様を下図に示します。

図6

AHBPCR – 0xE000EF98(RW)