当前位置:   article > 正文

Verilog中forever、repeat、while、for四类循环语句(含Verilog实例)_verilog forever用法

verilog forever用法

        当搭建FPGA逻辑时,使用循环语句可以使语句更加简洁易懂,Verilog中存在四类循环语句,如标题,几种循环语句的具体介绍和用法如下:

(1)forever:连续的执行语句

        语法格式:forever<statement>

        forever循环语句常用于产生周期性的时钟波形作为仿真测试信号。与always语句的区别在于其不能独立存在于程序中,必须搭配initial语句共同使用,示例如下:

  1. initial
  2. begin
  3. clk = 1'b0; //对时钟赋初值0
  4. forever begin
  5. #6.734 clk = ~clk; //每隔6.734个时间单位对时钟信号进行一次翻转
  6. end
  7. end

(2)repeat:按照固定的次数执行某个语句

        语法格式:repeat (<expression>)<statement>

        repeat循环语句执行指定的循环次数,如果循环计数判断表达式<expression>的值处于不定态(x或z)时,那么循环次数默认为0。

  1. reg [3:0] i_a;
  2. reg [3:0] o_b;
  3. repeat(7) begin //进行7次左移,每次移位1比特
  4. o_b= i_a<<1
  5. end

(3)while: 当给定符合条件时执行该循环,不符合则跳过

        语法格式:while(<expression>)begin.....end

        while循环执行过程赋值语句,直到指定的条件<expression>为假。如果表达式条件由真跳转至假(包括假、x及z),那么过程语句将永远不被执行。

  1. wire judge_single;
  2. while (judge_single) begin //当judge_single拉高时,执行循环
  3. count = count+1
  4. end

(4)for: 通过给次数变量不断赋值,来控制循环步长、初值和终止值

        语法格式:(循环变量赋初值;循环结束条件;循环变量步进值)

  1. integer k;
  2. reg [7:0] data_in;
  3. reg [7:0] data_out;
  4. for(k=0,k<8,k=k+1) //07之间循环计数
  5. always @(posedge clk)begin
  6. if(data_vld)
  7. data_out[k] <= data_in[7-k] //实现字节转换
  8. else
  9. data_out[k] <= 'd0
  10. end

总结:forever语句:多用于在仿真中生成周期性的时钟信号(仿真必用);

           repeat语句:可以指定次数的循环,在指定循环次数方面和for循环语句有一定的相似性,但其局限之处在于不能指定步进长度,应用场景较少(本人不常用);

            while语句:通过判断条件成立与否确定循环次数,个人感觉和if的在判断功能上有些重复。(本人不常用);

           for循环语句:可用于实现位宽转换、生成循环矩阵、或在同一时钟周期下生成多个相同功能模块等情况,在实际工程实现中有较多的应用场景(个人较常用);

说明:以上总结均为个人观点,若有批判性意见,欢迎批评指正。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/101550
推荐阅读
相关标签
  

闽ICP备14008679号