2013-08-23 24 views
6

程序块提供的SV是否有任何功能不能与其他方法重复使用?SystemVerilog程序块与传统测试台

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

回答

9

结帐IEEE Std 1800-2012 § 3.4 & § 24.有关program块的完整说明。

在很短的,不完整的摘要,一个program块:

  • 不能不能包含always程序,primitive实例,module 实例,interface实例(virtual interface和端口interface是允许的),或其他program实例。
  • 指定反应区域中的调度。这可以防止竞争条件。
  • 有一个额外的系统任务$exit,它终止调用它的program实例。
    • 当所有program实例退出时,模拟将终止。
  • 大部分像module块,除非如上所述。

program块的想法是在测试和设计之间创建一个明确的分隔。在早期版本的SystemVerilog(pre IEEE 1800)中,class的实例通常仅限于program块。这强调了测试和设计的分工。它还使program块对于那些想在其流程中使用面向对象编程的验证工程师至关重要。自IEEE 1800以来,几乎可以在任何地方定义和实例化一个class。结果,program块变得不够用了。

今天,program块的有用性的意见是分开的。从我参加的最后几次会议来看,这一趋势似乎赞成放弃program区块。这是因为可以通过其他方法实现优势。可以使用clocking块完成无功区域中的调度。 A mailbox,队列([$])或关联数组([*])可用于智能处理模拟终止运行多个测试。就我个人而言,我仍然喜欢使用program块,并在需要时使用initial forever作为always等效块。如果您打算使用UVM,那么非模块化测试台可能对您更好。

最后,它确实归结为一种方法论偏好。最好是自己评估和尝试。

+0

谢谢!我玩过程序块,发现在基本程序块工作时,我的模拟器不支持某些功能(编译时错误“SystemVerilog构造尚未实现”)。似乎没有必要试图弄清楚程序块的功能是什么,什么不可以,因为听起来我可以用其他方式获得程序块的所有好处。 – dan

1

我不推荐使用程序块 - 而是使用模块。几年前我写了一个detailed article

相关问题