SV 中的接口动态数组



在SV LRM 2012中,他们说

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 和 Questa 模拟以下代码行时,它可以在没有任何警告/错误的情况下工作:

virtual protocol_if ifs[];

为什么有效?你能给我澄清一下吗?

声明实例数组和声明具有数组维度的变量之间存在差异。

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

您显示的变量声明适用于虚拟接口,这是一种数据类型。

来自 A.2.1.3

data_declaration10 ::= [ 常量 ][ 变量 ][ 终身 ] data_type_or_implicit list_of_variable_decl_assignments ; |...

//从 A.2.2.1 ...

data_type ::= | 虚拟 [ 接口 ] interface_identifier [ parameter_value_assignment ] [ . modport_identifier ]

最新更新