在verilog中解决无限循环

时间:2014-03-11 05:01:13

标签: for-loop verilog

我在verilog中遇到了for循环语句的一些问题。

reg [31:0] i;

initial begin
  for (i=2; i > 0; i = i - 1) begin
    $display ("%d\n", i);
  end
end

此代码运行没有任何问题,但如果我将中间条件更改为i> = 0,则程序会反复运行,而无需停止。

我不明白为什么会这样!

PS:完整的代码可以在这里找到: http://pastebin.com/3LX0Mkg0

1 个答案:

答案 0 :(得分:4)

Eric在评论中给出了答案,所以我在这里复制它作为答案:

在verilog中reg [31:0] i;被解释为无符号数。因此i >= 0永远都是真的。要将i定义为已签名,您必须按以下方式对其进行定义:reg signed [31:0] i;

虽然我们在讨论verilog中的已签名数字,但我想指出一个主要问题:如果你选择一个有符号数字(如i[15:0]),则结果是无符号的。即使您选择i[31:0]之类的所有位,情况也是如此。您可以使用$signed这样的任务来解决此问题:$signed(i[15:0])