使用真实模块参数的yosys bug

时间:2018-06-18 20:06:14

标签: yosys

如果我在实例化模块时设置了类型实参数,那么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处的字符串替换浮点参数baud_clk_div。$ 1 = 12000000.000000:45。

然后该模块似乎正在解释&#34;字符串&#34;作为模块内部的巨大实际价值:

警告:在freq_divider.v上将实际值1.277202e + 035转换为二进制0:

这是真正的错误还是我犯了一些新手的错误。我只做了两周左右的verilog编码。

Rick Moll

0 个答案:

没有答案