是否存在程序块提供的SV的任何功能,这些功能无法与其他方法重复使用?
这个问题不太具体的版本是:我是否应该打扰程序块进行验证?我正在从一个受限于Verilog-95的环境转移到支持SV的环境中,我想知道我是否通过不使用程序块为自己创造额外的工作。
查看IEEE Std 1800-2012§3.4和§24。有关program
块的完整描述。
在一个简短的,不完整的摘要中,program
块:
always
程序,primitive
实例,module
实例,interface
实例(允许virtual interface
和端口interface
),或其他program
实例。$exit
,它终止调用它的program
实例。
当所有program
实例退出时,模拟将终止。module
区块。program
块的想法是在测试和设计之间创建一个明确的分离。在早期版本的SystemVerilog(pre IEEE 1800)中,class
的实例化通常仅限于program
块。这强调了测试和设计的划分。它还使program
块对于希望在其流程中使用面向对象编程的验证工程师至关重要。自IEEE 1800以来,几乎可以在任何地方定义和实例化class
。结果,program
块变得不够充分。
今天,对program
区块的有用性的看法是分开的。从我去过的最后几个惯例来看,这种趋势似乎有利于放弃program
区块。这是因为其他方法可以实现这些优点。可以使用clocking
块来完成Reactive区域中的调度。 mailbox
,队列([$]
)或关联数组([*]
)可用于智能处理模拟终止运行多个测试。就个人而言,我仍然喜欢使用program
块,并在需要时使用initial forever
作为always
等效物。如果您打算使用UVM,那么非program
阻挡测试台可能对您更有效。
最后,它实际上归结为方法偏好。最好自己评估和试用。
我不建议使用程序块 - 而是使用模块。几年前我写了一篇关于这个的detailed article。