田中太郎
parameterでビット幅や定数を上位階層で変更するのは一般的ですが
データ型も変更できます
サンプルコード
まずはparameterを上書きしないでみます
module tb;
bit clk = 0;
always #5 clk = ~clk; // クロックを生成
initial #10 $finish;
// dutをインスタンス
dut #(
// .DTYPE(byte signed)
) i_dut(
.clk(clk),
.dout(8'b10000000) // dutのDTYPEがunsignedなら128, signedなら-128
);
endmodule
module dut #(
parameter type DTYPE = byte unsigned
)(
input clk,
input DTYPE dout
);
always @(posedge clk)
$display("%d", dout); // 128を出力
endmodule
dutのDTYPEが上書きされていないので、doutはbyte unsigned型で128が出力されます
次に、parameter DTYPEを上書きします
module tb;
bit clk = 0;
always #5 clk = ~clk; // クロックを生成
initial #10 $finish;
// dutをインスタンス
dut #(
.DTYPE(byte signed)
) i_dut(
.clk(clk),
.dout(8'b10000000) // dutのDTYPEがunsignedなら128, signedなら-128
);
endmodule
module dut #(
parameter type DTYPE = byte unsigned
)(
input clk,
input DTYPE dout
);
always @(posedge clk)
$display("%d", dout); // -128を出力
endmodule
dutのDTYPEが上書きされたので、doutはbyte signed型で-128が出力されます
解説
データ型のparameterは以下のように宣言できます
module <module名> #(
parameter type <データ型名> = <データ型>
)(
// ポート宣言
);
まとめ
parameterで型を変更しました
コメント