为什么这个变量不被视为常量?

时间:2015-04-26 04:10:06

标签: loops iteration verilog hdl quartus

以下是我编写的代码是模拟解码器(Verilog HDL)的测试平台。它会将[15:0]IR转换为[25:0]ControlWord。 Literal也是一种受到关注的副产品。

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

  

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

因此我得到以下内容:

  

错误(10119):controluni_tb.v上的Verilog HDL循环语句错误(23):具有非常量循环条件的循环必须在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 

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

为什么不使用for循环进行IR,而不是使用永久循环?然后问题完全受限。

INSERT INTO [dbo].[Transaction] (Type, OwnerType)
VALUES (
   <cfqueryparam value='NonLeased' cfsqltype='cf_sql_varchar' />
  , <cfqueryparam value='Owner' cfsqltype='cf_sql_varchar' />
)
相关问题