Введение в стандарт IEEE. Справочное руководство по языку VHDL (Пересмотр стандарта IEEE. 1076-1987), страница 7

B2: block (CLK'event and CLK='1')

begin

Q_OUT <= guarded DATA ;

end block ;

Сброс и предварительная установка.

     Этот раздел описывает процедуру, сброса и предварительной установки регистра в VHDL. Еще два общих управляющих сигнала триггера - это асинхронный сброс и синхронная предварительная установка. Асинхронное управление подразумевает, что, независимо от длительности такта, триггер реагирует, если асинхронный сигнал активен. У большинства логических устройств асинхронный сброс, обнуляет (0) Q-вывод триггера. Так как логика сброса независима от логики синхронизации, она добавляется к списку чувствительности процесса VHDL, и новая конструкция if - then определяется вне контекста логики синхронизации, чтобы управлять обнулением вывода, когда происходит сброс.


     Синхронное управление на триггере осуществляется до того момента как триггер изменит свое состояние, зависящее от импульса синхронизации. Большинство программируемых логических устройств содержат синхронное программное управление, которое приводит Q-вывод триггера к единице (1). Так как логика предварительной установки зависит от логики синхронизации, новая VHDL конструкция if - then определяется внутри контекста логики синхронизации, чтобы управлять приведением к единице (1) выхода-Q, если подан сигнал предварительной установки.


Общий стиль для D-триггеров со сбросом и предварительной установкой показан ниже. 

D-триггер с синхронной предварительной установкой:

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity dtype is

 port (d, ck, preset : std_logic;

q             : out std_logic);

end;

architecture behavior of dtype is

begin

process (d, ck, preset)

begin

if (ck = '1') and ck'event then

if (preset = '1') then

q <= '1';

else

q <= d;

end if;

end if;

end process;

end behavior;

D-триггер с асинхронным сбросом:

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity dtype is

port (d, ck, reset : std_logic;

q            : out std_logic);

end;

architecture behavior of dtype is

begin

process (d, ck, reset)

begin

if reset = '1' then

q <= '0';

elsif ck = '1' and ck'event then

q <= d;

end if;

end process;

end behavior;

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

B3: block (CLK'event and CLK='1')

begin

Q_OUT <= guarded '1' when PRESET='1' else DATA;

end block ;

     Асинхронная предварительная установка и сброс, могут использоваться вместе. Также можно составлять выражения, вместо фиксированного '0' или '1' в операциях присвоения на Q_OUT, в сбросе и предварительной установке состояния. Это приводит к комбинационной логике, описывающей набор, и сбросу целевого сигнала входа триггера. Следующий фрагмент показывает структуру такого процесса:

process (clock, asynchronously_used_signals )

begin

if (boolean_expression) then

asynchronous signal_assignments

elsif (boolean_expression) then

asynchronous signal_assignments

elsif (clock'event and clock = constant ) then

synchronous signal_assignments

end if ;

end process ;

     Могут иметься несколько асинхронных elsif предложений, но синхронное elsif предложение должно быть последним в условном операторе. Триггер должен быть описан для каждого сигнала, назначенного в описании синхронного сигнала. Асинхронные предложения приводят к комбинационной логике, которая управляет набором и сбрасывать вводы триггера. Если не имеется никакой оговорки о синхронизации, вся логика становится комбинационной.

Возможности синхронизации.