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