的SV

2016-11-28 63 views
1

接口在SV LRM动态阵列2012他们说的SV

interface_instantiation ::= interface_identifier [ parameter_value_assignment ] hierarchical_instance { , hierarchical_instance } ;

当搜索hierarchical_instance的含义,你可以找到

hierarchical_instance ::= name_of_instance ([ list_of_port_connections ]) name_of_instance ::= instance_identifier { unpacked_dimension }

最后,可以发现,

unpacked_dimension ::= [ constant_range ] | [ constant_expression ]

我想阅读它,以便您不能拥有动态数组你的SV代码中的接口,对吧?但是,模拟都与VCS和奎斯塔下面的代码行的时候,它的工作没有任何警告/错误:

virtual protocol_if ifs[]; 

为什么它的工作原理?你能向我澄清一下吗?

+0

这是因为使用的是** **虚拟接口,它是**实际接口**的指针/句柄。如果使用实际的接口实例,它可能不起作用。使用实际接口时,可能会出现此错误:'在模块实例数组中使用可变大小的维度。请在模块实例数组中使用固定尺寸。 – sharvil111

+0

我可以做同样的解释。无论如何,我想在LRM中找到确切的解释。可能我找不到它,但是我需要在各行之间阅读。 – user7218867

回答

1

声明一个实例数组和声明一个具有数组维数的变量是有区别的。

您显示的BNF语法为interface_instantiation,它具有与module_instantiation类似的规则。这只是一个generate-for循环的快捷方式,它创建了多个实例名称类似于数组索引的实例。这不是真正的数组,其中每个元素是相同的副本。诸如defparambind等构造可以改变每个实例的特性,这就是为什么您不允许使用变量来程序性地选择特定实例的原因。

您显示的变量声明是针对虚拟接口的,它是一种数据类型。

//从A.2.1.3

data_declaration10 ::= [ const ] [ var ] [ lifetime ] data_type_or_implicit list_of_variable_decl_assignments ; | ...

//从A.2.2.1 ...

data_type ::= | virtual [ interface ] interface_identifier [ parameter_value_assignment ] [ . modport_identifier ]

+0

谢谢!那一个我正在寻找。 – user7218867

相关问题