Verilog For 循环
Verilog For loop
我在 verilog 中有以下代码来测试 For 循环:
module test1;
reg [2:0] i;
initial
begin
for(i=0;i<=3;i=i+1) begin
#10;
$display("%d",i);
end
end
endmodule
打印输出显示:
0
1个
2个
3
这对我来说很有意义。但是下面的波形让我很困惑:
reg 'i' 如何在此处取值“4”?
这是我正在处理的更大代码的一部分,我在测试台中使用了许多嵌套的 for 循环。
我正在添加一个行为怪异的嵌套循环:
module test1;
reg signed [2:0] i,j;
initial
begin
for(i=-3;i<=3;i=i+1) begin
for(j=-3;j<=3;j=j+1) begin
#10;
$display("%d %d",i,j);
end
end
end
endmodule
输出波形如下图:
为什么第二个循环不工作而第一个循环一直重复?
这与 for
循环如何知道何时停止有关。
写的时候
for(i=0;i<=3;i=i+1)
这说明了三件事:
i
从 0 开始
- 循环继续,直到
i<=3
变为 false
- 每次,
i
加一
问题是,在i
变为4之前,i<=3
不能变为假。当i
变为4时,循环停止循环。但是 i
仍然是 4.
在您的嵌套循环示例中,问题是溢出。
您已将 j
声明为带符号的三位:
reg signed [2:0] i,j;
但是你一直在循环,直到 j
变成 4:
for(j=-3;j<=3;j=j+1)
无法将 4 表示为带符号的三位整数。因为 j<=3
必须始终为真,所以循环永远不会停止。
我在 verilog 中有以下代码来测试 For 循环:
module test1;
reg [2:0] i;
initial
begin
for(i=0;i<=3;i=i+1) begin
#10;
$display("%d",i);
end
end
endmodule
打印输出显示:
0 1个 2个 3
这对我来说很有意义。但是下面的波形让我很困惑:
reg 'i' 如何在此处取值“4”?
这是我正在处理的更大代码的一部分,我在测试台中使用了许多嵌套的 for 循环。
我正在添加一个行为怪异的嵌套循环:
module test1;
reg signed [2:0] i,j;
initial
begin
for(i=-3;i<=3;i=i+1) begin
for(j=-3;j<=3;j=j+1) begin
#10;
$display("%d %d",i,j);
end
end
end
endmodule
输出波形如下图:
为什么第二个循环不工作而第一个循环一直重复?
这与 for
循环如何知道何时停止有关。
写的时候
for(i=0;i<=3;i=i+1)
这说明了三件事:
i
从 0 开始
- 循环继续,直到
i<=3
变为 false - 每次,
i
加一
问题是,在i
变为4之前,i<=3
不能变为假。当i
变为4时,循环停止循环。但是 i
仍然是 4.
在您的嵌套循环示例中,问题是溢出。
您已将 j
声明为带符号的三位:
reg signed [2:0] i,j;
但是你一直在循环,直到 j
变成 4:
for(j=-3;j<=3;j=j+1)
无法将 4 表示为带符号的三位整数。因为 j<=3
必须始终为真,所以循环永远不会停止。