繁体   English   中英

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

[英]SystemVerilog program block vs. traditional testbench

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

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

查看IEEE Std1800-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块来完成反应区域中的调度。 mailbox ,队列( [$] )或关联数组( [*] )可用于智能处理运行多个测试的模拟终止。 就个人而言,我仍然喜欢使用program块,并在需要时initial forever使用initial forever作为always等价的。 如果您打算使用UVM,那么非program块测试平台可能会更适合您。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM