2

我是 SystemVerilog 的相对新手。

我有一个包,其中定义了 A 类。此类使用虚拟接口,因为它是测试台中的驱动程序 (BFM)。我正在使用一个包,所以我可以在其他设计中使用相同的 BFM。

在我的测试台中,我导入 A 类并将虚拟接口的实例传递给它。但是,当类中的任务尝试为接口中的信号分配值时,我收到编译错误。

我究竟做错了什么?如何将 BFM 与虚拟接口打包在一起?

谢谢,冉

4

3 回答 3

5

SystemVerilog 包不能在实际包中包含接口。所以你的接口需要和你的包源一起编译。您定义的类将驻留在包中,而接口定义驻留在模块所在的全局范围内。

包中的类可以引用虚拟接口,但除了包源之外,您需要确保接口已编译且可见。

于 2013-02-28T16:24:10.657 回答
0

严格按照规范,我认为这是不可能的,因为它添加了隐式的外部依赖:

包中的项目通常是类型定义、任务和函数。包中的项目不应具有对标识符的分层引用,除非在包中创建或通过导入另一个包使其可见。包不应引用在编译单元范围内定义的项目。

它没有说明设计元素命名空间,这是接口声明所在的位置,但访问接口的任何成员都需要分层引用。

除了预处理器指令和import.

于 2013-02-28T20:23:24.757 回答
-1

通常,在 systemverilog typedef 定义的帮助下解决使用之前不存在的类声明。例如“A 类使用 B 类”和“B 类使用 A 类”然后 typedef 用于解决僵局。

现在,当您使用上述情况引入包裹时,需要确保 A 类和 B 类必须在同一个包裹中。如果它们不是,那么编译将不会通过。

原因是 SystemVerilog 解析器将需要在包解析结束时使用 typedef 指示的类的定义。这失败了。

这个问题需要注意“typedef 不适用于跨包”。

于 2013-10-25T06:13:05.340 回答