以下两个代码都会生成一个时钟。我想知道除了时钟生成之外,是否还有其他永久循环的用途?我只在时钟生成中永远遇到过。如果它只是为了这个目的,它不是无用的吗?
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
end
initial begin
clk = 0 ;
always begin
# 5 clk = ~clk;
end
end发布于 2013-04-11 07:32:42
是的,forever循环在用于设计验证的试验台中被广泛使用,特别是在工业标准方法论、UVM及其前身(例如VMM)中。它们用于验证组件中,例如驱动程序和监视器,这些组件在SystemVerilog类中广泛使用任务。
发布于 2013-04-11 08:40:04
您的第二个代码片段实际上是一个语法错误。forever和always之间的不同之处在于,always可以作为“模块项”存在,这是Verilog规范为可以直接在模块中编写的构造提供的名称,而不是包含在其他构造中。initial也是一个模块项目。always块是重复的,而initial块在模拟开始时运行一次。
forever是只能在过程上下文中使用的过程语句。因此,编写initial forever或always forever是合法的,而不仅仅是forever。
forever变得非常重要的情况是在任务中,这是过程上下文,因此不允许使用always。(函数也是过程上下文,但可能不包含延迟,这使得forever不太可能有用。
发布于 2014-06-19 13:58:35
//我将显示不同之处;//我们不能在初始块内使用永久块,但可以在初始块内使用永久块//有错误的代码:
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;
endmodulehttps://stackoverflow.com/questions/15938158
复制相似问题