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 предложение должно быть последним в условном операторе. Триггер должен быть описан для каждого сигнала, назначенного в описании синхронного сигнала. Асинхронные предложения приводят к комбинационной логике, которая управляет набором и сбрасывать вводы триггера. Если не имеется никакой оговорки о синхронизации, вся логика становится комбинационной.
Возможности синхронизации.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.