[an error occurred while processing this directive]
|
А как из частоты X получить частоту Y?
--------------------------------------------------------------------------------
-- Покладов Александр
-- Делитель частоты
-- Выходная частота равна Fout = Fin * (cDiv / (2 ^ cRg))
-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-- ! Fout не может быть больше Fin, т.е. cDiv < (2 ^ cRg)
-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Constant cDiv = 6; -- коэффициент деления
Constant cRg = 3; -- количество разрядов в регистре фазы
SUBDESIGN Fr_div
(
Fin : INPUT;
Fout : OUTPUT;
)
VARIABLE
fv[cRg .. 0] :dff; -- Регистр сумматора
rgF :tff;
fin_X_2 :node; -- Удвоенная частота
BEGIN
fin_X_2 = Fin xor rgF; -- Умножение на 2 Fin
rgF.t = vcc;
rgF.clk = fin_X_2;
fv[].clk = fin_X_2; -- Сумматор фазы
fv[] = fv[] + cDiv;
Fout = fv[cRg]; -- Выход частоты
END;
Если скважность Fin отличается от 2, то будеп плавать фаза rgF. К тому же, длительность импульсов rgF не является детерминированной и будет изменяться от кристалла к кристаллу, плавать от температуры, напряжения питания и т.п. Так что выбирайте кристалл с подходящей PLL.
E-mail: info@telesys.ru