在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[];
为什么会这样?你能澄清一下吗?
答案 0 :(得分:1)
声明实例数组和声明具有数组维度的变量之间存在差异。
您展示的BNF语法适用于interface_instantiation
,其module_instantiation
的规则类似。这只是generate-for循环的一个快捷方式,它创建了多个实例名称类似于数组索引的实例。它不是一个真正的数组,其中每个元素都是相同的副本。诸如defparam
,bind
等构造可以更改每个实例的特征,这就是不允许您使用变量来程序性地选择特定实例的原因。
您显示的变量声明适用于虚拟接口,这是一种数据类型。
//来自A.2.1.3
data_declaration10 :: = [const] [var] [life] data_type_or_implicit list_of_variable_decl_assignments; | ...
//来自A.2.2.1 ...
data_type :: = |虚拟[界面] interface_identifier [parameter_value_assignment] [。 modport_identifier]