Проектирование цифровых фазовых замков (ТВ) Vhdl для частотного синтеза

Проектирование цифровых фазовых циклов (PLL) в VHDL является фундаментальным навыком для инженеров, работающих над синтезом частот и управлением часами в цифровых системах. PLL являются важными компонентами, которые помогают синхронизировать сигналы и генерировать стабильные частоты, что делает их жизненно важными в современных электронных устройствах, таких как беспроводные приемопередатчики, преобразователи данных и цифровые процессоры. В отличие от аналоговых PLL, цифровые PLL (DPLL) предлагают большую гибкость, программируемость и иммунитет к изменениям обработки, что делает их предпочтительным выбором для реализации систем на чипе (SoC). Эта статья предоставляет всеобъемлющее пошаговое руководство по проектированию DPLL в VHDL, охватывающее теоретические основы, дизайн основных компонентов, методы моделирования и практические соображения для синтеза частоты. Независимо от того, являетесь ли вы опытным разработчиком FPGA или студентом, новым для цифрового дизайна, овладение реализацией DPLL разблокирует расширенные возможности генерации часов и восстановления часов в ваших проектах.

Понимание цифровых PLL

Цифровая PLL — это система управления обратной связью, которая сравнивает фазу входного опорного сигнала с фазой генерируемого выходного сигнала. Цель состоит в том, чтобы выровнять выходную фазу с входом, эффективно зафиксировав частоту. В замкнутом цикле DPLL непрерывно регулирует частоту цифрового численно управляемого осциллятора (NCO) до тех пор, пока разность фаз не уменьшится до небольшой ошибки устойчивого состояния. Этот процесс гарантирует, что выходной сигнал остается синхронизированным со эталоном, даже при наличии шума или дрейфа частоты. Цифровые PLL предпочтительнее в цифровых системах, потому что они могут быть реализованы полностью на языках описания аппаратных средств, таких как VHDL, синтезированы в нет-листы уровня затвора и интегрированы в FPGA или ASIC без внешних аналоговых компонентов.

Базовая архитектура DPLL состоит из четырёх основных блоков: фазового детектора, петлевого фильтра, NCO и пути обратной связи. Фазовый детектор вычисляет разницу между эталонной фазой и фазой обратной связи. Этот сигнал ошибки фильтруется петлевым фильтром, который обычно включает в себя пропорционально-интегральный (PI) контроллер для установки динамики петли. Отфильтрованное управляющее слово приводит в движение NCO, которое генерирует выходные часы или форму волны. Выход подаётся обратно на фазовый детектор, закрывая петлю. Понимание взаимодействия этих блоков имеет важное значение для проектирования стабильного и отзывчивого DPLL.

Ключевые компоненты цифрового PLL

Прежде чем погрузиться в реализацию VHDL, важно понять функции каждого компонента и компромиссы в дизайне.

Детектор фазы

Фазовый детектор (ФД) генерирует сигнал ошибки, пропорциональный разности фаз между опорными и обратными сигналами.В цифровых конструкциях наиболее распространенными реализациями являются фазовый детектор XOR и фазово-частотный детектор (ФДФ).

Фильтр Loop

Фильтр петли обрабатывает сигнал фазовой ошибки для получения управляющего напряжения (или цифрового кода), который приводит в движение NCO. В цифровом PLL петлевой фильтр обычно является цифровым PI-фильтром. Пропорциональный термин обеспечивает немедленную коррекцию на основе текущей ошибки, в то время как интегральный термин накапливает ошибку с течением времени для устранения смещение фазы в устойчивом состоянии. Коэффициенты фильтра (Kp и Ki) определяют полосу пропускания петли, время блокировки и стабильность. Хорошо спроектированный петлевой фильтр должен сбалансировать быстрое получение с низким джиттером.

Цифрово-контролируемый осциллятор (NCO)

NCO генерирует выходную форму волны — часто квадратную волну или синусоидальную волну — на программируемой частоте. Обычно он содержит фазовый аккумулятор, который добавляет слово управления частотой (FCW) на каждый тактовый цикл. Выход аккумулятора, представляющий мгновенную фазу, обращается к таблице поиска (LUT), которая хранит значения синуса или косинуса. Альтернативно, для синтеза часов NCO может просто выводить наиболее значительный бит фазового аккумулятора для получения квадратной волны 50% рабочего цикла. Разрешение NCO определяется количеством битов в аккумуляторе (например, 32-бит), что позволяет очень тонкие частотные шаги.

Путь обратной связи

