Verilog 中提供了四种循环语句,可用于控制语句的执行次数,分别为:for,while,repeat,forever。其中,for,while,repeat是可综合的,但循环的次数需要在编译之前就确定,动态改变循环次数的语句是不可综合的。forever语句是不可综合的,主要用于产生各种仿真激励。
一、repeat语句
repeat语句执行指定循环数,如果循环计数表达式的指不确定,即为x或z时,那么循环次数按0次处理。
repeat语句的语法是为:
repeat(循环次数表达式) begin
语句快;
end
其中,循环次数表达式用于指定循环次数,可以是一个整数、变量或者数值表达式。如果是变量或者数值表达式,其数值只在第一次循环时得到计算,从而可以事先确定循环次数,语句快为重复执行的循环体。
二、while语句
while语句实现的是一种条件循环,只有在指定的循环条件为真时才会重复执行循环体,如果表达式在开始时不为真(假、x或z),那么过程语句将永远不会被执行。
while循环的语法是:
while(循环执行条件表达式) begin
语句块;
end
在上述格式中,循环执行条件表达式代表了循环体得以继续重复执行时必须满足的条件,通常是一个逻辑表达式。在每一次执行循环体之前,都需要对这个表达式是否成立进行判断。
while语句在执行时,首先判断循环执行条件表达式是否为真,如果真,执行后面的语句块,然后再重复判断循环执行条件表达式是否为真,如此不断,知道循环执行条件表达式不为真。因此,在执行语句中,必须有改变循环执行条件表达式的值的语句,否则循环将变成死循环。
三、for循环
和while循环语句一样,for循环语句实现的循环也是一种条件循环,按照指定的循环次数重复执行过程赋值语句,其语法格式如下:
for(表达式1;表达式2;表达式3)
语句块;
for循环最简单的应用形式是很容易理解的,其形式为:
for(循环变量赋初值;循环执行条件;循环变量增值)
语句块;
for循环的执行过程可以分为以下几步:
1、执行循环变量赋初值语句
2、执行循环执行条件语句,判断循环变量的值是否满足循环执行条件。若结果为真,执行循环体语句,然后继 续执行下面的第三步,否则结束循环。
3、执行循环变量增值语句,并跳转到第二步。
注意:以上三种循环对应的逻辑本质是一样的,三者之间是可以相互转化的。
四、循环语句的深入理解
Verilog HDL是一种硬件描述语言,如果期望在代码中实现,则需要 EDA 工具将其翻译成基本的门逻辑,而在硬件 电路 中并没有循环电路的原型,因此在使用循环语句时要十分小心,必须时刻注意其可综合性。
指导原则:虽然基于循环语句的Verilog HDL设计显得相对精简,阅读起来比较容易;但面向硬件的设计和软件设计的关注点是不一样的,硬件设计并不追求代码的短小,而是设计的时序、面积和性能等特征。在设计中应该使用计数器来代替for循环。