7

程序块是否提供了其他方法无法复制的 SV 功能?

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

4

2 回答 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 的早期版本(IEEE 1800 之前)中,a 的实例化class通常仅限于program块。这强调了测试和设计的划分。它还使program模块对于想要在流程中使用面向对象编程的验证工程师至关重要。自 IEEE 1800 以来,aclass几乎可以在任何地方定义和实例化。结果,program区块变得不那么充足了。

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

最后,它真的归结为方法偏好。最好自己评估和尝试。

于 2013-08-23T18:42:59.423 回答
1

我不建议使用程序块 - 改用模块。几年前 我写了一篇关于这个的详细文章。

于 2013-09-06T20:12:31.807 回答