verilog中的for 循环

例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://blog.csdn.net/wordwarwordwar/article/details/79829012

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值