現在、Yosys を使用してコードを iCE40 開発ボードに合成することで Verilog を学んでいます。Verilog でパラメーターを使用することに行き詰まっています。次のコードがあります。
module tst;
parameter clkspd=12000000;
parameter baudrate=115200;
localparam bitperiod=$floor(clkspd/baudrate-0.5);
localparam bittmrwidth=$clog2(bitperiod);
//localparam bittmrwidth=$clog2(103);
initial begin
$display("Hello World!");
$display("width=%d",bittmrwidth);
end
endmodule
コードをコンパイルすると:
yosys -p 'synth_ice40 -top tst -blif tst.blif' tst.v
エラーが発生します:
ERROR: Failed to evaluate system function `\$clog2' with non-constant value at tst.v:5.
ただし、コメントアウトされた行を使用すると、すべてが期待どおりに機能します。
指定されたパラメータで「bittmrwidth」を計算するにはどうすればよいですか?