例1.
module test(
output reg [8:0] sumx ,
input [4:0] x
);
parameter n = 3'd3;
integer i ;
always @ (*)
begin
sumx = 1 ;
for( i=0; i<n; i=i+1 )
sumx = sumx + x ;
end
endmodule
令x=3,仿真结果
综合结果:
for循环n次代表有n个相似的电路模块存在;代码上的“循环反馈”结构在阻塞赋值时代表前后有关联
综合结果既不是一个加法器循环三次(C语言),也不是三个并联的加法器(generate for),而是三个加法器串联
注:
input [7:0] n
Error (10119): Verilog HDL Loop Statement error at test.v(13): loop with non-constant loop condition must terminate within 250 iterations
循环次数不能超过250,最好参数化
在一个周期内统计14bit din中1的个数 (海思面试)
例2.
out[0] <= y[0] ^ x[0] ;
out[1] <= y[2] ^ x[1] ;
out[2] <= y[4] ^ x[2] ;
…
out[31] <= y[62] ^ x[31] ;
这些代码需要输入32行,为了压缩代码,提高效率,我们往往会使用for语句:
always @ (posedge clk)
for ( i=0; i<32; i=i+1 ) out[i] = y[i*2] ^ x[i] ;
例2在loop中并没有出现反馈。综合后就是并联且没互联的32个异或门文章来源:https://www.toymoban.com/news/detail-409810.html
https://blog.csdn.net/wordwarwordwar/article/details/79829012文章来源地址https://www.toymoban.com/news/detail-409810.html
到了这里,关于verilog中的for 循环的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!