程序块提供的SV是否有任何功能不能与其他方法重复使用?SystemVerilog程序块与传统测试台
这个问题不太具体的版本是:我应该打扰程序块进行验证吗?我正从一个受Verilog-95约束的环境转移到支持SV的环境中,并且我想知道如果我不通过使用程序块为自己创建额外的工作。
程序块提供的SV是否有任何功能不能与其他方法重复使用?SystemVerilog程序块与传统测试台
这个问题不太具体的版本是:我应该打扰程序块进行验证吗?我正从一个受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
块完成无功区域中的调度。 A mailbox
,队列([$]
)或关联数组([*]
)可用于智能处理模拟终止运行多个测试。就我个人而言,我仍然喜欢使用program
块,并在需要时使用initial forever
作为always
等效块。如果您打算使用UVM,那么非模块化测试台可能对您更好。
最后,它确实归结为一种方法论偏好。最好是自己评估和尝试。
我不推荐使用程序块 - 而是使用模块。几年前我写了一个detailed article。
谢谢!我玩过程序块,发现在基本程序块工作时,我的模拟器不支持某些功能(编译时错误“SystemVerilog构造尚未实现”)。似乎没有必要试图弄清楚程序块的功能是什么,什么不可以,因为听起来我可以用其他方式获得程序块的所有好处。 – dan