程序块
Gre*_*reg 10
查看IEEE Std1800-2012§3.4和§24program
.有关块的完整描述.
在一个简短的,不完整的摘要中,一个program
块:
- 不能包含
always
过程,primitive
实例,module
实例,interface
实例(virtual interface
和interface
允许端口)或其他program
实例. - 指定Reactive区域中的计划.这可以防止竞争条件.
- 有一个额外的系统任务
$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
测试平台可能会更适合您.
最后,它实际上归结为方法偏好.最好自己评估和试用.