Pull to refresh

Симуляция высокоскоростных приёмопередатчиков с динамической реконфигурацией для ПЛИС Intel серии IV. Подготовка

Level of difficultyMedium
Reading time6 min
Views1.6K

Автор: iwaniwaniwan012

Введение

Для начала хотелось бы сказать, что наверное каждый "ПЛИСовод" использовал высокоскоростные приёмопередатчики. В семействе ПЛИС Intel/Altera серии IV IP ядро с этим функционалом называется ALTGX.

Основная задача этого IP ядра - преобразование параллельной шины на низкой частоте в последовательную шину на высокой.

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

Основными из них являются:

  • скоростные характеристики, то есть на какой скорости будут принимать и передавать данные

  • включать/выключать встроенные кодеки (в ПЛИС серии IV - кодек 8b/10b)

  • менять аналоговые параметры, такие как TX VOD, TX Preemphasis, RX Offset Cancelation, RX Adaptive Equalizer

Ни для кого не секрет, что компиляция и тестирование проектов ПЛИС занимает достаточно большую часть времени всего процесса разработки. Поэтому часто разработчики используют различные среды симуляции для тестирования своих модулей. Но многие ли использовали среду симуляции для тестирования разработанных модулей в связке с используемыми IP ядрами от разработчика ПЛИС. В этой статье мы решили поделиться своим опытом, начиная с создания IP ядра ALTGX для ПЛИС Intel Cyclone IV до симуляции созданного проекта для тестирования модулей динамической реконфигурации с связке с ALTGX.

О том, что такое и зачем ALTGX_RECONFIG и ALTPLL_RECONFIG расскажу чуть позже.

В нашем проекте мы планируем изменять только скоростные характеристики. При необходимости эту статью можно взять за основу для проведения своих собственных экспериментов.

Итак, начнём.

Общая информация

Архитектура приёмопередатчиков из документации Cyclone IV Device Handbook, Volume 2, Chapter 1 (ссылка) представлена на картинке:

Некоторые термины хотелось бы рассмотреть для лучшего понимания:

  • FPGA Fabric - это пользовательская логика

  • tx_datain, rx_dataout - это параллельные данные для передачи/приёма

  • CDR (Clock Data Recovery) - это аппаратный блок, позволяющий выделить тактовую частоту на базе входных последовательных данных. Восстановленная частота используется блоком Deserializer

  • Serializer/Deserializer - аппаратные блоки, которые параллельные данные преобразовывают в последовательные, а так же передают в канал связи и соответственно наоборот

  • TX PLL (отсутствует на схеме) - это аппаратный блок, который на базе опорной частоты генерирует входную частоту для блока Serializer, необходимую для передачи последовательных данных

Схема CDR из документации представлена на следующей картинке:

С общей теорией познакомились, пора переходить в Quartus =)

Создание проекта в Quartus и IP ядра ALTGX

Открываем Quartus. Мы будем использовать 21.1 Lite.

Создаём пустой проект, назовём его например ALTGX_CIV_Sim

Нажимаем "Next ->" и доходим до выбора ПЛИС, используемого в проекте. Можно выбрать любой Cyclone IV GX, мы выберем EP4CGX75DF27C6

И нажимаем Finish. После этого Quartus создаст проект и откроет его.

Заходим в настройки проекта и меню Advanced Fitter Settings. Нам необходимо изменить один параметр, а именно Generate GXB Reconfig MIF из OFF в ON, нам это пригодится в будущем.

Открываем IP Catalog и выбираем IP ядро ALTGX, выбираем путь для сохранения IP ядра, выбираем язык VHDL, нажимаем "ОК" и нам открываются настройки самого IP ядра

Основные настройки, на которые стоит обратить внимание:

  • Количество используемых каналов

  • Ширина шины параллельных данных

  • Скорость передачи данных

  • Опорная частота, которую нам необходимо будет подать

На этой вкладке всё, переходим к вкладке PLL/Ports

Добавим галочки напротив:

  • gxb_powerdown, выключение приёмопередатчиков

  • pll_areset, сброс RX/TX PLL

  • rx_analogreset, сброс аналоговых параметров RX, например RX Adaptive Equalizer

  • rx_digitalreset, сброс цифровых параметров RX, например синхронизатор кодека 8b/10b

  • tx_digitalreset, сброс цифровых параметров RX, например Phase Compensation FIFO

  • pll_locked, сигнал говорит  о том, что PLL заблокировалась на опорной частоте и перешла в рабочее состояние

  • rx_freqlocked, сигнал говорит о том, что RX CDR успешно заблокировался для работы на базе входных данных

Далее переходим к вкладке Reconfiguration Settings

В этой вкладке выбираем:

  • Enable PLL reconfiguration, здесь имеется ввиду TX PLL

  • Enable Channel reconfiguration, то есть RX и TX, это Serializer и Deserializer, RX CDR

Переходим к вкладке Protocol Settigns

На ней необходимо выбрать один параметр - Enable Low Latency PCS Mode, который не будет использовать никакие возможности, кроме как преобразование последовательных данных в параллельные и наоборот.

И переходим к вкладке Summary.

