-1

以下是我编写的代码,是模拟解码器(Verilog HDL)的测试台。它转换[15:0]IR[25:0]ControlWord. 字面量也是一种被关注的副产品。

0-65535 的所有值都需要针对 16 位IR变量进行测试。在循环开始时,我明确指定IR为 0,但 Quartus 告诉我:

警告 (10855):controluni_tb.v(20) 处的 Verilog HDL 警告:变量 IR 的初始值应为常数

结果我得到以下信息:

错误 (10119):controluni_tb.v(23) 处的 Verilog HDL 循环语句错误:具有非常量循环条件的循环必须在 250 次迭代内终止

我的测试台模块的代码如下:

module controluni_tb;
  reg [15:0]IR;
  reg clock;
  wire [25:0]ControlWord;
  wire [15:0] literal;
  Total_Control_Unit_2 dut (IR,ControlWord,literal);

  initial
  begin
    clock <= 1'b0;
  end

  initial
  begin
    IR <= 16'b0;
  end

  initial
  begin
    forever
    begin
      #1 IR <= IR + 16'b1;
    end
  end

  initial
    #65535 $finish;
endmodule 
4

2 回答 2

0

您的代码没有错误。initial块和系统功能 ( $finish) 用于仿真(不是综合)。该错误与合成有关。我编辑了您的代码以提高可读性(您的时钟始终为​​零!):

module controluni_tb;
    reg [15:0]IR;
    reg clock;
    wire [25:0]ControlWord;
    wire [15:0] literal;

    Total_Control_Unit_2 dut (IR,ControlWord,literal);

    initial begin
        clock = 1'b0;
    end

    initial begin
        IR = 16'b0;
        forever #1 IR = IR + 16'b1;
    end

    initial begin
        #65535 $finish;
    end
endmodule 
于 2015-04-26T06:09:42.593 回答
0

为什么不使用for循环而不是使用for循环呢?那么问题是完全有界的。

initial begin
    for (IR = 0; IR <= 65535; IR++);
    $finish;
end
于 2015-04-27T16:11:22.173 回答