在VHDL中按特定顺序端口映射数组的子元素?

时间:2016-09-08 08:45:38

标签: arrays vhdl wrapper

所以,我正在为一个组件编写一个包装器。该组件有一些像

这样的数组形式的输入
-- Definition in the original component
array_1 : out std_logic_vector (1 downto 0);
array_2 : out std_logic_vector (1 downto 0);

我正在尝试将端口映射中的数组子元素指定为

-- All foo1, foo2, bar1, bar2 are defined as output std_logic in wrapper port list
array_1 (0) =>   foo1,
array_2 (0) =>   bar1,
array_1 (1) =>   foo2,
array_2 (1) =>   bar2,

以上产生的错误如下:正式关联不止一次

但奇怪的是,以下编辑很好。

array_1 (0) =>   foo1,
array_1 (1) =>   foo2,
array_2 (0) =>   bar1,
array_2 (1) =>   bar2,

我错过了什么,我无法找到阵列的子元素必须关联在一起的任何地方,但我找不到它们不是的例子。我知道我可以做后者,但我很好奇。任何帮助,将不胜感激。

顺便说一下,这是我编写的一个简短示例......原始代码有50多个元素,但我已经将问题缩小到了这个范围。感谢您提供任何帮助或建议。

1 个答案:

答案 0 :(得分:3)

A Minimal, Complete, and Verifiable example

if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
   // signed in. Show the "sign out" button and explanation.
   // ...
} else {
   // not signed in. Show the "sign in" button and explanation.
   // ...
}

这给了我们:

  

ghdl -a --std = 08 assoc_elements.vhdl
  assoc_elements.vhdl:30:30:端口“array_1”的非连续个别关联
  ghdl:编译错误

除了提供更好的错误消息的工具之外,还有LRM参考 -

IEEE Std 1076-2008 6.5.7关联清单,6.5.7.1一般性第16段:

  

正式的接口对象应该是显式声明的接口对象或这种接口对象的成员(见5.1)。在前一种情况下,这种形式被认为是完全相关的。在后一种情况下,应使用命名关联将正式和实际联系起来;这种形式的子元素被称为单独关联。此外,显式声明的接口对象的每个标量子元素应与同一关联列表中的实际(或其子元素)恰好相关联一次,并且所有这些关联应出现在该关联列表内的连续序列中。与接口对象的切片或子元素(或其片)相关联的每个关联元素应使用本地静态名称标识形式。

这告诉我们元素关联必须是连续的,在你显示的片段中进行分析,而失败的元素关联是由元素交错的。