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