data2mem はビットファイルに含まれたBlockRAMの情報を編集して、 論理合成配置配線のプロセスなしにRAM/ROMの値を書き換えてくれる偉いコマンド。 しかしその実行プロセスが複雑なので、ここに使い方を示したい。
とりあえず何でもよし。 例えば僕は次の感じで書きました。
1.bitfile 1.まずビットファイルを生成する。これはいうことないよね。 2.3.4. *.llにはBlockRAMがどこに配置されたかの情報が示されているため、これを参照する。 例えば Bit 2235597 0x04000024 2285 Block=RAMB16_X1Y3 Latch=DOA6 Net=memOut<6> っとあれば、あぁこれは X1Y3にBRAMが配置されたんだとわかる。 ここで、該当RAMがいかなる名前に推論されたかは、.syrレポートを読めばわかる。 例えば、 Synthesizing (advanced) Unit <memory>. | ram_type | Block | | | Port A | | optimization | speed | | Unit <memory> synthesized (advanced). とあれば、これはROMの名前がMrom_varindex0000なので、*.ucfファイルには INST "MEM/Mrom__varindex0000" LOC = "RAMB16_X1Y3" と記述する。 5. bmm ファイルは例えば以下のように書ける。 ADDRESS_SPACE MEM RAMB16 INDEX_ADDRESSING [0x00000000:0x000003ff] ADDRESS_SPACE の次の MEM は何を書いても構わない。 続いてRAMB16 は他に RAMB18, RAMB32, RAMB36などインスタンシエートされたものを書く。 INDEX_ADDRESSINGはおまじない。(誰か教えてください) その次の空間にはアドレスの開始位置から終了位置までを書く。 今回の場合は0〜1023番地までのメモリなので 0 〜 3ff までとした。 6. mem ファイルは @00000000 から書き始め、その後、値を16進数で書いていく。 今回の場合は 0001 のように書いてよい。んですべてを記述しなくても何も記述がない場合は0が推論されるのだそうだ。 最後に $ data2mem -bm hoge.bmm -bd hoge.mem -p <デバイス名スピードグレードパッケージ> -bt hoge.bit 具体的には $ data2mem -bm ledTop.bmm -bd ledTop.mem -p xc5vsx50t-1-ff1136 -bt ledTop.bit このコマンドによってledTop_rp.bit が生成されて目出度し。 Xilinxによると作業効率が100倍以上向上する手法らしいので是非お試しを。 |