Итак, я пишу обертку для компонента. Компонент имеет некоторый вклад в виде массива, какПорт сопоставляет подэлементы массива в определенном порядке в VHDL?
-- 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,
Am я что-то отсутствует, я нигде не могу найти, что суб элементы массива должны быть связаны друг с другом, но я не могу найти пример, в котором они не являются. Я знаю, что могу просто сделать последнее, но мне любопытно. Любая помощь будет оценена по достоинству.
BTW, это короткий пример, который я составил ... исходный код имеет более 50 элементов, но я сузил проблему. Спасибо за любую помощь или предложения.
Расширьте этот небольшой пример в MCVE, который может (не скомпилировать) компиляцию ... http://stackoverflow.com/help/mcve –
IEEE Std 1076-1993 4.3.2.2 Списки ассоциаций para 14 «Формальная может быть либо явно объявленный объект интерфейса или член. В последнем случае именованная ассоциация должна использоваться для связывания формального и фактического, подэлементы такого формального говорят, что * связаны друг с другом *.Кроме того, каждый скалярный подэлемент явно объявленного объекта интерфейса должен быть связан ровно один раз с фактическим (или его подэлементом) в том же списке ассоциаций, и ** все такие ассоциации должны появляться в непрерывной последовательности ** внутри этого списка ассоциаций. – user1155120
@ user1155120: Я был смущен и скомпилировал неправильный источник для VHDL-2008. ghdl действительно (правильно, как вы указываете) отклоняет этот код независимо от флага '--std = 08', сообщая« не последовательная индивидуальная ассоциация для порта «array_1». «Тогда я заблудился в LRM, не найдя 4.3.2.2. Спасибо, что нашли! (Удаление предыдущего комментария.) –