モジュールがインスタンス化されるときに設定されるパラメーターに基づいてパラメーターを設定したいと思います。私は次のものを持っています。
module foo #(WORDS = 8);
parameter P00 = 33;
logic [7:0] tmp;
generate
case (WORDS)
4: begin : A
assign tmp = 8'haa;
parameter P00 = 4;
end
8: begin : B
assign tmp = 8'hbb;
parameter P00 = 8;
end
16: begin : C
assign tmp = 8'hcc;
parameter P00 = 16;
end
default: begin : D
assign tmp = 8'hdd;
parameter P00 = 8;
end
endcase
endgenerate
initial begin
$display ("WORDS = %d", WORDS);
$display ("tmp = %h", tmp);
$display ("P00 = %d", P00);
end
endmodule
P00 を再定義するとエラーが発生すると予想していましたが、コンパイルして実行すると、代わりに次のように表示されました。
WORDS = 8
tmp = bb
P00 = 33
「パラメータ P00 = 33」の割り当てにコメントすると、「識別子 P00 はまだ宣言されていません」というメッセージが表示されます。エラー。
生成ブロックが無視されているようです。ここで何が問題なのですか?