所以,我正在为一个组件编写一个包装器。该组件有一些像
这样的数组形式的输入-- 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多个元素,但我已经将问题缩小到了这个范围。感谢您提供任何帮助或建议。答案 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)。在前一种情况下,这种形式被认为是完全相关的。在后一种情况下,应使用命名关联将正式和实际联系起来;这种形式的子元素被称为单独关联。此外,显式声明的接口对象的每个标量子元素应与同一关联列表中的实际(或其子元素)恰好相关联一次,并且所有这些关联应出现在该关联列表内的连续序列中。与接口对象的切片或子元素(或其片)相关联的每个关联元素应使用本地静态名称标识形式。
这告诉我们元素关联必须是连续的,在你显示的片段中进行分析,而失败的元素关联是由元素交错的。