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

问题描述 投票:7回答:2

是否存在程序块提供的SV的任何功能,这些功能无法与其他方法重复使用?

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

unit-testing testing verilog system-verilog
2个回答
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(pre IEEE 1800)中,class的实例化通常仅限于program块。这强调了测试和设计的划分。它还使program块对于希望在其流程中使用面向对象编程的验证工程师至关重要。自IEEE 1800以来,几乎可以在任何地方定义和实例化class。结果,program块变得不够充分。

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

最后,它实际上归结为方法偏好。最好自己评估和试用。


1
投票

我不建议使用程序块 - 而是使用模块。几年前我写了一篇关于这个的detailed article

© www.soinside.com 2019 - 2024. All rights reserved.