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:谢谢你的出色答案。 –