当前位置:   article > 正文

对systemverilog/verilog中forever语法的理解

对systemverilog/verilog中forever语法的理解

  1、forever后面有无分号的区别

考虑下面两段代码:

        其中只有一处不同,下面的代码片段中,forever @(posedge clk)后面没有分号,当每个clk时钟上升沿到来时,begin ... end语句都会执行。

  1. initial
  2. begin
  3. forever @(posedge clk)
  4. begin
  5. wait(a==1 && b==1 && c==1);
  6. $display("a==1 && b==1 && c==1");
  7. end
  8. end

        考虑下面这段代码,forever @(posedge clk);后面有分号,那么forever @(posedge clk);后面是空语句,begin ... end语句将永远不会执行。

  1. initial
  2. begin
  3. forever @(posedge clk);
  4. begin
  5. wait(a==1 && b==1 && c==1);
  6. $display("a==1 && b==1 && c==1");
  7. end
  8. end

2、forever后面有无begin ... end 语句

        考虑下面的代码,forever @(posedge clk)后面没有分号,addr<=addr+1;没有在begin ... end中,那么每当clk上升沿到来时,只会执行addr<=addr+1;begin ... end 语句将永远不会执行。

  1. logic [9:0] addr=0;
  2. initial
  3. begin
  4. forever @(posedge clk)
  5. addr<=addr+1;
  6. begin
  7. wait(a==1 && b==1 && c==1);
  8. $display("a==1 && b==1 && c==1");
  9. end
  10. end

        考虑下面的代码,forever @(posedge clk)后面没有分号,每一个时钟上升沿到来时,forever后面的begin ... end语句都会执行。

  1. logic [9:0] addr=0;
  2. initial
  3. begin
  4. forever @(posedge clk)
  5. begin
  6. addr<=addr+1;
  7. wait(a==1 && b==1 && c==1);
  8. $display("a==1 && b==1 && c==1");
  9. end
  10. end

   综上所述,如果希望forever后面的语句执行,第一:forever语句后面不要加分号;第二:forever语句后面执行的语句,用begin ... end语句包含进来。     

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

闽ICP备14008679号