一 前言
并非总是可以将被测单元(DUT)视为一个黑盒,即仅监控和驱动DUT的顶层端口信号。这一点在从模块级测试转向更大规模的系统级测试时尤为明显。有时,我们需要了解实现细节以便访问DUT内部的信号。这被称为白盒验证。
Verilog一直提供从其他作用域访问几乎任何层次结构内部的能力。虽然这是一个非常方便的功能,但它也有几个缺点:
- 它降低了代码的可重用性,因为测试平台中的引用依赖于DUT(被测单元)的结构。
- 为了访问内部信号,需要对DUT进行全部或部分重新编译。
- 它导致DUT的优化效果不佳,因为可能需要保留内部信号以提供访问。
尽管可能无法完全避免所有层次引用,但作为一项通用规则,最好将它们保持在测试平台的顶层,或者尽可能地将它们隔离到少数几个模块中。
二 bind 新结构
SystemVerilog 提供了一种绑定(bind)构造,它允许你在不修改目标模块或接口源代码的情况下,将一个模块或接口实例化到另一个目标模块或接口中。实例的端口通常与目标模块的内部信号相连接。如果你绑定的是一个接口,那么你可以使用虚拟接口或抽象类机制来引用该接口。