Группа: Свой
Сообщений: 122
Регистрация: 24-05-05
Пользователь №: 5 329
Вопрос следующий: имеется система (VGA контроллер), которую в зависимости от условий нужно тактировать частотами 25, 31, 36, 40, 50 Мгц (до 100 МГц). Желательно иметь один кварцевый генератор - допустим на 50 МГц. Вопрос - как можно это реализовать?
Готовый накапливающий сумматор (Accumulator) есть в CORAGeneratore
Для реализации на VHDL могу предложить следующий код:
signal add : std_logic_vector(7 downto 0)); signal sum: std_logic_vector (7 downto 0); --signal a :unsigned (7 downto 0) := "00110010";--50 --signal a :unsigned (7 downto 0) := "01010000";--40 signal a :unsigned (7 downto 0) := "00100100";--36 signal f_out : std_logic;
process (clk,clr) begin if clr='1' then add<="00000000"; elsif clk'event and clk='1' then if add(7) ='0' then add <=unsigned('0'&add(6 downto 0)) + a; else add <=unsigned('0'&add(6 downto 0)) + a+28; --Десятичная коррекция end if; end if; end process;
f_out <=add(6);
Формула расчета выходной частоты синтезатора на накапливающем сумматоре следующая:
Fout = Fclk *Z/Nacc где Fclk - тактовая частота, Z - записываемый код, Nacc - максимальное значение накапливающего сумматора.