library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; -- Объявление интерфейса модуля entity trigger is -- Объявление порта модуля. Входные и выходные линии, их имена и типы. port ( -- асинхронные сигналы установки и сброса. одноразрядная входная логическая линия set : in std_logic; reset : in std_logic; -- синхронные сигналы установки и сброса. одноразрядная входная логическая линия set_sync : in std_logic; reset_sync : in std_logic; -- тактовый сигнал. По нему синхронизирована работа всего устройства. одноразрядная входная логическая линия clock : in std_logic; -- clock enable, устройство работает только если данный сигнал установлен в '1'. одноразрядная входная логическая линия enable : in std_logic; -- Вход данных. одноразрядная входная логическая линия data_in : in std_logic; -- Выход данных. одноразрядная выходная логическая линия data_out : out std_logic ); end entity; -- Определение архитектуры модуля architecture rtl_trigger of trigger is begin -- Основной процесс модуля. (собственно единственный процесс в данном модуле) process(clock, set, reset) begin -- Асинхронный сброс в '1'. (Синхронная установка) if set = '1' then data_out <= '1'; -- Асинхронный сброс в '1'. elsif reset = '1' then data_out <= '0'; -- Проверка прихода фронта тактового сигнала elsif rising_edge(clock) then -- Синхронный сброс в '1'. (Синхронная установка) if set_sync = '1' then data_out <= '1'; -- Синхронный сброс в '1'. elsif reset_sync = '1' then data_out <= '0'; -- Проверка сигнала enable. elsif enable = '1' then -- Запись в триггер входного сигнала. Произойдёт только по форнту тактового сигнала и только, если enable установлен в '1' -- и ни один из сигналов сброса или установки не установлен в '1'. data_out <= data_in; end if; end if; end process; end rtl_trigger;