Путь обратной связи прост: он направляет выход NCO обратно на фазовый детектор. В некоторых конструкциях частотный делитель может быть помещен в путь обратной связи, чтобы позволить PLL генерировать частоты, которые являются кратными эталонным (например, синтез целого числа-N). Современные DPLL также могут включать программируемые делители для гибкого синтеза.

Разработка цифрового PLL в VHDL

Внедрение цифрового PLL в VHDL включает в себя кодирование каждого компонента как отдельного объекта и иерархическое их соединение. Следующие подразделы предоставляют примеры проектирования VHDL для каждого блока с акцентом на синтезируемые конструкции и лучшие практики.

Реализация детектора фазы

Мы реализуем PFD, так как он более надежен для синтеза частоты. В PFD используются два D-флип-флопса, AND-шлюз сброса и выходы вверх/вниз. Код VHDL для простого PFD показан ниже. Обратите внимание, что конструкция полностью синхронна, чтобы избежать проблем метастабильности.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity pfd is
 port (
 clk_ref : in std_logic;
 clk_fb : in std_logic;
 reset : in std_logic;
 up : out std_logic;
 down : out std_logic
 );
end pfd;

architecture rtl of pfd is
 signal q_ref, q_fb : std_logic;
begin
 process(clk_ref, reset)
 begin
 if reset = '1' then
 q_ref <= '0';
 elsif rising_edge(clk_ref) then
 q_ref <= '1';
 end if;
 end process;

 process(clk_fb, reset)
 begin
 if reset = '1' then
 q_fb <= '0';
 elsif rising_edge(clk_fb) then
 q_fb <= '1';
 end if;
 end process;

 up <= q_ref and not q_fb;
 down <= q_fb and not q_ref;

 reset <= q_ref and q_fb; -- internal reset for both flip-flops
end rtl;

В этой реализации сигнал приводится в действие комбинационным И обоих шлепаний, гарантируя, что после прибытия обоих краев детектор быстро сбрасывает. Этот PFD выводит импульс на , когда ссылка приводит обратную связь, и импульс на , когда обратная связь приводит. Ширина импульса пропорциональна разности фаз.

Реализация фильтра Loop

Цифровой ПИ-фильтр может быть реализован с помощью аккумулятора и параллельных множителей. Для простоты предположим, что выходы ПФД преобразуются в подписанное значение ошибки. Коэффициенты фильтра выбираются для обеспечения коэффициента демпфирования 0,7 и естественной частоты, которая соответствует требованию времени блокировки. Код VHDL ниже показывает базовый ПИ-фильтр с 16-битной подписанной арифметикой.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity loop_filter is
 port (
 clk : in std_logic;
 rst : in std_logic;
 phase_err: in signed(15 downto 0);
 freq_ctrl: out signed(15 downto 0)
 );
end loop_filter;

architecture rtl of loop_filter is
 -- Coefficients: Kp = 0.25, Ki = 0.03125 (example values)
 constant Kp : signed(15 downto 0) := to_signed(8192, 16); -- 0.25 in Q14
 constant Ki : signed(15 downto 0) := to_signed(1024, 16); -- 0.03125 in Q14
 signal integral : signed(31 downto 0) := (others => '0');
 signal prop_term, int_term : signed(31 downto 0);
begin
 process(clk, rst)
 begin
 if rst = '1' then
 integral <= (others => '0');
 elsif rising_edge(clk) then
 integral <= integral + (phase_err * Ki); -- saturated accumulation
 end if;
 end process;

 prop_term <= phase_err * Kp;
 int_term <= integral(31 downto 16); -- truncate to 16-bit
 freq_ctrl <= prop_term(15 downto 0) + int_term(15 downto 0);
end rtl;

В этом примере коэффициенты представлены в формате Q14 с фиксированной точкой. Интегральный аккумулятор составляет 32 бита для предотвращения переполнения, а выход усечен до 16 бит. Этот фильтр управляет словом управления частотой NCO.

Осуществление НКО

NCO генерирует выходные часы. Для синтеза частоты часто требуется квадратная волна с 50% рабочим циклом. Подход фазового аккумулятора работает хорошо. Следующий код VHDL реализует 32-битный NCO с выходом часов (MSB аккумулятора).

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity nco is
 port (
 clk : in std_logic;
 rst : in std_logic;
 freq_word: in unsigned(31 downto 0);
 out_clk : out std_logic
 );
end nco;

architecture rtl of nco is
 signal accumulator : unsigned(31 downto 0) := (others => '0');
