... | ... | @@ -185,6 +185,7 @@ True dual port memoryはsimple dual port memoryの上位互換です。 |
|
|
True dual port memoryの機能を制限すればsimple dual port memoryを作れますが、その逆はできません。
|
|
|
FPGAに存在するBlockRAMは、true dual port memoryですが、[FPGA 内蔵 RAM の使用方法](FPGARAM#ブロックram)で紹介した方法で記述してしまうとsimple dual port memoryになってしまいます。
|
|
|
BlockRAMの機能をフルに使うには、以下のように記述します。
|
|
|
なお、当たり前ですが、同じアドレスに二つの値を同一サイクルに書き込んだ場合、どんな値が書き込まれるかは保証されないので注意してください。
|
|
|
|
|
|
```verilog
|
|
|
module databram(addr1, rdata1, we1, wdata1, addr2, rdata2, we2, wdata2, clk);
|
... | ... | @@ -219,7 +220,6 @@ endmodule |
|
|
また、以下のように書くことでもBlockRAMに推論されます。
|
|
|
こちらの書き方をしたほうが高速に動作するとされています。
|
|
|
ただし、書き込みアドレスと同じアドレスを読み出した時の挙動は、**Verilogでの記述に反して、何が読みだされるか保証されない**ので要注意です。
|
|
|
また、当たり前ですが、同じアドレスに二つの値を同一サイクルに書き込んだ場合、どんな値が書き込まれるかは保証されないので注意してください。
|
|
|
|
|
|
```verilog
|
|
|
module databram(addr1, rdata1, we1, wdata1, addr2, rdata2, we2, wdata2, clk);
|
... | ... | |