以下代码都生成一个时钟.我需要知道除了时钟生成之外是否还有永久循环的使用?我只是在时钟生成中遇到过.如果只是为了这个目的,那不是没用吗?
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
end
initial begin
clk = 0 ;
always begin
# 5 clk = ~clk;
end
end
Run Code Online (Sandbox Code Playgroud)
您的第二个代码段实际上是语法错误.forever
和之间的区别在于always
它always
可以作为"模块项"存在,这是Verilog规范为可能直接在模块中编写的构造提供的名称,不包含在其他构造中.initial
也是一个模块项目.always
重复块,而initial
在模拟开始时块运行一次.
forever
是一个只能在程序上下文中使用的过程语句.因此,它是合法的写initial forever
或always forever
,但不仅仅是forever
.
forever
变得非常重要的情况是在任务中,这是程序上下文,因此always
不允许使用.(函数也是程序上下文,但可能不包含延迟,这使得它不太可能forever
有用.
是的,forever
循环在设计验证的测试平台中广泛使用,特别是在行业标准方法、UVM 及其前身(例如 VMM)中。它们用于验证组件,例如驱动程序和监视器,这些组件广泛使用 SystemVerilog 类中的任务。