begin
 process(clk, rst)
 begin
 if rst = '1' then
 accumulator <= (others => '0');
 elsif rising_edge(clk) then
 accumulator <= accumulator + freq_word;
 end if;
 end process;

 out_clk <= accumulator(31); -- MSB toggles at half the NCO frequency
end rtl;

Выходная частота задается . Использование 32-битного аккумулятора обеспечивает частотное разрешение . Для синтеза синусоидальной волны заменяйте выход на таблицу поиска, адресованную битами высокого порядка аккумулятора. Например, используйте верхние 8 бит для индексации 256-точечного синусового LUT, хранящегося в блоке ROM.

Интеграция и дизайн верхнего уровня

После того, как отдельные модули спроектированы, мы создаем объект верхнего уровня, который инстанцирует PFD, петлевой фильтр и NCO. Путь обратной связи соединяет выход NCO обратно на вход обратной связи PFD. Простая конструкция VHDL верхнего уровня показана ниже.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity digital_pll is
 port (
 ref_clk : in std_logic;
 rst : in std_logic;
 pll_out : out std_logic
 );
end digital_pll;

architecture rtl of digital_pll is
 signal up, down : std_logic;
 signal phase_err_signed : signed(15 downto 0);
 signal freq_ctrl : signed(15 downto 0);
 signal fb_clk : std_logic;
begin
 -- Convert up/down to signed error
 phase_err_signed <= (to_signed(1, 16) when up='1') else
 (to_signed(-1, 16) when down='1') else
 (others => '0');

 u_pfd : entity work.pfd
 port map (
 clk_ref => ref_clk,
 clk_fb => fb_clk,
 reset => rst,
 up => up,
 down => down
 );

 u_loop_filter : entity work.loop_filter
 port map (
 clk => ref_clk,
 rst => rst,
 phase_err => phase_err_signed,
 freq_ctrl => freq_ctrl
 );

 u_nco : entity work.nco
 port map (
 clk => ref_clk,
 rst => rst,
 freq_word => unsigned(freq_ctrl),
 out_clk => fb_clk
 );

 pll_out <= fb_clk;
end rtl;

Отметим, что в этом простом примере фазовая ошибка квантована до ±1. На практике более сложный фазовый детектор (например, тайм-цифровой преобразователь) может обеспечить более точное разрешение. Фильтр петли и NCO работают на одних и тех же эталонных часах, что упрощает конструкцию, но ограничивает максимальную выходную частоту. Для более высоких выходных частот может использоваться отдельная высокоскоростная часовая область.

Моделирование и проверка

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

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity tb_digital_pll is
end tb_digital_pll;

architecture sim of tb_digital_pll is
 signal ref_clk : std_logic := '0';
 signal rst : std_logic := '0';
 signal pll_out : std_logic;
 constant T : time := 20 ns; -- 50 MHz reference
begin
 ref_clk <= not ref_clk after T/2;
 rst <= '1', '0' after 100 ns;

 dut : entity work.digital_pll
 port map (ref_clk, rst, pll_out);

 -- verification process
 process
 begin
 wait until rising_edge(rst);
 wait for 1 us; -- allow lock
 -- check frequency and phase
 report "Simulation complete";
 std.env.finish;
 end process;
end sim;

Можно использовать инструменты моделирования, такие как ModelSim, Vivado Simulator или GHDL. Также рекомендуется запускать обширные угловые моделирования с дрожащими опорными часами и переходными устройствами питания. Полезным ресурсом для методов моделирования PLL является документ о лучших практиках моделирования PLL от РЧ-центров.

Синтез частоты с цифровым PLL

После блокировки DPLL мы можем использовать его для синтеза частоты путем изменения слова управления частотой NCO. В типичном приложении эталонные часы являются стабильным кристаллическим осциллятором, а DPLL генерирует высокочастотный выход, который является кратным эталону. Для синтеза целого числа-N в путь обратной связи может быть добавлен делитель. Для синтеза дробного N модулируется разделитель обратной связи (например, с помощью модулятора сигма-дельта) для достижения нецелочисленных коэффициентов умножения. Цифровые PLL превосходят при синтезе дробного N, потому что слово управления частотой NCO может обновляться в режиме реального времени с высоким разрешением.

Связь между выходной частотой и управляющим словом дается f out = FCW / 2Nf clk, где N — число битов аккумулятора. Изменяя FCW, DPLL может производить широкий диапазон частот. В системах с частотным переключением спектра распространения (FHSS) DPLL может переключать частоты в течение нескольких тактовых циклов, обновляя FCW, при условии, что полоса пропускания петли позволяет быстро осесть.

