前言
Verilog中的循环各式各样,例如,for循环,while循环,forever循环和repeat循环,有的可以综合有的不可用综合,就凭这一条特点,就能在逻辑设计中排除很多种循环语句,对于设计来说,只能用可以综合的循环语句,例如for循环语句。那么既然只有for等循环可以综合,那么其他循环语句存在的意义在哪里呢?
当然是仿真啦,仿真可没有要求Verilog可综合,只要是Verilog中的语法,都可以使用。但一般而言,我们也使用不了那么多,因为很多循环作用都是一样的,我们可根据自己的喜欢来使用。例如对于时钟生成来说,有人习惯于:
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
end
有人习惯于:
initial begin
clk = 0;
end
always begin
#5 clk = ~clk;
end
当然,你用for循环也没人说你不对。
下面,我们讨论在verilog中如何使用每个循环。然后,我们为这些结构中的每一个考虑一个简短的示例,以说明我们如何在实践中使用它们。
Verilog中的循环
我们在verilog中使用循环来多次执行相同的代码。
Verilog中最常用的循环是for循环。我们使用此循环执行代码块固定次数。
我们还可以在verilog中使用repeat关键字,该关键字执行与for循环相似的功能。但是,在Verilog设计中,我们通常更喜欢使用for循环而不是repeat关键字。
我们在Verilog中通常使用的另一种循环是while循环。只要给定条件为真,我们就使用此循环执行部分代码。
让我们仔细看一下每种循环类型。
Verilog forever循环
我们在verilog中使用forever循环创建代码块,该代码块将连续执行,就像其他编程语言中的无限循环一样。
这与Verilog中其他类型的循环(例如for循环和while循环)相反,后者仅运行固定次数。
正如我们在之前关于verilog测试平台的帖子中看到的那样,forever循环最常见的用例之一是在verilog测试平台中生成时钟信号。
forever循环无法综合,这意味着我们只能在测试基准代码中使用它。
下面的代码片段显示了verilog forever循环的常规语法。
forever begin