Verilog HDL中循环语句用来控制执行语句的执行次数,共有四种循环语句。
forever语句
- repeat语句
- while语句
- for语句
1.forever语句:
forever语句的格式为forever 语句或forever begin 多条语句 end
forever循环语句常用于产生周期性的波形,用来作为仿真测试信号。它与always语句的不同之处在于,不能独立写在程序中,必须写在initial块中。
2.repeat语句:
repeat语句的格式为:repeat(表达式) 语句 或 repeat(表达式) begin 多条语句 ;end
在repeat语句中,其表达式通常为常量表达式。
例如:使用repeat循环语句及加法和移位操作来实现一个乘法器:
parameter size = 8,longsize = 16;
reg [size:1] opa,opb;
reg [longsize:1] result;
begin: mult
reg [longsize:1] shift_opa,shift_opb;
shift_opa = opa;
shift_opb = opb;
result = 0;
repeat(size)
begin
if(shift_opb[1])
result = result + shift_opa;
shift_opa = shift_opa<<1;
shift_opb = shift_opb>>1;
end
end
3.while语句:
while语句的格式:
while(表达式)语句;
或
while(表达式) begin 多条语句 ; end
例如:用while循环语句对rega八位二进制中值为1的位进行计数:
begin : countls
reg[7:0] tempteg;
count = 0;
tempreg = rega;
while(tempreg)
begin
if(tempreg [0]) count = count +1;
tempreg = tempreg>>1;
end
end
4.for语句:
for语句的形式为:
for(表达式1;表达式2;表达式3)语句;
执行过程:
(1)先求解表达式1。
(2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行第(3)步,若为假(0),则结束循环,转到第5步。
(3)若表达式为真,在执行指定的语句后,求解表达式3。
(4)转回上面的第(2)步继续执行。
(5)执行for语句下面的语句。
for语句形式:
for(循环变量赋初值;循环结束条件;循环变量增值)
执行语句;
for循环语句实际上相当于采用while循环语句建立以下的循环结构:
begin
循环变量赋初值;
while(循环结束条件)
begin
执行语句;
循环变量增值;
end
end
这样对于需要8条语句才能完成的一个循环控制,for循环语句只需要两条即可。
【例1】用for语句初始化memory:
begin : init_mem
reg[7:0] tempi;
for(tempi = 0;tempi<memsize;tempi = tempi + 1)
memory[tempi] = 0;
end
【例2】用for循环语句来实现乘法器:前面已用repeat语句实现,这里用for语句实现:
parameter size = 8,longsize = 16;
reg [size:1] opa,opb;
reg [longsize:1] result;
begin: mult
integer bindex;
result = 0;
for(bindex = 1;bindex <= size;bindex = bindex + 1)
if(opb[bindex])
result = result + (opa<<(bindex - 1 ));
end
在for语句中,循环变量增值表达式可以不必是一般的常规加法或减法表达式。
【例3】对rega八位二进制数中值位1的位进行计数:
begin : countls
reg[7:0] tempteg;
count = 0;
for(tempreg = rega;tempreg;tempreg>>1)
if(tempreg[0])
count = count + 1;
end