Делитель частоты представляет собой вариант счетчика, который выдает на выходе сигнал, частота которого в заданное число раз меньше, чем входная тактовая частота.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

 

entitydiv_clk is

    Port ( clk : in  STD_LOGIC;

clk_out : out  STD_LOGIC);

enddiv_clk;

 

architecture Behavioral of div_clk is

 

signalcnt : integer range 0 to 200 := 0;

 

begin

 

process(clk)

begin

ifrising_edge(clk) then

ifcnt = 199 then cnt<= 0;

elsecnt<= cnt + 1;

end if;

end if;

end process;

 

clk_out<= '1' when cnt = 0 else '0';

 

endBehavioral;

 

В показанном делителе частоты используется внутренний счетчик с пределом счета 200 (счетчик может принимать значения от 0 до 199). Если достигнутое счетчиком значение уже равно 199, то следующий фронт тактового сигнала загружает значение 0, иначе значение увеличивается на 1. Выходной сигнал формируется асинхронно, путем проверки значения внутреннего счетчика на 0. Поскольку такое состояние наблюдается в течение только 1 периода тактового сигнала из каждых 200, выходная частота оказывается в 200 раз меньше входной.

В представленном примере выход делителя будет формировать короткие импульсы, длительностью 1/200 от общего периода выходной частоты. При необходимости получения импульсов с коэффициентом заполнения 50% можно заменить выражение для clk_outна:

clk_out<= ‘1’ when cnt< 100 else ‘0’;

 

Сигнал, полученный с выхода такого делителя, не должен использоваться для тактирования других устройств ПЛИС. Его правильным использованием будет подключение к входу ce других синхронных модулей, для которых он будет разрешать счет на один такт из N, тем самым и обеспечивая деление частоты на N.

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