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