For loop verilog中无止境循环的求解
verilog中的for循环语句有一些问题For loop verilog中无止境循环的求解,for-loop,verilog,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:完整代码可在此处找到: 埃里克在评论中给出了答案,因此我将其复制到这里作为答案: 在verilogreg[31:0]i被解
reg [31:0] i;
initial begin
for (i=2; i > 0; i = i - 1) begin
$display ("%d\n", i);
end
end
这段代码运行时没有任何问题,但是如果我将中间条件更改为I>=0,程序将重复运行,没有停止的希望
我不明白为什么会这样
PS:完整代码可在此处找到:
埃里克在评论中给出了答案,因此我将其复制到这里作为答案: 在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])
是否将i
解释为未签名的数字?在这种情况下,0-1=2^32-1>0
,这将解释无限循环。