Verilog中的循环语句有四种类型。这些语句提供了一种控制语句零次、一次或多次执行的方法。
forever
持续执行语句。
repeat
以固定次数执行语句。如果表达式expression的评估结果为未知或高阻抗,则应将其视为零,不执行任何语句。
while
执行一条语句,直到表达式expression的结果变为false。如果表达式一开始为false,则该语句根本不会被执行。
for
通过以下三个步骤控制相关语句的执行:
a) 执行赋值,通常用于初始化一个变量,以控制循环执行的次数。
b) 评估表达式expression。如果结果为false,则退出 for 循环。如果结果不为false,for 循环应执行其相关语句,然后执行步骤 c)。如果表达式求值为未知值或高阻抗值,则应将其视为零。
c) 执行通常用于修改循环控制变量值的赋值,然后重复步骤 b)。
下表1显示了各种循环语句的语法:
下面咱们举例说明循环的用法:
例 1- 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
示例 2- while语句:下面的示例计算 rega 中逻辑为1值的个数:
例3-For 语句:for语句实现的结果与下面基于 while 循环的伪代码相同:
for循环只用两行代码就实现了while这一逻辑:
点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!