メモリ (MEM) ファイルは、連続するデータ ブロックを手動で記述したテキスト ファイルで、ELF ファイルの代わりに使用できます。MEM ファイルの形式は、次の 2 つの基本要素で構成される業界標準フォーマットです。
- 16 進数のアドレス指定子: @ 文字の後に 16 進数のアドレス値を指定します。@ 文字と最初の 16 進数文字の間にはスペースは入りません。
- 16 進数のデータ値: 16 進数アドレス値の後にスペース、タブ、またはキャリッジ リターン文字で区切って 16 進数データ値を指定します。
MEM ファイルは 16 進数フォーマットなので、各文字はメモリで 4 ビットまたは 1 ニブルになります。
16 進数のデータ値には、必要に応じて何個でも 16 進数文字を含めることができますが、16 進数文字が奇数個含まれる場合は、最初の 16 進数文字は 0 であると想定されます。たとえば、16 進数値 A、C74、および 84F21 は、それぞれ 0A、0C74、および 084F21 に変換されます。
アドレスの後には、少なくとも 1 つのデータ値から最大で前のアドレス値に属するのと同じ数までのデータ値を指定する必要があります。次は、よく使用される MEM ファイル形式の例です。
@0000 3A @0001 7B @0002 C4 @0003 56 @0004 02
@0005 6F @0006 89...
UpdateMEM には、重複の少ないフォーマットを使用する必要があります。1 つのアドレス指定子を、連続するデータ ブロックの最初に 1 つ使用します。前の例は、次のように記述し直すことができます。
@0000 3A 7B C4 56 02 6F 89...
その後に続く各データ値のアドレスは、前のアドレス指定子からの距離から導かれます。MEM ファイルには、必要なだけいくつでも連続するデータ ブロックを含めることができます。データ ブロック間のアドレス範囲のギャップは任意のサイズにできますが、2 つのデータ ブロックを 1 つのアドレス範囲に重複させることはできません。
『Vivado Design Suite ユーザー ガイド: 合成』 (UG901) の「RAM 内容の初期化」セクションで説明されているように、Vivado Design Suite ではメモリ初期化にも MEM ファイル フォーマットがサポートされています。Vivado Design Suite でサポートされている MEM ファイルのフォーマットは、UpdateMEM でサポートされているファイル フォーマットとは異なります。
Vivado ツールの MEM ファイル構造は、Verilog 言語仕様に準拠するように、メモリを配列して扱う合成ビューと一致するように定義する必要があります。UpdateMEM に使用する MEM ファイルには、メモリ マップ情報 (MMI) ファイルで定義されている <Datawidth> タグと一致するようにスペースを含める必要があります。詳細は、MMI ファイルの構文 を参照してください。
Verilog 言語仕様では、メモリは配列として処理されるため、64k メモリ (256x256 配列) の AMD Vivado™ 合成の MEM ファイルは、次のようになります。
@00000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
UpdateMEM コマンドは、メモリのインプリメンテーション後の物理ビューを持つので、MEM ファイルは次のようになります。
@00000000
aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb
<Datawidth>
タグの MSB および LSB 属性で決まります。