1.always-for用法
注意点:
①always块可以是时序逻辑,也可以是组合逻辑;
②always块内的for循环的变量定义为integer类型。
举例:做一些merge的时候比较常用,此时需要在每次循环开始对data赋初值。比如这里merge处置设为0,否则每拍最开始merge会使用上一拍的结果参与到merge。
reg a,b,merge;
integer i;
always @(*) begin
merge = 1'b0;
for(i=0; i<XX; i=i+1) begin:FOR1
a[i] = sss;
if()begin
b[i] = kkk;
merge = merge | b[i]; // 看着像组合逻辑环error,但是因为赋初始值还真允许
end
else
xxx
end
end
2.(generate)-for-always/assign/module例化-(endgenerate)用法
注意点:
①可以省略generate-endgenerate,但是综合后电路与省略前一样;
②always块外的for循环的变量要定义为genvar型。
举例:
reg [3:0] temp;
genvar i;
generate
for (i = 0; i < 3 ; i = i + 1) begin:FOR
always @(posedge sysclk) begin
temp[i] <= 1'b0;
end
end
endgenerate
3.总结
3.1.循环体
always-for只会产生一个实例块,因为for循环在always的内部;
generate-for-endgenerate会根据迭代的次数生成对应的多个实例块。
3.2.必须使用generate-for-endgenerate的情况
在循环/条件分支的语句中需要调用module
3.3.物理结构
两种方式的写法综合结果相同,always-for的仿真速度更快。