首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >forever和always语句的使用

forever和always语句的使用
EN

Stack Overflow用户
提问于 2013-04-11 07:15:45
回答 3查看 35.3K关注 0票数 8

以下两个代码都会生成一个时钟。我想知道除了时钟生成之外,是否还有其他永久循环的用途?我只在时钟生成中永远遇到过。如果它只是为了这个目的,它不是无用的吗?

代码语言:javascript
复制
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
end

initial begin
clk = 0 ;
always begin 
# 5 clk = ~clk;
end
end
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-11 07:32:42

是的,forever循环在用于设计验证的试验台中被广泛使用,特别是在工业标准方法论、UVM及其前身(例如VMM)中。它们用于验证组件中,例如驱动程序和监视器,这些组件在SystemVerilog类中广泛使用任务。

票数 1
EN

Stack Overflow用户

发布于 2013-04-11 08:40:04

您的第二个代码片段实际上是一个语法错误。foreveralways之间的不同之处在于,always可以作为“模块项”存在,这是Verilog规范为可以直接在模块中编写的构造提供的名称,而不是包含在其他构造中。initial也是一个模块项目。always块是重复的,而initial块在模拟开始时运行一次。

forever是只能在过程上下文中使用的过程语句。因此,编写initial foreveralways forever是合法的,而不仅仅是forever

forever变得非常重要的情况是在任务中,这是过程上下文,因此不允许使用always。(函数也是过程上下文,但可能不包含延迟,这使得forever不太可能有用。

票数 8
EN

Stack Overflow用户

发布于 2014-06-19 13:58:35

//我将显示不同之处;//我们不能在初始块内使用永久块,但可以在初始块内使用永久块//有错误的代码:

代码语言:javascript
复制
module stimulus(output reg a,b); 

 initial
 begin
  a = 1'b1;
  b = 1'b0;

  always
  begin
   #5 a = ~a;           //error when compiling
    #6 b = ~a;
  end

end

 initial
    #25 $stop;

endmodule




  // code with no error
module stimulus(output reg a,b); 

 initial
 begin
  a = 1'b1;
  b = 1'b0;

  always
  begin
   #5 a = ~a;    //no error when compiling
    #6 b = ~a;
  end

end

 initial
    #25 $stop;

endmodule
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15938158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档