Для дальнейшего чтения по цифровому синтезу частоты см. классический текст Phase-Locked Loops: Design, Simulation, and Applications Роланда Э. Беста (McGraw-Hill, 2007). Кроме того, статья IEEE по полностью цифровой архитектуре PLL Сташевского и др. обеспечивает передовую перспективу.

Практические соображения

Разработка DPLL, который надежно работает в аппаратном обеспечении, требует тщательного изучения нескольких практических вопросов.

Время блокировки и пропускная способность

Время блокировки DPLL обратно пропорционально полосе пропускания петли. Более широкая полоса пропускания блокируется быстрее, но позволяет больше ориентировочной подпитки и дрожания. Узкая полоса пропускания ослабляет шум, но задерживается дольше. Коэффициенты фильтра петли должны быть настроены в соответствии с требованиями приложения. Начните с коэффициента демпфирования 0,707 (критическое демпфирование) и настройте естественную частоту на основе приемлемого времени блокировки. Используйте формулу ω n ≈ 2 * π * (ширина полосы) для выключения.

Джиттер и фазовый шум

Цифровые ПЛЛ страдают от джиттера квантования из-за конечного разрешения NCO и фазового детектора. Увеличение ширины аккумулятора снижает шум квантования частоты. Использование многобитного фазового детектора (например, тайм-цифрового преобразователя с разрешением 10 пс) улучшает фазовый шум. Для высокопроизводительных приложений рассмотрим возможность реализации детектора фазы взрыва (двоичный) с высокоскоростным цифровым петлевым фильтром. Внешние ссылки с низким фазовым шумом, такие как кристаллические осцилляторы с управлением духовкой (OCXO), также улучшают общее джиттер.

Потребление энергии

DPLL, реализованные в FPGA или ASIC, потребляют динамическую мощность, пропорциональную тактовой частоте и количеству ворот переключения. Для снижения мощности, использовать затворные часы или включать сигналы для NCO, когда частотная реконфигурация не требуется. Современные архитектуры DPLL с низким энергопотреблением, такие как те, которые используют обработку временных доменов, обсуждаются в исследовательской работе Chen et al.

Процесс, напряжение, температура (PVT) вариации

Цифровые конструкции более невосприимчивы к вариациям ПВТ, чем аналоговые схемы, но усиление петлевого фильтра и частота NCO по-прежнему зависят от системных часов, которые могут варьироваться по углам. Использование небольшого запаса в коэффициентах петлевого фильтра и выполнение статического анализа времени гарантирует, что DPLL соответствует времени во всех условиях. Для выключения рекомендуется моделирование с обратной аннотацией SDF (стандартный формат задержки).

Продвинутые темы

Для инженеров, готовых выйти за рамки основ, существует несколько передовых топологий DPLL.

Всецифровой PLL (ADPLL)

ADPLL заменяет все аналоговые компоненты цифровыми эквивалентами, включая преобразователь времени-цифры (TDC) в качестве фазового детектора и осциллятор с цифровым управлением (DCO). Этот подход широко используется в нанометровых CMOS для RF-приложений. Методология проектирования VHDL естественным образом распространяется на ADPLLs, добавляя блок TDC IP и интерфейс управления осциллятором.

Фракционно-N PLL с модуляцией Sigma-Delta

Fractional-N synthesis allows arbitrary frequency ratios, enabling fine frequency steps without reducing the phase detector frequency. The feedback divider's modulus is modulated by a sigma-delta modulator (SDM) to shape quantization noise away from the loop bandwidth. The SDM can be implemented in VHDL as a third-order error feedback structure. A tutorial on SDM-based fractional-N PLLs is available from Analog Devices.

Заключение

Проектирование цифровых фазовых циклов в VHDL для синтеза частоты является сложной, но полезной задачей, которая сочетает в себе цифровую обработку сигналов, теорию управления и дизайн оборудования. Эта статья охватывает фундаментальные компоненты - фазовый детектор, фильтр петли и NCO - с синтезируемыми примерами VHDL и стратегиями моделирования. Понимая эти строительные блоки, вы можете создавать надежные DPLL, способные генерировать стабильные высокочастотные часы для широкого спектра приложений. Не забудьте всегда проверять свой дизайн с помощью моделирования, учитывать практические компромиссы, такие как время блокировки и джиттер, и исследовать передовые архитектуры для удовлетворения строгих требований к производительности. Мастерство дизайна DPLL значительно повысит ваши возможности в качестве инженера цифрового дизайна.