トップ 一覧 検索 ヘルプ RSS ログイン

dpram.vの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!デュアルポートメモリ(ブロックRAM)
同期書き込み同期読み出しのデュアルポートメモリ.
ポート1は読み書き可.ポート2は読み出しのみ可
論理合成により,FPGAのブロックRAMに変換される.
同時書き込みは読み出し優先.(同じ番地に読み出しと書き込みを同時に行うと,読み出しが先に行われる.)
同時書き込みは読み出し優先(read-first).(同じ番地に読み出しと書き込みを同時に行うと,読み出しが先に行われる.)

!!パラメータ
,パラメータ名,既定値, 
,DWIDTH,16,データのビット幅
,AWIDTH,12,アドレスのビット幅
,WORDS,4096,ワード数(=2^AWIDTH)

!!入出力ポート
, ,ポート名,ビット数, 
,入力,clk,グローバルクロック
,入力,load1,1,ポート1の書き込み許可(1のときclkの立ち上がりでaddr1番地にd1を書き込む)
,入力,load2,1,ポート2の書き込み許可(1のときclkの立ち上がりでaddr2番地にd2を書き込む)
,入力,addr1,AWIDTH,ポート1のアドレス指定
,入力,addr2,AWIDTH,ポート2アドレス指定
,入力,d1,DWIDTH,ポート1のデータ指定
,入力,d2,DWIDTH,ポート1のデータ指定
,出力,q1,DWIDTH,addr1番地のデータ
,出力,q2,DWIDTH,addr2番地のデータ


!!ソースコード
 module dpram(clk, load1, addr1, addr2, d1, q1, q2);
  parameter DWIDTH=16,AWIDTH=12,WORDS=4096;
 
  input clk,load1,load2;
  input [AWIDTH-1:0] addr1,addr2;
  input [DWIDTH-1:0] d1,d2;
  output [DWIDTH-1:0] q1,q2;
  reg [DWIDTH-1:0] q1,q2;
  reg [DWIDTH-1:0] mem [WORDS-1:0];
 
  always @(posedge clk)
    begin
      if(load1) mem[addr1] <= d1;
      q1 <= mem[addr1];
   end
 
  always @(posedge clk)
    begin
      if(load2) mem[addr2] <= d2;
      q2 <= mem[addr2];
   end
 
 integer i;
  initial begin
    for(i=0;i<WORDS;i=i+1)
           mem[i]=0;  // ここにメモリの初期化(mem[12'h001]=16'h1234;など)を書く.
  end
 
 endmodule