次に、ブロック RAM のインプリメントされたアドレス空間に関する注意事項と、メモリ マップ情報 (MMI) ファイルの定義を示します。
- ブロック RAM の幅とワード数は決まっていますが、CPU アドレス空間は 1 つのブロック RAM の幅およびワード数よりも大きくする必要があります。その場合、次の図に示すように、複数のブロック RAM が論理的にグループ化されて、1 つの CPU アドレス空間が作成されます。
- 1 回の CPU バス アクセスは、たとえば 32 ビットまたは 64 ビット (4 バイトまたは 8 バイト) など、データのバイト幅の倍数であるのが一般的です。
- 複数のデータ バイトの CPU バス アクセスでは、そのデータを取得するために複数のブロック RAM にアクセスできるので、バイト リニア CPU データは、各ブロック RAM のビット幅と 1 回のバス アクセスでアクセスされるブロック RAM 数でインターリーブされますが、CPU アドレスとブロック RAM の位置関係は、規則正しく、かつ簡単に計算できるようになっている必要があります。
- CPU データは、複数のブロック RAM の論理グループではなく、CPU リニア アドレス指定スキームに対してブロック RAM で構築されたメモリ空間にあります。
- アドレス空間は連続していて、CPU バス幅の整数倍です。バス ビット レーン インターリーブは、Virtex 7 デバイスのブロック RAM のポート サイズでサポートされるサイズでのみ可能です。
- アドレス指定では、命令とデータ メモリ空間の違いも考慮されます。命令空間は書き込みできないので、アドレス幅に制限はありませんが、データ空間は書き込みできるので、個々のバイトを書き込む機能が必要です。そのため、各バス ビット レーンはアドレス指定できます。
- メモリ マップのサイズと個々のブロック RAM の位置により、アクセス時間は左右されます。インプリメンテーション後にアクセス時間を評価して、デザイン仕様を満たしているかどうかを検証してください。 図 1. ブロック RAM のアドレス空間
図のアドレス空間には、バス ブロック 0 ~ 3 の 4 つのバス ブロックが含まれています。
- CPU バス アクセスは 8 ブロック RAM (64 ビット) 幅で、ブロック RAM の各列には「ビット レーン」と呼ばれる CPU バス アクセスの 8 ビット幅スライスが配置されています。
- 1 回のバス アクセスでアクセスする 8 つのブロック RAM の各行が、1 つのバス ブロックにまとめられています。このため、各バス ブロックは 64 ビット幅、4096 バイトになります。
- 8 つのブロック RAM 全体がアドレス ブロックと呼ばれる連続アドレス空間にまとめられます。
右上角のアドレスは 0xFFFFC000
で、左下角のアドレスは 0xFFFFFFFF
です。1 回のバス アクセスで、8 ブロック RAM の 8 データ バイトを取得するので、バイト リニア CPU データは 8 バイトでインターリーブされる必要があります。
この例では、左から右へ [0:7]、[8:15] のようにバイト別にインデックスされた 64 ビット データ ワードを使用しています。
- バイト 0 がビット レーン BRAM 7 の 1 つ目のバイト ロケーションに、バイト 1 がビット レーン BRAM6 の 1 つ目のバイト ロケーションに、というようにバイト 7 まで繰り返されます。
- CPU データのバイト 8 はビット レーン BRAM7 の 2 つ目のバイト ロケーションに、バイト 9 はビット レーン BRAM6 の 2 つ目のバイト ロケーションに、というように CPU データ バイト 15 まで繰り返されます。
- このインターリーブ パターンは、最初のバス ブロックのすべてのブロック RAM が満たされるまで繰り返されます。
- このプロセスは、メモリ空間全体が満たされるか、入力データがすべて消費されるまで、後続の各バス ブロック対して繰り返されます。
MMI ファイルの構文で説明するように、ビット レーンおよびバス ブロックが定義される順序によってこの充填順序が決まります。この例では、ビット レーンが左から右に定義され、バス ブロックが上から下へと定義されていると想定しています。
このプロセスは、これらの式がバイト幅データに制限されていないので、「ビット レーン マッピング」と呼ばれます。これは、プログラムされた CPU コードを固定サイズの EPROM デバイスのバンクに配置するプロセスに類似していますが、まったく同じではありません。
これらのプロセスの主な違いは、次のとおりです。
- エンベデッド システムを開発する場合は通常、決まった数および構成のバイト幅ストレージ デバイスのバイト レーン マップに、カスタム ソフトウェア ツールが使用されます。デバイスの数と構成は変更できないので、これらのツールで特定のデバイス配列が想定されます。このため、設定オプションはほとんどないか、まったくありません。
一方、FPGA ブロック RAM の数と構成は FPGA の制限内であれば完全に設定可能です。ブロック RAM のバイト レーン マッピング用のツールでは、大規模なデバイス配列セットをサポートする必要があります。
- 既存のバイト レーン マッピング ツールでは、ボード レベルのハードウェアが昇順で構築されるので、バイト幅デバイスの物理的アドレス指定は昇順であると想定されます。FPGA ブロック RAM には決まった使用制約はないので、FPGA プログラマブル ロジック内のどこにでも、ブロック RAM と共にグループ化できます。この例ではブロック RAM が昇順で表示されていますが、ブロック RAM はどの順序でも構成できます。