// Объявление модуля module trigger_2 // Объявление интерфейса модуля. Входные и выходные линии, их имена и типы. ( // асинхронные сигналы установки и сброса. одноразрядная входная логическая линия input wire set, input wire reset, // синхронные сигналы установки и сброса. одноразрядная входная логическая линия input wire set_sync, input wire reset_sync, // тактовый сигнал. По нему синхронизирована работа всего устройства. одноразрядная входная логическая линия input wire clock, // clock enable, устройство работает только если данный сигнал установлен в '1'. одноразрядная входная логическая линия input wire enable, // Вход данных. одноразрядная входная логическая линия input wire data_in, // Выход данных. одноразрядный регистр, установленный выходом в порт, а входом внутрь модуля output reg data_out ); // Основной процесс модуля. (собственно единственный процесс в данном модуле) always @(posedge clock, set, reset) begin // Асинхронный сброс в 1. (Синхронная установка) if (set == 1) begin data_out <= 1; end // Асинхронный сброс в 1. else if (reset == 1) begin data_out <= 0; end // Проверка прихода фронта тактового сигнала else if (clock == 1) begin // Синхронный сброс в 1. (Синхронная установка) if (set_sync == 1) begin data_out <= 1; end // Синхронный сброс в 1. else if (reset_sync == 1) begin data_out <= 0; end // Проверка сигнала enable. else if (enable == 1) begin // Запись в триггер входного сигнала. Произойдёт только по форнту тактового сигнала и только, если enable установлен в 1 // и ни один из сигналов сброса или установки не установлен в 1. data_out <= data_in; end end end endmodule