如果我在实例化模块时设置类型实参数,则 yosys 似乎存在错误。我在 Win7x64 上使用“官方”0.7 二进制版本。例如,我有以下模块:
module freq_divider (clk,
out_clk_reg);
parameter real in_freq = 2.0;
parameter real out_freq = 1.0;
input clk;
output reg out_clk_reg;
localparam integer div_period
= (in_freq / out_freq) / 2.0;
reg [$clog2(div_period+1)-1 : 0] div_reg = 0;
always @(posedge clk) begin
div_reg <= div_reg + 1;
if (div_reg == div_period) begin
out_clk_reg <= ~out_clk_reg;
div_reg <= 0;
end
end
endmodule
如果我用两个参数的整数值实例化它,这个模块工作正常。但是如果我用实际值实例化它,我会收到关于字符串值的奇怪警告。例如,如果尝试为 in_freq 传递 12000000.0:
...
parameter sys_clk_freq = 12000000.0;
parameter baud_freq = 9_600;
...
freq_divider #(sys_clk_freq, baud_freq) baud_clk_div(sys_clk, baud_clk);
...
我收到警告:
警告:用 uart_top.v:45 处的字符串替换浮点参数 baud_clk_div.$1 = 12000000.000000。
然后该模块似乎将“字符串”解释为模块内的巨大实际值:
警告:在 freq_divider.v:18 将实际值 1.277202e+035 转换为二进制 0。
这是真正的错误还是我犯了一些新手错误。我只做了大约两个星期的verilog编码。
里克·摩尔