ASAP Top

data2mem はビットファイルに含まれたBlockRAMの情報を編集して、 論理合成配置配線のプロセスなしにRAM/ROMの値を書き換えてくれる偉いコマンド。

しかしその実行プロセスが複雑なので、ここに使い方を示したい。

とりあえず何でもよし。 例えば僕は次の感じで書きました。

filememory.v

1.bitfile
2.*.ll
3.*.syr
4.*.ucf
5.*.bmm
6.*.mem

1.まずビットファイルを生成する。これはいうことないよね。
2.3.4. *.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 |
| diA | connected to internal node | |
| doA | connected to signal <OUT> | |


| 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]
 BUS_BLOCK
  MEM/Mrom__varindex0000 [15:0] LOC = X1Y3;
 END_BUS_BLOCK;
END_ADDRESS_SPACE;

ADDRESS_SPACE の次の MEM は何を書いても構わない。
続いてRAMB16 は他に RAMB18, RAMB32, RAMB36などインスタンシエートされたものを書く。
INDEX_ADDRESSINGはおまじない。(誰か教えてください)
その次の空間にはアドレスの開始位置から終了位置までを書く。
今回の場合は0〜1023番地までのメモリなので 0 〜 3ff までとした。
6. mem ファイルは

@00000000

から書き始め、その後、値を16進数で書いていく。
今回の場合は

0001
0002
0004
.....

のように書いてよい。んですべてを記述しなくても何も記述がない場合は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倍以上向上する手法らしいので是非お試しを。

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS