Задача такова: имеется генератор с частотой 33 МГц и джиттером N пикосекунд (генератор подключен ко входу CLK0 ПЛИС семейства Cyclone III).
требуется на ПЛИС реализовать управляемый делитель частоты (1/2, 1/4, 1/6, 1/8, 1/10, 1/12, 1/14, 1/16). Требуется на выходе делителя получить сигнал с как можно меньшим джиттером (разумеется, джиттер меньше чем N пс получить не выйдет).
Моё решение:
Код
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY clkdiv IS
GENERIC
(
divsz : natural := 3 -- разрядность счетчика
);
PORT
(
clk: in std_logic; -- входной клок
div: in std_logic_vector((divsz-1) downto 0); -- коэффициент деления
sco: out std_logic -- выходной клок
);
END clkdiv;
ARCHITECTURE rtl OF clkdiv IS
signal CN : std_logic_vector((divsz-1) downto 0); -- счетчик
signal T,Q : std_logic;
BEGIN
T<='1' when (CN=div) else '0';
process (clk,T)
begin
if (falling_edge(clk)) then -- по спаду клока
if (T='1') then
CN<=(others=>'0');
else
CN<=CN+1;
end if;
end if;
end process;
process (clk,T)
begin
if (rising_edge(clk) and (T='1')) then -- по фронту клока
Q<=not Q;
end if;
end process;
sco<=Q;
END rtl;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY clkdiv IS
GENERIC
(
divsz : natural := 3 -- разрядность счетчика
);
PORT
(
clk: in std_logic; -- входной клок
div: in std_logic_vector((divsz-1) downto 0); -- коэффициент деления
sco: out std_logic -- выходной клок
);
END clkdiv;
ARCHITECTURE rtl OF clkdiv IS
signal CN : std_logic_vector((divsz-1) downto 0); -- счетчик
signal T,Q : std_logic;
BEGIN
T<='1' when (CN=div) else '0';
process (clk,T)
begin
if (falling_edge(clk)) then -- по спаду клока
if (T='1') then
CN<=(others=>'0');
else
CN<=CN+1;
end if;
end if;
end process;
process (clk,T)
begin
if (rising_edge(clk) and (T='1')) then -- по фронту клока
Q<=not Q;
end if;
end process;
sco<=Q;
END rtl;
Дополнительная синхронизация (та, что по переднему фронту) внесена в схему для того, чтобы время переключения выходного сигнала не зависело от скорости работы сумматора и схемы сравнения (мало ли время срабатывания зависит от значения CN и div).
Вопросы:
1) насколько корректна такая реализация?
2) как такое решение может повлиять на джиттер выходного сигнала?
3) ПЛИС и джиттер - как они вообще связаны.