在 Verilog 中,当在顺序过程中使用 for 循环时,如何递增顺序变量?
In Verilog, when using a for-loop within a sequential process, how can you increment the sequential variable?
这里是一段代码,希望你没有序言也没问题:
always @ (posedge clk)
begin
if(rst)
begin
i<=0;
j<=0;
end
else
begin
for(j = 0 ; j < 16 ; j = j+1)
begin
if(i<8)
begin
var[j] <= var_2[i];
i <= i+1;
end
end
end
end
基本上,我想知道外部 "for-loop" 是否会错误地增加计数器变量 i
,而不是简单地并行计算 16 个 var
。如果是这种情况,我是否应该缩短 for 循环以便变量在 for 循环之外递增?
谢谢!
你让代码变得不必要的复杂。
如果 i<8 则执行这些:
var[j] <= var_2[i];
i <= i+1;
但是 i
直到 在 时钟边沿之后才递增。
由于 'i' 不会改变条件不会改变,因此一旦为真,它对 j
.
的所有值都保持为真
可能更好的理解方式是编写如下具有完全相同行为的代码:
always @ (posedge clk)
begin
if(rst)
begin
i<=0;
j<=0;
end
else
begin
for (j = 0 ; j < 16 ; j = j+1)
begin
if(i<8)
var[j] <= var_2[i];
end
// i increment independent from the 'j' loop
if(i<8)
i <= i+1;
end
end
这里是一段代码,希望你没有序言也没问题:
always @ (posedge clk)
begin
if(rst)
begin
i<=0;
j<=0;
end
else
begin
for(j = 0 ; j < 16 ; j = j+1)
begin
if(i<8)
begin
var[j] <= var_2[i];
i <= i+1;
end
end
end
end
基本上,我想知道外部 "for-loop" 是否会错误地增加计数器变量 i
,而不是简单地并行计算 16 个 var
。如果是这种情况,我是否应该缩短 for 循环以便变量在 for 循环之外递增?
谢谢!
你让代码变得不必要的复杂。
如果 i<8 则执行这些:
var[j] <= var_2[i];
i <= i+1;
但是 i
直到 在 时钟边沿之后才递增。
由于 'i' 不会改变条件不会改变,因此一旦为真,它对 j
.
可能更好的理解方式是编写如下具有完全相同行为的代码:
always @ (posedge clk)
begin
if(rst)
begin
i<=0;
j<=0;
end
else
begin
for (j = 0 ; j < 16 ; j = j+1)
begin
if(i<8)
var[j] <= var_2[i];
end
// i increment independent from the 'j' loop
if(i<8)
i <= i+1;
end
end