Необходимо добавить только ALTGX_CIV_inst.vhd - это файл генерируется как пример, как мы можем на языке VHDL подключить созданное IP ядро в свой проект.

Нажимаем "Finish" и ждём окончания генерирования всех необходимых файлов.

Динамическая реконфигурация и то, что для неё необходимо

В ПЛИС Intel/Altera у ALTGX есть интерфейс для динамической реконфигурации самих RX, TX и TX PLL. Но для их использования нам необходимо добавить в проект 2 IP ядра с соответствующими названиям:

  • ALTGX_RECONFIG

  • ALTPLL_RECONFIG

Добавим их в проект через IP Catalog

Создание ALTGX_RECONFIG

В ALTGX_RECONFIG на основной вкладке нам необходимо выбрать только Channel Reconfiguration

И перейти на вкладку Channel and TX PLL reconfiguration

Здесь необходимо выбрать параметры:

  • Use 'reconfig_reset', общий сигнал сброса реконфигурации

  • Use 'reconfig_address_en', ядро готово принимать данные

Переходим к вкладке Error checks и выберем следующие параметры:

  • Enable illegal mode checking

  • Enable self recovery

Которые позволят вывести схему из ошибочных состояний и выведут сигнал error при ошибке

Переходим к вкладке Summary, на ней отмечаем *_inst.vhd.

На этом всё, жмём "Finish" и ожидаем окончания генерации необходимых файлов.

Создание ALTPLL_RECONFIG

На вкладке General оставляем всё по-умолчанию, да и выбора особо то нет =)

Переходим к вкладке General 2

На этой вкладке выбираем параметр Add ports to write to the scan chain from external ROM during run time. Он позволит нам записать параметры в TX PLL из памяти, который мы сохраним во внутренней памяти ПЛИС.

Переходим к вкладке Summary. В ней мы выберем *_inst.vhd и нажимаем "Finish" и ждём, пока Quartus генерирует необходимые файлы.

На этом создание необходимых IP ядер закончено.

Теперь мы переходим к компиляции проекта, только после этого мы получим .mif файлы, необходимые для перестройки ALGTX и встроенную в неё TX PLL.

Для этого выберем как Top-level entity название нашего созданного IP ядра ALTGX

После этого запускаем проект на компиляцию и ждём окончания.

После этого в корне каталога у нас появятся два файла:

  • <путь к проекту>/ALTGX_CIV_pll0.mif

  • <путь к проекту>/reconfig_mif/ALTGX_CIV_alt_c3gxb.mif

Переименуем их в ALTGX_CIV_pll_2000mbps.mif и ALTGX_CIV_2000mbps.mif соответственно.

Заходим в настройки созданного IP ядра ALTGX, меняем скорость с 2000mbps на 1000mbps и снова отправляем проект на компиляцию.

Полученный mif файлы переименовываем на ALTGX_CIV_pll_1000mbps.mif и ALTGX_CIV_1000mbps.mif соответственно.

После этого остался один шаг для подготовки нашего проекта к среде симуляции.

Следующий шаг необходим, если вы используете НЕ ModelSim Altera Edition, так как в эту версию встроены все необходимые библиотеки. Однако есть один неприятный нюанс, если вы используете версию Altera Edition, то симуляция идёт ЗНАЧИТЕЛЬНО медленнее.

Выбираем в Quartus запускаем Tools->Launch Simulation Library Compiler

В открывшемся окне выбираем:

  • Среду симуляции - ModelSim

  • Путь к установленному ModelSim

  • Используемый язык описания аппаратуры - VHDL

  • Путь, где будут созданы библиотеки для среды симуляции

Нажимаем "Start Compilation" и ждём окончания. После этого мы наконец-то можем уже закрыть Quartus.

Общая схема использования IP ядер реконфигурации

Если сделать срез о проделанных уже шагах, то получим:

  • Создали новый проект Quartus

  • Cоздали IP ядро ALTGX

  • Cоздали IP ядро ALTGX_RECONFIG

  • Cоздали IP ядро ALTPLL_RECONFIG

  • Скомпилировали проект и получили необходимые .mif файлы

  • Собрали библиотеки, необходимые для симуляции созданных IP ядер

Давайте рассмотрим, как теперь использовать IP ядра реконфигурации

Согласно документации общая схема реконфигурации ALTGX следующая:

Полученные .mif файлы помещаем в ROM память ПЛИС и передаём в IP ядро ALTGX_RECONFIG, которая в свою очередь передаёт в своём формате данные в ALTGX

На следующей картинке эта схема представлена более подробно:

Этот скриншот взят из документации для Stratix IV для большей наглядности. К сожалению в документации на Cyclone IV такой подробной схемы нет (=

Теперь перейдём к IP ядру ALTPLL_RECONFIG и её схеме подключения к IP ядру ALTGX (качество к сожалению хромает в официальной документации)

На этом с теорией всё, пора переходить к практике.

Продолжение в следующей статье: "Симуляция высокоскоростных приёмопередатчиков с динамической реконфигурацией для ПЛИС Intel серии IV. Практика".

P.S. Как обычно вопросы и комментарии приветствуются =)

Tags:
Hubs:
Total votes 4: ↑4 and ↓0+4
Comments0

Articles