在 Verilog 中,是否可以在执行逻辑后检查循环条件?
In Verilog, is it possible to check the conditions of a loop after executing the logic?
实际上,我正在寻找一种仅使用 3 位变量进行递增来循环 8 次的方法。
我知道一个简单的解决方案是使用一个 4 位变量并使用
for(i=0; i<8; i = i+1)
但是如果只有在执行循环内容后才能检查循环的条件,那么可以编写如下解决方案(使用 do...while 在 SystemVerilog 中编写)。
initial begin
reg [2:0] i = 3'b000;
do begin
$display("i = %g", i);
i++;
end while (i !== 3'b000);
end
谢谢!
do..while
构造存在于 system verilog 中,您展示的解决方案在那里工作。但它在普通 verilog 中不起作用。
对于普通的 verilog,您可以使用任何编程技巧来做到这一点,即使用标志:
reg [2:0] i;
reg flag;
initial begin
flag = 0;
i = 0;
while(flag == 0) begin
$display("i = %g", i);
i = i+1;
if (i == 0) flag = 1;
end
end
您可以手动展开一个迭代:
initial begin
i = 0;
$display("i = %g", i);
i = 1;
while( i != 0) begin
$display("i = %g", i);
i = i+1;
end
end
你可以使用重复:
initial begin
i = 0;
repeat(8) begin
$display("i = %g", i);
i = i+1;
end
end
等等。
实际上,我正在寻找一种仅使用 3 位变量进行递增来循环 8 次的方法。
我知道一个简单的解决方案是使用一个 4 位变量并使用
for(i=0; i<8; i = i+1)
但是如果只有在执行循环内容后才能检查循环的条件,那么可以编写如下解决方案(使用 do...while 在 SystemVerilog 中编写)。
initial begin
reg [2:0] i = 3'b000;
do begin
$display("i = %g", i);
i++;
end while (i !== 3'b000);
end
谢谢!
do..while
构造存在于 system verilog 中,您展示的解决方案在那里工作。但它在普通 verilog 中不起作用。
对于普通的 verilog,您可以使用任何编程技巧来做到这一点,即使用标志:
reg [2:0] i;
reg flag;
initial begin
flag = 0;
i = 0;
while(flag == 0) begin
$display("i = %g", i);
i = i+1;
if (i == 0) flag = 1;
end
end
您可以手动展开一个迭代:
initial begin
i = 0;
$display("i = %g", i);
i = 1;
while( i != 0) begin
$display("i = %g", i);
i = i+1;
end
end
你可以使用重复:
initial begin
i = 0;
repeat(8) begin
$display("i = %g", i);
i = i+1;
end
end
等等。