パラメータ

# このページは,学生実験用資料として筑波大学リコンフィギュラブルコンピューティングシステム研究室のwebページで公開されていたものを,許可を得て転載したものです.


パラメータの宣言

Verilogでは以下のようにパラメータを設定することができます。parameterを設定することで、モジュールをパラメタイズすることができます。

 
parameter パラメータ名 = 値;
localparam パラメータ名 = 値;
  

以下に例を示します。

 
module ParameterSample(clock, reset);
parameter WIDTH = 4;
parameter INIT = 4'b0; // WIDTH'b0とはできない

// reg [4 - 1: 0] counter; として扱われる。
reg [WIDTH - 1: 0] counter;
...
always @(posedge clock) begin
if(reset) begin
// counter <= 4'b0; として扱われる。
  counter <= INIT;
...	    
  

パラメータの上書き

parameter文で宣言された、下位モジュールのパラメータを上書きすることができます。上書きするには、defparam文を用います。


defparam インスタンス名.パラメータ名 = 値;
  

以下にdefparamの例を示します。


module SuperModule;
...
// 下位モジュールsampleのパラメータを上書き
defparam sample.WIDTH = 8;
defparam sample.INIT = 8'bFF;
ParameterSample sample(.clock(clock), .reset(reset));
...
    

Verilog 2001におけるパラメータ宣言

Verilog 2001においては、ポート宣言のようにパラメータを設定することができます。


module モジュール名 #(
  parameter パラメータ名 = デフォルト値,
  parameter パラメータ名 = デフォルト値,
...
  parameter パラメータ名 = デフォルト値
) (
  // ポート宣言
);
    

パラメータを上書きするには、以下のように記述します。


モジュール名 #(
  .パラメータ名(値),
  .パラメータ名(値),
...
  .パラメータ名(値)
) インスタンス名 ( /* ポートの接続 */ );
    

例を以下に示します。


// 下位モジュール
module SubModule #(
  parameter WIDTH = 2,
  parameter INIT = 2'b0
) (
  output reg [WIdTH - 1: 0] out,
  input [WIDTH - 1: 0] in,
  input clock, reset;
);
...
endmodule

// 上位モジュール
module SuperModule();
...
SubModule #(.WIDTH(4), .INIT(4'bF))
  sub_module (.out(out), .in(in), .clock(clock), .reset(reset));
    

戻る