個別の入力および出力ポートを備えた Verilog HDL パラメーター RAM

author-image

投稿者:

この例では、LPM 機能 lpm_ram_dq を使用してメモリーブロックをインスタンス化する方法を示しています。変数 RAM は、LPM ライブラリーの lpm_ram_dq 機能を使用します。ポートは、赤文字で示されているように、最初に定義してから LPM ポートにマッピングします。次にパラメーター値がキーワード defparam でパススルーします。この例では、16x256 RAM ブロックをインスタンス化します。その他サイズの RAM ブロックも同様のプロセスを用いてインスタンス化できます。

lpm_file パラメーターは、メモリーブロック (RAM または ROM) の初期コンテンツを指定する、Memory Initialization File (.mif) を参照します。MIF は、ASCII テキストファイルであり、手動で作成するか、シミュレーションの出力から保存することができます。MIF では、メモリー長および幅の値を指定する必要があり、オプションでアドレスおよびデータ値をディスプレイおよび解釈する基数を指定できます。これらの値は、下記に含まれるサンプルファイル map_lpm_ram.mif を展開した中に、赤文字で示されています。MIF は、MAX+PLUS II コンパイラーおよびシミュレーターで、メモリー初期化用の入力ファイルとして使用します。

この例をプロジェクトで使用する際の詳細は、以下をご覧ください。

Verilog HDL 例の使用方法›

RAMveri.v

// instantiation of lpm_ram_dq, 16-bit data, 256 address location

module map_lpm_ram (dataout, datain, addr, we, inclk, outclk);

// port instantiation

input   [15:0] datain;
input   [7:0] addr;
input   we, inclk, outclk;

output  [15:0] dataout;

// instantiating lpm_ram_dq

lpm_ram_dq ram (.data(datain), .address(addr), .we(we), .inclock(inclk), 
                .outclock(outclk), .q(dataout));

// passing the parameter values

defparam ram.lpm_width = 16;
defparam ram.lpm_widthad = 8;
defparam ram.lpm_indata = "REGISTERED"
defparam ram.lpm_outdata = "REGISTERED"
defparam ram.lpm_file = "map_lpm_ram.mif"

endmodule

MIF ファイルから展開

map_lpm_ram.mif をダウンロード

WIDTH = 16;
DEPTH = 256;

ADDRESS_RADIX = HEX;
DATA_RADIX = HEX;

CONTENT BEGIN
   0   :   ffff;
   1   :   0000;
   2   :   bbf3;
   3   :   0000;
   4   :   0000;
   .
   .
   .
   fb   :   0000;
   fc   :   0000;
   fd   :   0000;
   fe   :   0000;
   ff   :   0000;
END;