МАРСОХОД

Open Source Hardware Project

FPGA & CPLD Блогchips

САПР Altera Quartus II / Quartus Prime, язык Verilog HDL, ПЛИС Cyclone III, Cyclone IV, MAX II, MAX10.
Платы разработчика серии Марсоход, Марсоход2, Марсоход3.


О плате DE10-Standard

de10 standard

Написал на habrahabr статью о моем опыте использования платы DE10-Standard от Terasic.

Может кому интересно будет: https://habrahabr.ru/post/334154/

 

Новый Quartus Prime v17.0

prime17

Компания Intel выпустила очередную версию Quartus Prime v17.0.

Основные изменения похоже касаются только версий Quartus Prime Pro, то есть платной версии Quartus. Для простых проектов, таких, какие мы показываем здесь на нашем сайте видимо все эти новшества не очень актуальны.

Как и раньше, Quartus Prime поддерживает FPGA Cyclone IV, MAX II и MAX10, а так же другие, но не Cyclone III. Это значит, что для программирования платы Марсоход2 нужно использовать не версию Prime, а САПР Altera Quartus II v13.1. Для других наших плат: Марсоход (MAX II), Марсоход2bis (Cyclone IV), Марсоход3 и Марсоход3bis (MAX10) можно использовать новый Quartus Prime v17.0.

Программатор MBFTDI протестирован в последней версии квартуса и он работает, как и раньше.

Что же нового в 17й версии?
Пишут, что в новой версии реализована более быстрая инкрементальная компиляция для reusable-block. Предполагается, что над сложным проектом работают разные команды, когда каждая готовит свой логический блок в своем разделе (partition) ПЛИС и потом эти блоки якобы легко стыкуются, временной анализ для каждого раздела свой и его результаты сохраняются при объединении блоков в один проект. Более того, раздел может быть экспортирован в "design block", который потом может быть переиспользован в другом проекте. Это такая новая концепция "компиляции, основанной на блоках".

Подробнее можно прочитать на сайте Intel: https://www.altera.com/products/design-software/fpga-design/quartus-prime/what-s-new.html

 

Радиопередатчик с фазовой модуляцией

PM radio transmitter

После последнего проекта, где для точного измерения интервалов времени используется динамический сдвиг фазы тактовой частоты PLL в ПЛИС Альтеры, пришла в голову другая идея. А что если попытаться реализовать радиопередатчик с фазовой модуляцией?

Я однажды уже делал проект радиопередатчика частотной модуляцией. Тот проект был довольно сложным, пришлось поломать голову, чтобы он заработал. Теперь, когда я понял, как сдвигать фазу частоты PLL в FPGA, мне кажется, что уж фазовую модуляцию сделать довольно просто.

Правда тут есть одна тонкость. Обычное бытовое радиовещание ведется с частотной модуляцией, FM, то есть Frequency Modulation. Я же хочу попробовать передавать в эфир фазово-модулированный сигнал, а принимать его обычным FM-приемником, например, встроенным в мобильный телефон. Будет ли работать?

Дополнение к проекту измерителя временных задержек

impulse capture

Кое-что исправил в своем проекте "Точное измерение интервалов времени с помощью ПЛИС"..

А именно:

1) поставил галочку в мегавизарде "enable phase shift step resolution", как посоветовал Leka. Действительно это работает, теперь не нужно выбирать странные частоты, а можно просто поставить 100МГц, но Fvco будет 1300MHz. При этом разрешение по фазе получается 96,15 пикосекунд.

2) Исправил баг в Verilog программе: похоже я там напутал со счетчиками try и направлением dir сдвига фазы. В результате, поскольку фаза двигалась то вперед, то назад, реальный сдвиг фазы не соответствовал внутреннему счетчику фазы в PLL. Именно это являлось причиной "дрожания" двух битов в выборке. Просто сканирование вперед и назад оказывались сдвинутыми друг относительно друга. Теперь этой ошибки нет, исправлена. При измерениях фронт захваченного сигнала больше НЕ ДРОЖИТ! В доказательство прилагаю скриншот выше. 

Таким образом сомнения отпадают, метод работает и позволяет действительно измерять задержки распространения сигнала с высокой точностью.

Исправленный проект на https://github.com/marsohod4you/FpgaTDC

 

 

Точное измерение интервалов времени с помощью ПЛИС

 Зачача измерения задержки распространения сигнала

Предположим есть задача - измерить время распространения сигнала в линии задержки, как на рисунке выше.

Самый простой и очевидный способ измерения требует высокой частоты проекта. Период тактовой частоты измерений - это эталонный интервал, с помощью которого производятся измерения. Считаем сколько в измеряемом интервале времени укладывается эталонных периодов тактовой частоты, умножаем полученное число на период тактовой частоты и получаем значение времени. Таким образом, получается, что чем меньше период частоты, используемой для измерений, тем точнее измерения.

Частоты, используемые в проектах для ПЛИС, - это обычно 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. Далее подробней о проекте.


facebook  GitHub  YouTube  Twitter
Вы здесь: Начало