使用永远和永远的陈述

chi*_*nna 8 verilog

以下代码都生成一个时钟.我需要知道除了时钟生成之外是否还有永久循环的使用?我只是在时钟生成中遇到过.如果只是为了这个目的,那不是没用吗?

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)

And*_*ndy 8

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

forever是一个只能在程序上下文中使用的过程语句.因此,它是合法的写initial foreveralways forever,但不仅仅是forever.

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


too*_*lic 1

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