1

次の構成で Verilog で RAM ブロックを構築しようとしています。

  • ポート A: 128 ビット幅、clk_a を使用すると、RAM ブロックは 128 ビット幅 x 128 ラインの深さと見なされます。
  • ポート B: clk_b を使用した 32 ビット幅、RAM ブロックを 32 ビット幅 x 512 ラインの深さとして認識

READ-WRITE シリアライゼーションとミューテックスについて心配する必要はありません。その上のレイヤーで処理します。

基本的に、128 ビット× 128 行を生成するコードは次のようになります。

reg [DATA_WIDTH-1:0]                 mem  [0:2**ADDRESS_WIDTH-1];

さて、32 ビット× 512 の深さのように見せたい場合、このメモリをリファクタリングして異なるようにするにはどうすればよいでしょうか (C でのリキャストのようなものです)。32 ビット ワード イネーブルでこれを実行できる可能性があることは理解していますが、これを達成するためのよりクリーンな方法があるかどうかを確認しようとしています。

どう考えているか教えてください ?

RRS

訂正: ザイリンクスの BRAM について言及しています (BRAM は深さ 512 にはなりません)。ただし、これは基本的に、グルー ロジックが複数の BRAM をチェーンするメモリ ブロックです。ご指摘ありがとうございます!!

4

2 に答える 2

2

I solved it this way:

In ISE, I was able to find "Language Templates" in one of the menus which has actual code samples. There is one with "File I/O", that one works perfectly.

You can also build a wrapper module around the dual port RAM which will change data widths on the other side. On the smaller data-width port (i.e. more address lines) you can use the lower address bits as a word select system allowing you to write to part of a memory line. This synthesizes properly for me (check your synthesis tool).

于 2012-06-14T13:57:07.703 に答える
0

これを行う正確な方法については、ザイリンクスのドキュメントを参照してください。たとえば、 217 ページから始まるhttp://www.xilinx.com/support/documentation/sw_manuals/xilinx13_2/xst_v6s6.pdfには、求めていることを行う方法の明示的な VHDL および Verilog の例が示されています。

于 2012-06-14T04:37:00.950 に答える