Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> VHDL

Освоение инстанцирования port map в VHDL: практическое руководство

В VHDL модуль — это самодостаточная единица, которая общается с внешним миром через свою сущность (entity). Клаузула port map инстанцирования соединяет формальные порты сущности с сигналами в окружающем дизайне.

Модули, сущности и тестбенчи

Когда мы разрабатываем для ПЛИС или ASIC, логика дизайна живет в модулях, имеющих четко определенные входные и выходные порты. Модуль, не имеющий портов, является тестбенчем — оберткой симуляции, которая подает стимулы на устройство под тестом (DUT), но никогда не появляется на физическом чипе.

В более ранних статьях мы писали весь VHDL в одном файле, что удобно для быстрых экспериментов, но не подходит для производственных дизайнов. Разделение DUT от его тестбенча улучшает читаемость, повторное использование и делает иерархию симуляции ясной.

Общие соглашения об именовании

Многие команды следуют простой схеме: файл дизайна — MyModule.vhd, а его тестбенч — MyModuleTb.vhd. Архитектура DUT часто называется rtl (register-transfer level), а архитектура тестбенча — sim. Это соглашение мгновенно говорит вам, предназначен ли файл для синтеза или для симуляции.

Освоение инстанцирования port map в VHDL: практическое руководство

VHDL синтаксис для инстанцирования port map

Определите интерфейс модуля с ключевым словом entity:

 entity <entity_name> is port( <entity_signal_name> : in|out|inout <signal_type>; ... ); end entity; 

Инстанцируйте модуль в другом VHDL-файле с явным port map:

 <label> : entity <library_name>.<entity_name>(<architecture_name>) port map( <entity_signal_name> => <local_signal_name>, ... ); 

<label> появляется в иерархии симулятора, <library_name> по умолчанию work, и каждый формальный порт должен быть связан с локальным сигналом.

Практический пример: 4-к-1 MUX

Ниже приведен полный тестбенч и пара DUT, реализующий 4-к-1 мультиплексер с использованием беззнаковых 8-битных сигналов.

Код тестбенча

 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T15_PortMapTb is end entity; architecture sim of T15_PortMapTb is signal Sig1 : unsigned(7 downto 0) := x"AA"; signal Sig2 : unsigned(7 downto 0) := x"BB"; signal Sig3 : unsigned(7 downto 0) := x"CC"; signal Sig4 : unsigned(7 downto 0) := x"DD"; signal Sel : unsigned(1 downto 0) := (others => '0'); signal Output : unsigned(7 downto 0); begin -- Instantiate the MUX with architecture rtl i_Mux1 : entity work.T15_Mux(rtl) port map( Sel => Sel, Sig1 => Sig1, Sig2 => Sig2, Sig3 => Sig3, Sig4 => Sig4, Output => Output); -- Stimulus process process is begin wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= "UU"; wait; end process; end architecture; 

Код модуля

 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T15_Mux is port( -- Inputs Sig1 : in unsigned(7 downto 0); Sig2 : in unsigned(7 downto 0); Sig3 : in unsigned(7 downto 0); Sig4 : in unsigned(7 downto 0); Sel : in unsigned(1 downto 0); -- Output Output : out unsigned(7 downto 0) ); end entity; architecture rtl of T15_Mux is begin process(Sel, Sig1, Sig2, Sig3, Sig4) is begin case Sel is when "00" => Output <= Sig1; when "01" => Output <= Sig2; when "10" => Output <= Sig3; when "11" => Output <= Sig4; when others => Output <= (others => 'X'); end case; end process; end architecture; 

Анализ волновой формы

Запуск тестбенча в ModelSim производит волновую форму, соответствующую ожидаемому поведению MUX. Снимок волновой формы ниже подтверждает, что DUT корректно переключается между четырьмя входными сигналами по мере изменения Sel.

Освоение инстанцирования port map в VHDL: практическое руководство

Ключевые выводы

Переходите к следующему уроку для более глубоких знаний о паттернах дизайна VHDL.

VHDL

  1. Как молибден формирует современную промышленность: применение, преимущества и динамика поставок
  2. Создание списков строк в VHDL: лучшие практики и пример
  3. Создание Tcl-управляемого тестбенча для VHDL-модуля кодового замка
  4. Корректное завершение симуляции VHDL-тестбенча
  5. Реализация PWM-контроллера в VHDL: проектирование, симуляция и FPGA-демо
  6. Генерация случайных чисел в VHDL: от Uniform к OSVVM
  7. Использование внутрипроцессных процедур для более чистого проектирования FSM на VHDL
  8. Использование нечистых функций в VHDL: повышение читаемости и поддерживаемости FSM
  9. Освоение функций VHDL: практическое руководство по эффективному дизайну
  10. Освоение техник шлифовального станка для режущих инструментов: практическое руководство