我是SystemVerilog的相对新手。
我有一个定义了A类的包。这个类使用虚拟接口,因为 它是测试平台中的驱动程序(BFM)。我正在使用一个包,所以我可以使用相同的BFM 其他设计。
在我的测试平台中,我导入A类并向其传递虚拟接口的实例。 但是,当类中的任务尝试为接口中的信号赋值时,我收到编译错误。
我做错了什么? 如何使用虚拟接口打包BFM?
谢谢, 然
答案 0 :(得分:5)
SystemVerilog包不能包含实际包中的接口。因此,您的界面需要与包源一起编译。您定义的类将驻留在包中,而接口定义位于模块所在的全局范围内。
包中的类可以引用虚拟接口,但除了包源之外,还需要确保编译和可见接口。
答案 1 :(得分:0)
严格按照规范,我不认为这是可能的,因为它增加了一个隐含的外部依赖:
包中的项通常是类型定义,任务和 功能。包中的项目不应具有分层 引用标识符,但在包中创建的标识符除外 通过导入另一个包可见。包裹不得参考 到编译单元范围中定义的项目。
它没有说明设计元素名称空间,这是接口声明所在的位置,但访问接口的任何成员都需要分层引用。
除了预处理器指令和import
之外,您应该认为软件包是完全独立的。
答案 2 :(得分:-1)
通常,在使用之前没有出现的类声明是在systemverilog typedef定义的帮助下解决的。例如“A类使用B类”和“B类使用A类”,则使用typedef来解决僵局。
现在,当你带上上述场景的包时,需要确保A类和B类必须在同一个包中。如果他们不是那么编译将不会通过。
SystemVerilog解析器的原因是需要在包解析结束时使用typedef指定的类的定义。这失败了。
这个问题需要注意“typedef不适用于整个包”。