Реализация синтезаторов частоты на ПЛИС

Синтезатор частоты на ПЛИСЦифровыми методами могут быть синтезированы только частоты f1 и f2, отношение которых f1/f2 представляет собой рациональное число М1/М2, где М1 и М2 – целые числа. Если М2 = 1, то частота f2 формируется из частоты f1 делителем частоты с коэффициентом деления М1. Если же М2 не равно 1 и М1 не равно 1, то следует использовать более сложные  схемы, называемые синтезаторами частот. 

В [1]  рассмотрены различные схемы синтезато-ров частот и показано,  что при выполнении синтезаторов частот на цифровых фазовраща-
телях, фазовые скачки равны периоду сигнала кварцевого генератора То = 1/fo, а расширить
возможности синтеза частот можно последовательным включением нескольких фазо-вращателей. При использовании k фазовращателей следует найти целочисленные решения
Мk, Mk-1, Mk-2, ... , M1 уравнения
                        1 +/-  1/M2 + /- 1/M3 +- ... 1/Mk = M1*fout/fo.
Показано также, что, в случае положительных коэффициентов Mk, фазовращатели можно заменить сумматором по модулю два, при условии ортогональности сигналов с Mk.
        Таким образом, для случая fout <= fo, задача синтеза частот сводится к получению
ряда ортогональных сигналов с Mk и суммированию их по модулю два.

 Получение ряда ортогональных сигналов с Mk.
Накапливающий сумматор при поступлении тактового сигнала dH=1 выполняет функцию S = S +1, где S – число, хранящееся в аккумуляторе. Для k-го члена ряда частота
fk будет определяться
fk = fo/2**k.
Величина k определяется необходимой минимальной частотной составляющей ряда Mk.    
Ортогонализация сигналов Mk достигается выделением передних фронтов сигналов fk   и
нормализацией их длительности.            

Преобразователь код-частота.  
Для синтезаторов частот на основе фазовой автоподстройки частоты основным элемен-
том является генератор, управляемый напряжением. Вышеописанный метод синтеза частот
можно применить для построения генератора, управляемого кодом. Для этого лишь необходимо произвести оценку (оценки – для случая одновременного формирования нескольких частот) необходимых текущих членов ряда Mk, которая соответству-ет k битам управляющего(их) кода(ов): при наличии k бита в управляющем коде – использовать для
синтеза сигнал fk, в противном случае – нет.

 VHDL исходный код двух частотного  преобразователя код-частота .
architecture Behavioral of sintez is
process(S,clk,o_sintq0,o_sintq100,codfreeq1)
 begin
            if(clk'event and clk='1') then
      case S(23) is
        when '1' => o_sintq0 <='1';
        when '0' => o_sintq0 <='0';
               when others => NULL;
      end case;
            end if;
            if(clk'event and clk='0') then
      case o_sintq0 is
        when '1' => o_sintq100 <='0';
        when '0' => o_sintq100 <='1';
               when others => NULL;
      end case;
            end if;
            if codfreeq1(0)='1' then
                ort100 <= o_sintq0 and o_sintq100;
            else
                ort100 <= '0';
            end if;
            if codfreeq2(0)='1' then
                ort200 <= o_sintq0 and o_sintq100;
            else
                ort200 <= '0';
            end if;
 end process;

.........

 process(S,clk,o_sintq23,o_sintq123,codfreeq1)
 begin
            if(clk'event and clk='1') then
      case S(0) is
        when '1' => o_sintq23 <='1';
        when '0' => o_sintq23 <='0';
               when others => NULL;
      end case;
            end if;
            if(clk'event and clk='0') then
      case o_sintq23 is
        when '1' => o_sintq123 <='0';
        when '0' => o_sintq123 <='1';
               when others => NULL;
      end case;
            end if;
            if codfreeq1(23)='1' then
                ort123 <= o_sintq23 and o_sintq123;
            else
                ort123 <= '0';
            end if;
            if codfreeq2(23)='1' then
                ort223 <= o_sintq23 and o_sintq123;
            else
                ort223 <= '0';
            end if;
 end process;  

 process(ort100,ort101,ort102,ort103,ort104,ort105,ort106,ort107,
          ort108,ort109,ort110,ort111,ort112,ort113,ort114,ort115,
                         ort116,ort117,ort118,ort119,ort120,ort121,ort122,ort123)
 begin
                fsint1 <= ort100 xor ort101 xor ort102 xor ort103 xor ort104

                        xor ort105 xor ort106 xor ort107 xor ort108 xor ort109 xor ort110
                         xor ort111 xor ort112 xor ort113 xor ort114 xor ort115 xor ort116
                          xor ort117 xor ort118 xor ort119 xor ort120 xor ort121 xor ort122
                           xor ort123;
end process;
end Behavioral;
 
 process(ort200,ort201,ort202,ort203,ort204,ort205,ort206,ort207,
          ort208,ort209,ort210,ort211,ort212,ort213,ort214,ort215,
                         ort216,ort217,ort218,ort219,ort220,ort221,ort222,ort223)
 begin
                fsint2 <= ort200 xor ort201 xor ort202 xor ort203 xor ort204
                        xor ort205 xor ort206 xor ort207 xor ort208 xor ort209 xor ort210
                         xor ort211 xor ort212 xor ort213 xor ort214 xor ort215 xor ort216
                          xor ort217 xor ort218 xor ort219 xor ort220 xor ort221 xor ort222
                           xor ort223;
end process;
end Behavioral;

Литература.
  1. Пухальский Г.И., Новосельцева Т.Я.  Проектирование дискретных устройств на интегральных схемах; Справочник, - М,; Радио и связь, 1990, - 304 с,; ил.

Автор Карпухин Б.В.

Тестовый проект для MaxPlus или Quartus даст возможность проследить все на диаграме симулятора. Полезно по этому поводу посетить соответствующий раздел литературы по VHDL Verilog

Top.Mail.Ru