为什么我得到运行时致命错误 - 范围宽度表达式必须为正 - 对于我的计数器设计?

Why do I get run time fatal error - Range width expression must be positive - for my up counter design?

提问人:MD. SHAZZAD HOSSAIN 提问时间:4/4/2023 最后编辑:toolicMD. SHAZZAD HOSSAIN 更新时间:4/6/2023 访问量:63

问:

我正在尝试在我的设计中使用正边触发的触发器来设计一个 17 位纹波向上计数器。这是我的代码:

`timescale 1us/ 1ns 

module upcounter (clk, pr, clr, out);
    input wire clk;
    input wire pr;
    input wire clr;
    output wire [16:0] out;
    
    wire [16:0] fb;
    wire [16:0] i_wire;
    
    //const int n = 16;
    genvar i;
    
    //wire and1, and2;

    generate
    for (i = 0; i<17; i++) begin
        //int j = i;
        if (i == 0)begin
            dff d[i] (.clk(clk),.pr_b(pr),.clr_b(clr),.d(fb[i]),.q_b(fb[i]),.q(i_wire[i]));
        end else begin 
            dff d[i] (.clk(fb[i-1]),.pr_b(pr),.clr_b(clr),.d(fb[i]),.q_b(fb[i]),.q(i_wire[i]));
        end
        assign out[i] = i_wire[i];
    end
    endgenerate
endmodule

该代码编译时没有任何错误,但在初始化模拟时,它会抛出一个运行时致命错误,指出 ,它指示错误发生在以下行中:Range width expression must be positive

 dff d[i] (.clk(clk),.pr_b(pr),.clr_b(clr),.d(fb[i]),.q_b(fb[i]),.q(i_wire[i]));

如何解决此错误?

我使用主动 hdl 作为 EDA。

我试过使用和阻止。generateendgenerate

系统-Verilog 寄存器-传输-级 数字设计 -主动-HDL

评论


答:

1赞 toolic 4/4/2023 #1

VCS 生成以下编译错误:

Error-[ZONVS] Zero or negative value for size
Line 19
upcounter, "genblk1[0].i"
  Zero or negative value for size is not allowed.
  Value: 0
  Please fix the size value as a positive number.

当 i=0 时,解析为 ,编译器不喜欢。dff d[i]dff d[0]

在该行中,您可以使用以下命令代替:d0d[i]

        dff d0 (.clk(clk),.pr_b(pr),.clr_b(clr),.d(fb[i]),.q_b(fb[i]),.q(i_wire[i]));

这样就可以通过编译错误。但是,您最终会得到超过 17 个实例,这是您可能不想要的。例如,当 i=4 时,解析为包含 4 个实例的数组。dffd[i]d[4]

您可能只想在两行上使用。这为您提供了 17 个实例。dff ddff