Изучаем САПР Altera Quartus II / Intel Quartus Prime, язык описания аппаратуры Verilog HDL и кое-что про VHDL. Программируем FPGA Altera / Intel Cyclone III, Cyclone IV, MAX II, MAX10. Экспериментируем с платами разработчика FPGA серии Марсоход, Марсоход2, Марсоход3. А еще разбираемся с FPGA Gowin.
Я однажды уже делал проект радиопередатчика частотной модуляцией. Тот проект был довольно сложным, пришлось поломать голову, чтобы он заработал. Теперь, когда я понял, как сдвигать фазу частоты PLL в FPGA, мне кажется, что уж фазовую модуляцию сделать довольно просто.
Правда тут есть одна тонкость. Обычное бытовое радиовещание ведется с частотной модуляцией, FM, то есть Frequency Modulation. Я же хочу попробовать передавать в эфир фазово-модулированный сигнал, а принимать его обычным FM-приемником, например, встроенным в мобильный телефон. Будет ли работать?
1) поставил галочку в мегавизарде "enable phase shift step resolution", как посоветовал Leka. Действительно это работает, теперь не нужно выбирать странные частоты, а можно просто поставить 100МГц, но Fvco будет 1300MHz. При этом разрешение по фазе получается 96,15 пикосекунд.
2) Исправил баг в Verilog программе: похоже я там напутал со счетчиками try и направлением dir сдвига фазы. В результате, поскольку фаза двигалась то вперед, то назад, реальный сдвиг фазы не соответствовал внутреннему счетчику фазы в PLL. Именно это являлось причиной "дрожания" двух битов в выборке. Просто сканирование вперед и назад оказывались сдвинутыми друг относительно друга. Теперь этой ошибки нет, исправлена. При измерениях фронт захваченного сигнала больше НЕ ДРОЖИТ! В доказательство прилагаю скриншот выше.
Таким образом сомнения отпадают, метод работает и позволяет действительно измерять задержки распространения сигнала с высокой точностью.
Предположим есть задача - измерить время распространения сигнала в линии задержки, как на рисунке выше.
Самый простой и очевидный способ измерения требует высокой частоты проекта. Период тактовой частоты измерений - это эталонный интервал, с помощью которого производятся измерения. Считаем сколько в измеряемом интервале времени укладывается эталонных периодов тактовой частоты, умножаем полученное число на период тактовой частоты и получаем значение времени. Таким образом, получается, что чем меньше период частоты, используемой для измерений, тем точнее измерения.
Частоты, используемые в проектах для ПЛИС, - это обычно 100-200МГц, пусть 300МГц. По технической спецификации Cyclone IV (speed grade C8) и MAX10 (C8) максимальная частота Clock Tree Performance внутри ПЛИС: 402 MHz. Это примерно соответствует периоду 2,5 наносекунды. Получается, что точнее 2,5 наносекунды интервалы и не измерить?
А что если использовать динамическое изменение фазы тактовой частоты с PLL ПЛИС? Про изменение фазы тактовой частоты PLL я писал в предыдущей статье. Если настроить частоту Fvco близкую к предельной, а у PLL ПЛИС Альтеры это 1300МГц, то сдвигать фазу отдельного выхода PLL можно на очень малые углы, ведь разрешение по фазе у PLL - это 1/8 периода Fvco.
Идея измерителя интервалов состоит в следующем. Берем с PLL ПЛИС две тактовых частоты с одинаковым периодом. Это будет два независимых клоковых домена. На первой частоте работает схема, которая запускает тестовый импульс, а на второй тактовой частоте работает схема, которая "ловит" ответный импульс после измеряемой линии задержки. Измерение проводится серией попыток. Каждая новая попытка измерения делается со сдвигом фазы первой тактовой частоты. Сдвигать фазу буду примерно на 100 пикосекунд. Попыток придется сделать довольно много. Сдвигать фазу я буду многократно в одну сторону, а потом многократно в обратную сторону, чтобы вернуться в исходное состояние фаз тактовых частот.
Эта анимация иллюстрирует предлагаемый метод измерений.
Я делаю проект для платы Марсоход3bis, ПЛИС MAX10, однако его можно адаптировать для других ПЛИС. Проект написан на Verilog HDL и компилируется в среде Intel Quartus Prime Lite Edition. Далее подробней о проекте.
У нас на сайте уже была пара статей про PLL. PLL - это, если говорить просто, встроенный в ПЛИС генератор тактовых частот. Он позволяет из одной входной тактовой частоты синтезировать несколько других с иной заданной частотой, скважностью и, при желании, с некоторым начальным сдвигом фазы.
Наша статья "Использование PLL" довольно подробно рассказывала как создать и настроить PLL в Altera Quartus II MegaWizard PlugIn-Manager. С тех пор прошло довольно много времени и теперь, в Quartus Prime, доступ к визарду осуществляется через пункт меню Tools => IP Catalog. Модуль PLL создается с помощью этого каталога. В нем выбираете Library => Basic Functions => Clocks; PLLs and Resets => PLL => ALTPLL. Остальные настройки - все как и раньше.
Сейчас я хочу рассказать о возможности динамически сдвигать фазу тактовой частоты PLL. Эта возможность есть в PLL таких FPGA, как Cyclone III, Cyclone IV, в MAX10 и других. Сказать по правде я и сам вот только что ознакомился с этой функцией в PLL. Просто раньше у меня в этом не было никакой необходимости, а сейчас появился проект, где это может понадобиться. Сдвиг фазы PLL - это похоже единственный способ аккуратно управлять задержками сигналов.
Режиссер и сценарист: Константин Бронзит Продюсер: Александр Боярский, Сергей Сельянов Композитор: Валентин Васенков Художник: Роман Соколов Россия, 2014
Подробнее...