Верхний уровень с использованием карт портов с записями в VHDL

Чтобы иметь возможность поддерживать масштабируемость в моем проекте VHDL, я начал использовать записи в качестве входных и выходных для своих компонентов. В настоящее время я нахожусь в точке, где я хочу связать свой компонент с внешним миром, используя карты портов в архитектуре верхнего уровня. Проблема в том, что записи содержат несколько переменных, которые должны быть связаны с разными источниками.

В настоящее время мои записи, используемые в коде VHDL, выглядят следующим образом (имена заменены на фейки):

TYPE some_record_input IS RECORD
    input_one   :   sfixed(3 downto -32);
    input_two   :   sfixed(3 downto -32);
    input_rst   :   std_logic;
END RECORD;

TYPE some_record_output IS RECORD
    output_one  :   std_logic_vector(15 downto 0);
    output_dn   :   std_logic;
END RECORD;

Следовательно, я использую библиотеку fixed_pkg для фиксированных точек.
Эти записи используются в карте портов объекта следующим образом.

ENTITY my_component IS
port
(
    clk     :   IN  std_logic;
    data    :   IN  some_record_input;
    result  :   OUT some_record_output
);
END my_component;

Теперь о той части, где возникают проблемы. Я использую этот компонент на моем верхнем уровне, чтобы связать его с кнопками и светодиодами, доступными для моей платы Altera. В настоящее время это делается с помощью карты портов в теле моей сущности верхнего уровня:

A0 : my_component PORT MAP(clk => CLK, data => (input_one => IONE, input_two => ITWO, input_rst => RST), result => (output_one => OONE, output_dn => ODN));

Следовательно, сигналы капитала исходящие. Ясно, что это не лучший вариант, поскольку modelsim не компилирует это. Мне было интересно, может ли кто-нибудь сказать мне, как выполняется сопоставление портов записи для объекта верхнего уровня в VHDL. Заранее спасибо.


person Robin Hermans    schedule 16.12.2014    source источник
comment
Объявите сигналы ваших типов записей и сопоставьте их непосредственно с портами.   -  person user_1818839    schedule 17.12.2014
comment
Я не уверен, в чем ваш вопрос. Вы имеете в виду, как назначать контакты для записей верхнего уровня / Как записи в карте портов верхнего уровня сопоставляются с именами контактов UCF?   -  person Paebbels    schedule 17.12.2014


Ответы (1)


Вместо агрегирования используйте индивидуальную ассоциацию элементов записи:

A0 : my_component
PORT MAP(
  clk => CLK, 
  data.input_one => IONE, 
  data.input_two => ITWO, 
  data.input_rst => RST, 
  result.output_one => OONE, 
  result.output_dn => ODN
);

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

person Jim Lewis    schedule 16.12.2014