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

Создание тактированного процесса в VHDL: практическое руководство

Большинство VHDL-дизайнов используют тактированную логику — обычно называемую синхронной или последовательной логикой. Тактированный процесс активируется исключительно по фронту мастер-тактового сигнала, независимо от изменений в других входных сигналах.

Фундаментальным элементом тактированной логики является триггер (flip-flop). В этом уроке мы фокусируемся на триггере с положительным фронтом и отрицательным сбросом. См. схему ниже:

Создание тактированного процесса в VHDL: практическое руководство

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

Примечание: Эта статья является частью серии Базовые уроки VHDL.

Все тактированные процессы срабатывают в унисон и одновременно забирают свои входы. Тактовый сигнал устанавливает дискретные временные шаги, позволяя дизайнерам разделять сложную логику на четкие цикл-за-циклом события.

Триггеры, или массивы из них, также называются регистрами.

Список чувствительности тактированного процесса обычно содержит только тактовый сигнал, потому что процесс пробуждается исключительно по фронту тактового сигнала. Дополнительные входы игнорируются для целей триггера.

Ниже приведен повторно используемый шаблон для тактированного процесса с синхронным сбросом:

process(Clk) is begin if rising_edge(Clk) then if nRst = '0' then <reset all output signals here> else <main logic here> end if; end if; end process; 

Упражнение

В сопровождающем видео-уроке мы проходим через создание тактированного процесса в VHDL.

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

Итоговый тестбенч для триггера:

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T17_ClockedProcessTb is end entity; architecture sim of T17_ClockedProcessTb is constant ClockFrequency : integer := 100e6; -- 100 MHz constant ClockPeriod : time := 1000 ms / ClockFrequency; signal Clk : std_logic := '1'; signal nRst : std_logic := '0'; signal Input : std_logic := '0'; signal Output : std_logic; begin -- The Device Under Test (DUT) i_FlipFlop : entity work.T17_FlipFlop(rtl) port map( Clk => Clk, nRst => nRst, Input => Input, Output => Output); -- Clock generation Clk <= not Clk after ClockPeriod / 2; -- Testbench sequence process is begin -- Release the DUT from reset nRst <= '1'; wait for 20 ns; Input <= '1'; wait for 22 ns; Input <= '0'; wait for 6 ns; Input <= '1'; wait for 20 ns; -- Apply reset nRst <= '0'; wait; end process; end architecture; 

Модуль триггера

Реализация триггера с положительным фронтом и отрицательным сбросом:

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T17_FlipFlop is port( Clk : in std_logic; nRst : in std_logic; -- Negative reset Input : in std_logic; Output : out std_logic); end entity; architecture rtl of T17_FlipFlop is begin -- Flip‑flop with synchronized reset process(Clk) is begin if rising_edge(Clk) then if nRst = '0' then Output <= '0'; else Output <= Input; end if; end if; end process; end architecture; 

Наблюдение волновой формы

После запуска симуляции в ModelSim и увеличения временной шкалы, волновая форма четко показывает выход, обновляющийся только по фронтам нарастающего тактового сигнала:

Создание тактированного процесса в VHDL: практическое руководство

Анализ

Выход меняется исключительно по фронтам нарастающего тактового сигнала. Любой переход входа, происходящий между двумя фронтами нарастающего сигнала — такой как отрицательный провал, начинающийся примерно в 45 нс — не захватывается, потому что триггер забирает только по фронту.

Ниже приведена анимация, визуализирующая соотношение между входом, тактовым сигналом и выходом:

Создание тактированного процесса в VHDL: практическое руководство

Ключевые наблюдения:

На практике триггеру требуется стабильный вход в течение короткого периода до и после фронта тактового сигнала — известного как время установки (setup) и время удержания (hold). Эти ограничения автоматически обрабатываются инструментами синтеза при преобразовании VHDL в нетлист.

Для более глубокого погружения в шаги симуляционного времени см. Дельта-циклы объяснены.

Выводы

Готовы проверить свои знания? Пройдите базовый тест VHDL — часть 3 или переходите к следующему уроку.

VHDL

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