3
我正在學習Verilog,使用Yosys將代碼合成到iCE40開發板。我堅持在verilog中使用參數。我有以下代碼:Yosys中的計算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」?
這。但是,Yosys不支持很多SystemVerilog(IEEE Std 1800),僅支持Verilog(IEEE Std 1364)。 '$ rtoi'和'$ itor'的支持仍然缺失,但是我現在將它添加到提交[dfb461f](https://github.com/cliffordwolf/yosys/commit/dfb461fe5213ec649f384f1e1dbd6d58d5763910)。也許你想編輯你的答案使用'$ rtoi'而不是'int'',所以它適用於Yosys。 – CliffordVienna
@CliffordVienna:謝謝你的建議。我更新了我的答案以使用'$ rtoi'。 – toolic
@toolic:謝謝你的出色答案。 –