Таймер отличается от обычного счетчика наличием дополнительных возможностей по запуску, перезагрузке и останову. В примере показан простейший таймер, который обеспечивает задержку появления выходного сигнала на 200 тактов относительно появления входного сигнала reload. После достижения максимального значения таймер не повторяет цикл счета с нуля, а останавливается до появления сигнала reload. В таком режиме данное устройство может использоваться как сторожевой таймер (watchdogtimer). Эта разновидность таймера предназначена для формирования предупреждений о том, что какое-то событие, вызывающее появление сигнала перезагрузки таймера, не происходило уже длительное время. Сторожевой таймер часто используется в микроконтроллерных системах управления, где его перезагрузка происходит в процессе выполнения программы. Отсутствие перезагрузки в течение времени, соответствующего полному циклу счета, свидетельствует о том, что микроконтроллер перестал периодически выполнять команды, приводящие к сбросу счетчика в ноль. Это, вероятнее всего, является следствием аппаратного или программного сбоя системы, и выход сторожевого таймера может являться сигналом аппаратного сброса микроконтроллера, или индикатором аварийного состояния системы. Пример таймера, сбрасываемого по сигналу reload, и прекращающего счет при достижении заданного состояния, приведен ниже:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity timer is
Port ( clk : in STD_LOGIC;
reload : in STD_LOGIC;
timer_out : out STD_LOGIC);
end timer;
architecture Behavioral of timer is
signalcnt : integer range 0 to 200 := 0;
begin
process(clk)
begin
ifrising_edge(clk) then
if reload = ‘1’ then cnt<= 0;
elsifcnt< 199 then cnt<= cnt + 1;
end if;
end if;
end process;
timer_out<= '1' when cnt = 199 else '0';
endBehavioral;