[英]SystemVerilog program block vs. traditional testbench
是否存在程序块提供的SV的任何功能,这些功能无法与其他方法重复使用?
这个问题不太具体的版本是:我是否应该打扰程序块进行验证? 我正在从一个受限于Verilog-95的环境转移到支持SV的环境中,我想知道我是否通过不使用程序块为自己创造额外的工作。
查看IEEE Std1800-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
块来完成反应区域中的调度。 mailbox
,队列( [$]
)或关联数组( [*]
)可用于智能处理运行多个测试的模拟终止。 就个人而言,我仍然喜欢使用program
块,并在需要时initial forever
使用initial forever
作为always
等价的。 如果您打算使用UVM,那么非program
块测试平台可能会更适合您。
最后,它实际上归结为方法偏好。 最好自己评估和试用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.