Я изучаю Verilog на данный момент, используя Yosys для синтеза кода на доске разработки iCE40. Я застрял в использовании параметров в verilog. У меня есть следующий код:Вычисленный параметр verilog в Yosys
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' по-прежнему отсутствовала, но теперь я добавил ее в commit [dfb461f] (https://github.com/cliffordwolf/yosys/commit/dfb461fe5213ec649f384f1e1dbd6d58d5763910). Возможно, вы хотите отредактировать свой ответ, чтобы использовать '$ rtoi' вместо if 'int'', поэтому он применим к Yosys. – CliffordVienna
@CliffordVienna: Спасибо за предложение. Я обновил свой ответ, чтобы использовать '$ rtoi'. – toolic
@toolic: Спасибо за отличный ответ. –