2016-09-08 8 views
1

Итак, я пишу обертку для компонента. Компонент имеет некоторый вклад в виде массива, какПорт сопоставляет подэлементы массива в определенном порядке в 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 элементов, но я сузил проблему. Спасибо за любую помощь или предложения.

+3

Расширьте этот небольшой пример в MCVE, который может (не скомпилировать) компиляцию ... http://stackoverflow.com/help/mcve –

+0

IEEE Std 1076-1993 4.3.2.2 Списки ассоциаций para 14 «Формальная может быть либо явно объявленный объект интерфейса или член. В последнем случае именованная ассоциация должна использоваться для связывания формального и фактического, подэлементы такого формального говорят, что * связаны друг с другом *.Кроме того, каждый скалярный подэлемент явно объявленного объекта интерфейса должен быть связан ровно один раз с фактическим (или его подэлементом) в том же списке ассоциаций, и ** все такие ассоциации должны появляться в непрерывной последовательности ** внутри этого списка ассоциаций. – user1155120

+0

@ user1155120: Я был смущен и скомпилировал неправильный источник для VHDL-2008. ghdl действительно (правильно, как вы указываете) отклоняет этот код независимо от флага '--std = 08', сообщая« не последовательная индивидуальная ассоциация для порта «array_1». «Тогда я заблудился в LRM, не найдя 4.3.2.2. Спасибо, что нашли! (Удаление предыдущего комментария.) –

ответ

3

Minimal, Complete, and Verifiable example:

library ieee; 
use ieee.std_logic_1164.all; 

entity assoc_elements is 
    port (
     array_1 : out std_logic_vector (1 downto 0); 
     array_2 : out std_logic_vector (1 downto 0) -- ; 
    ); 
end entity; 

architecture nothing of assoc_elements is 
begin 
end architecture; 

library ieee; 
use ieee.std_logic_1164.all; 

entity element_assoc_test is 
end entity; 

architecture test of element_assoc_test is 
    signal foo1, foo2, bar1, bar2: std_logic; 
begin 
ASSOC: 
    entity work.assoc_elements 
     port map (
      -- 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 -- , 
     ); 
end architecture; 

Что дает нам:

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) такого объекта интерфейса. В первом случае такое формальное считается связанным в целом. В последнем случае указанная ассоциация используется для связывания формального и фактического; подэлементы такого формального значения считаются , связанные индивидуально. Кроме того, каждый скалярный подэлемент явно объявленного объекта интерфейса должен быть связан ровно один раз с фактическим (или его подэлементом) в том же списке объединений, и все такие ассоциации должны появляться в непрерывной последовательности внутри этого списка ассоциаций. Каждый элемент ассоциации, который связывает срез или подэлемент (или его срез) объекта интерфейса, должен идентифицировать формальное имя с локально статическим именем.

Которая сообщает, что ассоциация элементов должна быть смежной, что имеет место в фрагменте, который вы показываете, который анализирует, а ассоциация элементов, которая терпит неудачу, чередуется элементом.

 Смежные вопросы

  • Нет связанных вопросов^_^