Verilog循环语句

2017-06-16  本文已影响0人  暗夜望月

在Verilog HDL中存在着四种类型的循环语句,用来控制执行语句的执行次数。其语法和用途与C语言很类似


forever语句

forever语句的格式如下:

forever begin 
    多条语句 
end 

forever循环语句常用于产生周期性的波形,用来作为仿真测试信号。它与always语句不同处在于不能独立写在程序中,而必须写在initial块中。forever循环的应用示例如下:

initial
forever begin 
    if(d) a = b + c;
    else a = 0;
end 
repeat语句

repeat语句的格式如下:

repeat(表达式)  begin 
    多条语句 
end 

在repeat语句中,其表达式通常为常量表达式。如果循环计数表达式的值不确定,即为x或z时,那么循环次数按0处理。

下面的例子中使用repeat循环语句及加法和移位操作来实现一个乘法器。

while语句

while语句的格式如下:

while(表达式)  begin  
    多条语句 
end 

while循环执行过程赋值语句直到制定的条件为假。如果条件表达式在开始不为真(包括假、x以及z),那么过程语句将永远不会被执行。

下面举一个while语句的例子,该例子用while循环语句对rega这个8位二进制数中值为1的位进行计数。


更完整点的写法:

module mult_8b_while( 
   a, b, q 
    ); 
   
  parameter bsize = 8; 
  input  [bsize-1 : 0] a, b;
  output [2*bsize-1 : 0] q; 
   
  reg [2*bsize-1 : 0] q, a_t; 
  reg [bsize-1 : 0] b_t; 
  reg [bsize-1 : 0] cnt; 
   
  always @(a or b) begin 
     q = 0; 
     a_t = a; 
     b_t = b; 
     cnt = bsize; 
    
     while(cnt > 0) begin 
       if (b_t[0]) begin 
         q = q + a_t;     
       end 
       else begin 
         q = q; 
       end 
       
       cnt = cnt - 1; 
       a_t = a_t << 1; 
       b_t = b_t >> 1;  
    end 
  end 

endmodule
for语句

for语句的一般形式为:

for(表达式1; 表达式2; 表达式3)  语句 

它的执行过程如下:

for语句最简单的应用形式是很易理解的,其形式如下:

for(循环变量赋初值;循环结束条件;循环变量增值) 
    执行语句 

for循环语句实际上相当于采用while循环语句建立以下的循环结构:

begin 
    循环变量赋初值; 
    while(循环结束条件) 
    begin 
        执行语句 
        循环变量增值; 
    end 
end 

这样对于需要8条语句才能完成的一个循环控制,for循环语句只需两条即可。

下面分别举两个使用for循环语句的例子。例1用for语句来初始化memory。例2则用for循环语句来实现前面用repeat语句实现的乘法器。

[例1]:


[例2]:

在for语句中,循环变量增值表达式可以不必是一般的常规加法或减法表达式。下面是对rega这个8位二进制数中值为1的位进行计数的另一种方法。见下例:


其他参考资料:关于Verilog 中的for语句的探讨


Verilog-2001更新了generate循环,使用方法参考:

上一篇下一篇

猜你喜欢

热点阅读