当搭建FPGA逻辑时,使用循环语句可以使语句更加简洁易懂,Verilog中存在四类循环语句,如标题,几种循环语句的具体介绍和用法如下:
(1)forever:连续的执行语句
语法格式:forever<statement>
forever循环语句常用于产生周期性的时钟波形作为仿真测试信号。与always语句的区别在于其不能独立存在于程序中,必须搭配initial语句共同使用,示例如下:
initial
begin
clk = 1'b0; //对时钟赋初值0
forever begin
#6.734 clk = ~clk; //每隔6.734个时间单位对时钟信号进行一次翻转
end
end
(2)repeat:按照固定的次数执行某个语句
语法格式:repeat (<expression>)<statement>
repeat循环语句执行指定的循环次数,如果循环计数判断表达式<expression>的值处于不定态(x或z)时,那么循环次数默认为0。
reg [3:0] i_a;
reg [3:0] o_b;
repeat(7) begin //进行7次左移,每次移位1比特
o_b= i_a<<1;
end
(3)while: 当给定符合条件时执行该循环,不符合则跳过
语法格式:while(<expression>)begin.....end
while循环执行过程赋值语句,直到指定的条件<expression>为假。如果表达式条件由真跳转至假(包括假、x及z),那么过程语句将永远不被执行。
wire judge_single;
while (judge_single) begin //当judge_single拉高时,执行循环
count = count+1;
end
(4)for: 通过给次数变量不断赋值,来控制循环步长、初值和终止值。
语法格式:(循环变量赋初值;循环结束条件;循环变量步进值)
integer k;
reg [7:0] data_in;
reg [7:0] data_out;
for(k=0,k<8,k=k+1) //从0到7之间循环计数
always @(posedge clk)begin
if(data_vld)
data_out[k] <= data_in[7-k] //实现字节转换
else
data_out[k] <= 'd0
end
总结:forever语句:多用于在仿真中生成周期性的时钟信号(仿真必用);
repeat语句:可以指定次数的循环,在指定循环次数方面和for循环语句有一定的相似性,但其局限之处在于不能指定步进长度,应用场景较少(本人不常用);
while语句:通过判断条件成立与否确定循环次数,个人感觉和if的在判断功能上有些重复。(本人不常用);
for循环语句:可用于实现位宽转换、生成循环矩阵、或在同一时钟周期下生成多个相同功能模块等情况,在实际工程实现中有较多的应用场景(个人较常用);文章来源:https://www.toymoban.com/news/detail-543156.html
说明:以上总结均为个人观点,若有批判性意见,欢迎批评指正。文章来源地址https://www.toymoban.com/news/detail-543156.html
到了这里,关于Verilog中forever、repeat、while、for四类循环语句(含Verilog实例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!