PLL на основе CPLD

Иногда при построении измерительных устройств и другого оборудования возникает задача умножения частоты. Для решения этой задачи существуют специализированные микросхемы PLL-синтезаторов. Как альтернатива, всю цифровую часть такого синтезатора можно реализовать на CPLD.

В приведенном примере PLL-синтезатора из опорной частоты 12.8 МГц получается частота 100 МГц. Вся цифровая часть синтезатора реализована внутри CPLD EPM3032 фирмы "Altera".

PLL block

Рис. 1. Блок-схема PLL-синтезатора.

Блок-схема типового PLL-синтезатора приведена на рисунке 1. PLL-синтезатор состоит из делителя 1/M опорной частоты Fref, генератора, управляемого напряжением (VCO), делителя 1/N частоты Fvco, частотно-фазового детектора (PFD) и петлевого фильтра. Все цифровые элементы синтезатора реализованы на CPLD, снаружи собран только VCO и фильтр. Принципиальная схема синтезатора показана на рисунке 2.

PLL schematic

Рис. 2. Принципиальная схема PLL-синтезатора.

Генератор, управляемый напряжением, собран на транзисторах VT1, VT2. Колебательный контур генератора образован катушкой L1 и подстроечным конденсатором C1. Перестройку генератора по частоте осуществляет варикап VD2, который подключен через емкость связи C3. Источник напряжения смещения собран на диодной сборке VD1. Через емкость связи C4 выходной сигнал генератора поступает на усилительный каскад, реализованный на транзисторе VT3. Нагрузкой каскада является цепочка L2R4. Номинал дросселя L2 выбирается из условия оптимального согласования с нагрузкой в рабочем диапазоне частот VCO. Петлевой фильтр собран на элементах R7-R10, C6-C8. Для улучшения стабильности частоты и уменьшения шумов питание VCO дополнительно стабилизируется микросхемой U1.

Частотно-фазовый детектор реализован внутри CPLD. В простейшем случае роль такого детектора может выполнять элемент "исключающее ИЛИ". Однако простейшие фазовые детекторы обладают существенным недостатком - при фазовом сдвиге, близком к нулю, их коэффициент передачи снижается, на передаточной характеристике появляется "мертвая зона". От этого недостатка свободен более совершенный фазовый детектор, который, в частности, выпускается в виде отдельной ИС AD9901. Блок-схема такого частотно-фазового детектора показана на рисунке 3.

PFD block

Рис. 3. Блок-схема частотно-фазового детектора.

Кроме PFD внутри CPLD реализованы делители опорной частоты и частоты VCO. В данном случае M = 128, N = 1000. Выходная частота синтезатора Fvco = Fref * N / M = 12.8 МГц * 1000 / 128 = 100 МГц. Исходный текст реализации цифровой части синтезатора на языке AHDL приведен ниже:

subdesign pll
(
  Fref   : input;  -- опорная частота
  Fvco   : input;  -- выходная частота VCO
  Pfd    : output; -- выход PFD
)

variable
  RefDiv[6..0]   : dff;  -- делитель опорной частоты
  VcoDiv[9..0]   : dff;  -- делитель частоты VCO
  GFref          : node; -- глобальная линия опорной частоты
  GFvco          : node; -- глобальная линия частоты VCO
  PfdRef, PfdVco : node; -- переменные PFD
  PfdT1r, PfdT2r : dffe;
  PfdT1v, PfdT2v : dffe;
  PfdD           : node;

begin
  GFref = GLOBAL(Fref); -- глобализация опорной частоты
  GFvco = GLOBAL(Fvco); -- глобализация частоты VCO

  RefDiv[].clk = GFref;     -- делитель опорной частоты на 128
  RefDiv[] = RefDiv[] + 1;
  PfdRef = RefDiv[] == 127;

  VcoDiv[].clk = GFvco;     -- делитель частоты VCO на 1000
  PfdVco = VcoDiv[] == 999;
  if PfdVco then VcoDiv[] = 0;
    else VcoDiv[] = VcoDiv[] + 1;
      end if;

  PfdT1r.(clk, d, ena) = (GFref, !PfdT1r.q, PfdRef); -- реализация PFD
  PfdT1v.(clk, d, ena) = (GFvco, !PfdT1v.q, PfdVco);
  PfdD = PfdT1r.q $ PfdT1v.q;
  PfdT2r.(clk, d, clrn, ena) = (GFref, PfdD, PfdT2v.q, PfdRef);
  PfdT2v.(clk, d, prn, ena) = (GFvco, PfdD, !PfdT2r.q, PfdVco);
  Pfd = PfdT2r.q # (PfdT2v.q & PfdD);
end;

Внешний вид макета синтезатора приведен на рисунке 4.

PLL prototype

Рис. 4. Внешний вид макета синтезатора.

В некоторых случаях на CPLD можно реализовать и VCO. На эту тему есть интересная публикация EDN. Генератор, управляемый напряжением и функционирующий в широком диапазоне частот можно собрать на обычной КМОП-логике (рисунок 5).

VCO using logic

Рис. 5. Схема VCO на обычной логике.

При включении питания оба конденсатора C1 и C2 разряжены. Пусть на выходе IC1A присутствует НИЗКИЙ уровень, тогда на выходе IC1B будет ВЫСОКИЙ уровень. Конденсатор C2 будет заряжаться с постоянной времени C2R2. Дополнительный зарядный ток через резистор R4, обусловленный управляющим напряжением, будет влиять на время зарядки. Когда напряжение на конденсаторе C2 достигнет порога переключения IC1B, на выходе этого элемента появится НИЗКИЙ уровень, а на выходе IC1A - ВЫСОКИЙ. Теперь будет заряжаться C1, а C2 быстро разрядится через диод D2. Процесс повторится, в результате схема будет генерировать выходной сигнал в виде меандра, частота которого будет зависеть от управляющего напряжения (steering voltage).

На рисунке 6 показана схема такого же VCO, но реализованного на CPLD "Altera". Буферы с тремя состояниями заменяют собой диоды, а зарядные резисторы подключены непосредственно к управляющему напряжению. С указанными номиналами наклон характеристики VCO будет составлять около 700 кГц/В. Если управляющее напряжение уменьшить ниже логического порога, генератор выключится.

VCO using CPLD

Рис. 6. Схема VCO на CPLD.

Данная схема может быть реализована практически на любом семействе программируемой логики с КМОП-входами. Управляющее напряжение может значительно превышать напряжение питания, так как при работе генератора напряжение на конденсаторах C1, C2 не превышает примерно половины напряжения питания. Это позволяет использовать данную схему в преобразователях напряжение-частота с широким диапазоном входных напряжений.


Ридико Леонид Иванович
e-mail: wubblick@yahoo.com