SystemVerilog:使用包含类和虚拟接口的包

时间:2013-02-28 15:37:32

标签: system-verilog

我是SystemVerilog的相对新手。

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

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

我做错了什么? 如何使用虚拟接口打包BFM?

谢谢, 然

3 个答案:

答案 0 :(得分:5)

SystemVerilog包不能包含实际包中的接口。因此,您的界面需要与包源一起编译。您定义的类将驻留在包中,而接口定义位于模块所在的全局范围内。

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

答案 1 :(得分:0)

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

  

包中的项通常是类型定义,任务和   功能。包中的项目不应具有分层   引用标识符,但在包中创建的标识符除外   通过导入另一个包可见。包裹不得参考   到编译单元范围中定义的项目。

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

除了预处理器指令和import之外,您应该认为软件包是完全独立的。

答案 2 :(得分:-1)

通常,在使用之前没有出现的类声明是在systemverilog typedef定义的帮助下解决的。例如“A类使用B类”和“B类使用A类”,则使用typedef来解决僵局。

现在,当你带上上述场景的包时,需要确保A类和B类必须在同一个包中。如果他们不是那么编译将不会通过。

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

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