unit-testing - SystemVerilog 程序 block 与传统测试平台

标签 unit-testing testing verilog system-verilog

程序 block 提供的 SV 是否有任何其他方法无法复制的功能?

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

最佳答案

查看 IEEE Std 1800-2012 § 3.4 & § 24。有关程序 block 的完整描述。

在一个简短的、不完整的总结中,一个程序 block :

  • 不能包含always 过程、primitive 实例、模块 instances, interface instances (virtual interface and port interface is allowed), 或者其他program实例。
  • 指定 react 区域中的调度。这可以防止竞争条件。
  • 有一个额外的系统任务$exit,它会终止调用它的程序实例。
    • 当所有程序实例退出时,模拟将终止。
  • 除上述情况外,大部分类似于 module block 。

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

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

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

关于unit-testing - SystemVerilog 程序 block 与传统测试平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18406092/

相关文章:

verilog - 在verilog中使用显示

python - 使用 Python 在不同实例中分割 verilog 路径的正则表达式模式

ios - 如何对涉及 CLBeacon 的逻辑进行单元测试?

javascript - 如何使用 jasmine 对 jquery ajax 调用进行单元测试?

linux - GNU/Linux 的 HTTP 请求生成器?

testing - Haskell:测试网络 API

ios - 良好的 OCUnit/XCode 单元测试测试运行器

android - 单元测试应该涵盖常量变化吗?

java - 为什么 Drools 在使用议程过滤器触发特定规则时验证所有其他规则?

Verilog 数组语法