verilog~BRAMと分散RAM~

論理回路

 FIFOの設計をしていたときに学んだことをまとめておきます。
 (※FIFOとは、First In First Outの略で最初に来たものを最初に出力するということ、論理回路以外でも様々な場面で使われる言葉)
BRAMと分散RAMどっちを使うべきか…。設計当初は普通にBRAMを使うことを前提にして考えていました。しかし、BRAMのリソースが足りないことに気づき、急遽、分散RAMを用いてやり直すことになってしまった…
分散RAMにしたことで、レイテンシが変化し周辺回路もやり直しになってしまい、かなり大変でした。

今回は、BRAMと分散RAMの違いや、それぞれをRTL(verilog)で記述するとどうなるかをまとめていきたいと思います。

BRAM(ブロックラム)
 基本的に4096bitのデュアルポートのRAMで、FPGAによってこのRAMが何個入っているか異なる。

分散RAM
 LUTを使用して作られるRAMで、LUTのリソースがあれば好きなだけ生成可能。

ざっくり、それぞれの説明を書いたところで
下記にBRAMと分散RAMそれぞれをverilogで記載するときの例を示します。

BRAM

reg [9:0] mem [3:0];

always @(posedge CLK)
 begin
  if(en) mem[addr] <= d;
  q <= mem[addr];
 end

BRAMは、書き込みも読み込みも同期で動作する。分散RAMに比べて1クロック遅くなる

分散RAM

reg [9:0] mem [3:0];

always @(posedge CLK)
 if(en) mem[addr] <= d;

assign q = mem[addr];

分散RAMは、書き込みは同期であるが、読み出しが非同期動作となる。アドレスで指定された値を常に出力されている。


コメント

タイトルとURLをコピーしました