data2mem
の編集
https://www.am.ics.keio.ac.jp/proj/asap/wiki/?data2mem
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
-- 雛形とするページ --
(no template pages)
[[ASAP Top]] data2mem はビットファイルに含まれたBlockRAMの情報を編集して、 論理合成配置配線のプロセスなしにRAM/ROMの値を書き換えてくれる偉いコマンド。 しかしその実行プロセスが複雑なので、ここに使い方を示したい。 -メモリの書き方 とりあえず何でもよし。 例えば僕は次の感じで書きました。 #ref(memory.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倍以上向上する手法らしいので是非お試しを。
タイムスタンプを変更しない
[[ASAP Top]] data2mem はビットファイルに含まれたBlockRAMの情報を編集して、 論理合成配置配線のプロセスなしにRAM/ROMの値を書き換えてくれる偉いコマンド。 しかしその実行プロセスが複雑なので、ここに使い方を示したい。 -メモリの書き方 とりあえず何でもよし。 例えば僕は次の感じで書きました。 #ref(memory.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倍以上向上する手法らしいので是非お試しを。
テキスト整形のルールを表示する
添付ファイル:
memory.v
242件
[
詳細
]