SystemVerilog程序块与传统的测试平台

时间:2013-08-23 15:03:15

标签: unit-testing testing verilog system-verilog

程序块提供的SV是否有任何不能与其他方法重复的功能?

这个问题的不太具体的版本是:我是否应该打扰程序块进行验证?我正在从一个受限于Verilog-95的环境转移到支持SV的环境中,我想知道我是否通过不使用程序块为自己创造额外的工作。

2 个答案:

答案 0 :(得分:10)

查看IEEE Std 1800-2012§3.4& §24。有关program块的完整描述。

简短而不完整的摘要,program块:

  • 无法包含always个程序,primitive个实例,module 实例,允许interface个实例(virtual interface和端口interface)或其他program个实例。
  • 指定Reactive区域中的计划。这可以防止竞争条件。
  • 有一个额外的系统任务$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这个。