Таймер отличается от обычного счетчика наличием дополнительных возможностей по запуску, перезагрузке и останову. В примере показан простейший таймер, который обеспечивает задержку появления выходного сигнала на 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;

  =  Перейти к содержанию  =