当前位置:   article > 正文

Verilog中repeat的用法_verilog repeat

verilog repeat

        repeat 循环语句执行指定循环数,如果循环计数表达式的值不确定,即为 x 或z 时,那么循环次数按 0 处理。repeat 循环语句的语法为:

repeat(循环次数表达式)
        begin
            语句块;
        end
        其中, “循环次数表达式”用于指定循环次数,可以是一个整数、变量或者数值表达式。如果是变量或者数值表达式,其数值只在第一次循环时得到计算,从而得以事先确定循环次数; “语句块”为重复执行的循环体。
        在可综合设计中, “循环次数表达式”必须在程序编译过程中保持不变。

  1. Example1:
  2. repeat (3) @(posedge clk)
  3. adder1<=adder1+1;

Example1中,每当到来一个时钟上升沿时,都会执行一次adder1<=adder1+1;

  1. Example2:
  2. repeat (3) @(posedge clk);
  3. adder1<=adder1+1;

Example2中,repeat (3) @(posedge clk);语句后有一个分号,也就是空语句,什么都不执行,当遇到3次时钟上升沿后,才会执行adder1<=adder1+1语句。

repeat用法示例1:语句块包含task语句

repeat(循环次数表达式)
        begin
            语句块;
        end
语句块可以包含task、function、for等语句,如下所示,是包含task的示例,将task任务执行10次:

  1. `timescale 1ns / 1ps
  2. module tb;
  3. reg clk,rst,in;
  4. wire out;
  5. initial
  6. begin
  7. clk=0;
  8. rst=0;
  9. in =0;
  10. #100 rst=1;
  11. repeat (10)
  12. begin
  13. sim();
  14. end
  15. end
  16. always #5 clk=~clk;
  17. task sim;
  18. begin
  19. repeat(10) @(posedge clk);
  20. in=0;
  21. repeat(10) @(posedge clk);
  22. in=1;
  23. repeat(10) @(posedge clk);
  24. in=0;
  25. repeat(10) @(posedge clk);
  26. in=1;
  27. repeat(10) @(posedge clk);
  28. in=0;
  29. repeat(10) @(posedge clk);
  30. in=1;
  31. end
  32. endtask
  33. Top inst(.clk(clk),.rst(rst),.in(in),.out(out)
  34. );
  35. endmodule

repeat用法示例2:语句块包含for语句

  1. `timescale 1ns / 1ps
  2. module tb;
  3. reg clk,rst,in;
  4. wire out;
  5. integer i;
  6. initial
  7. begin
  8. clk=0;
  9. rst=0;
  10. in =0;
  11. #100 rst=1;
  12. repeat (10)
  13. begin
  14. //sim();
  15. for (i=0;i<100;i=i+1)
  16. begin
  17. @(posedge clk)
  18. in<=~in;
  19. $display("the simulation time is %d\n",$time);
  20. end
  21. end
  22. end
  23. always #5 clk=~clk;
  24. task sim;
  25. begin
  26. repeat(10) @(posedge clk);
  27. in=0;
  28. repeat(10) @(posedge clk);
  29. in=1;
  30. repeat(10) @(posedge clk);
  31. in=0;
  32. repeat(10) @(posedge clk);
  33. in=1;
  34. repeat(10) @(posedge clk);
  35. in=0;
  36. repeat(10) @(posedge clk);
  37. in=1;
  38. end
  39. endtask
  40. Top inst(.clk(clk),.rst(rst),.in(in),.out(out)
  41. );
  42. endmodule

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

闽ICP备14008679号