verilog中也有for循环,并且使用方法与C语言中较为类似,不过在使用过程中仍需注意几个点。
verilog本质上还是在描述电路,因此for循环不可乱用,并且for循环的使用范围很窄很窄。就我目前使用而言,低阶for循环(单独一个for,配合always块)仅仅在“①针对较长数据的位置反转②存储器,例如fifo的初始化阶段”这两个场景中使用;高阶for循环(for循环配合generate,以及genvar)可以对重复使用的子模块循环例化,以提升效率。
简单介绍下低阶for的使用,给大家避避雷。
reg [7:0] r_data;
always@(*)begin:inverse_data
integer i;
for(i = 0;i < 8;i = i + 1)begin
r_data[i] = i_data[8 - i - 1'b1];
end
end
以上代码是对数据的每位进行一个翻转。
需要注意三点:
①在verilog里,使用integer,而不是int;
②在每个always后面起个名字,例如这里的“inverse_data”;
③for循环是可综合的。