data2mem はビットファイルに含まれたBlockRAMの情報を編集して、 論理合成配置配線のプロセスなしに合成をしてくれる偉いコマンド。
しかしその実行プロセスが複雑なので、ここに使い方を示したい。
1.まずビットファイルを生成する。これはいうことないよね。 2.*.llにはBlockRAMがどこに配置されたかの情報が示されているため、これを参照する。 例えばBit 2235597 0x04000024 2285 Block=RAMB16_X1Y3 Latch=DOA6 Net=memOut<6>// Bit 2235611 0x04000024 2299 Block=RAMB16_X1Y3 Latch=DOA5 Net=memOut<5> Bit 2235625 0x04000024 2313 Block=RAMB16_X1Y3 Latch=DOA4 Net=memOut<4> Bit 2235653 0x04000024 2341 Block=RAMB16_X1Y3 Latch=DOA3 Net=memOut<3> Bit 2235667 0x04000024 2355 Block=RAMB16_X1Y3 Latch=DOA2 Net=memOut<2> Bit 2235681 0x04000024 2369 Block=RAMB16_X1Y3 Latch=DOA1 Net=memOut<1> Bit 2235695 0x04000024 2383 Block=RAMB16_X1Y3 Latch=DOA0 Net=memOut<0>
っとあれば、あぁこれは X1Y3にBRAMが配置されたんだとわかる。 ここで、該当RAMがいかなる名前に推論されたかは、.syrレポートを読めばわかる。 例えば、Synthesizing (advanced) Unit <memory>. INFO:Xst - The ROM <Mrom__varindex0000> will be implemented as a read-only BLOCK RAM, absorbing the register: <OUT>. INFO:Xst - The RAM <Mrom__varindex0000> will be implemented as BLOCK RAM
ram_type | Block |
Port A |
aspect ratio | 1024-word x 18-bit | |
mode | write-first | |
clkA | connected to signal <CLK> | rise |
weA | connected to internal node | high |
addrA | connected to signal <ADDRESS> | |
diA | connected to internal node | |
doA | connected to signal <OUT> |
optimization | speed |
Unit <memory> synthesized (advanced).
とあれば、これはROMの名前がMrom_varindex0000なので、.ucfファイルには
と記述する。