SV中的动态接口数组

时间:2016-11-28 07:51:36

标签: system-verilog

在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[];

为什么会这样?你能澄清一下吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

//来自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]