...

четверг, 27 октября 2016 г.

Подключение АЦП к ПЛИС. Особенности, сложности, реализация


Всем привет!

В данной статье речь пойдет о подключении микросхем АЦП к кристаллам ПЛИС. Будут рассмотрены основные особенности соединения узлов схем, представлены современные АЦП и их характеристики. В статье будут даны практические советы по быстрому и правильному подключению АЦП к ПЛИС с минимальными временными затратами. Кроме того, речь пойдет о принципах подключения тех или иных АЦП, будет рассмотрен входной буфер ПЛИС и его базовые компоненты – триггеры, узлы задержки IODELAY, сериализаторы ISERDES и т.д. Более детально с примерами программного кода на языке VHDL будет проведен обзор основных элементов, требуемых для качественного приёма данных от АЦП. Это входной буфер, узел упаковки данных для одноканальных и многоканальных систем, модуль синхронизации и передачи данных на базе FIFO, узел программирования АЦП по интерфейсу SPI, узел синтеза частоты данных – MMCM/PLL. Также в статье будет представлен обзор законченных устройств (в стандарте FMC) от ведущих зарубежных и отечественных производителей аналоговых и цифровых схем. В конце статьи вы найдете ссылку на исходные коды универсального узла приёмника данных от многоканальных схем АЦП. Код простой и гибкий в конфигурировании, он представлен на языке VHDL и заточен на микросхемы ПЛИС Xilinx 7 серии и выше, но может быть применен и в других кристаллах ПЛИС.

План статьи


  • АЦП (общий обзор, назначение, элементная база)
  • Примеры законченных АЦП модулей различных фирм производителей
  • Подключение АЦП к ПЛИС. Выбор ПЛИС. Количество контактов, объем логических ресурсов, интерфейс передачи данных
    • Входной буфер ПЛИС. Состав, основные узлы. Назначение
    • Упаковщик данных для одноканальных и многоканальных схем
    • Узел синхронизации данных (FIFO)
    • Управление АЦП по SPI интерфейсу (пример)
    • Внутренняя шина. Подключение ПЛИС к удаленному устройству
  • Исходные коды приёмника данных АЦП
  • Список литературы

Аналого-цифровые преобразователи


АЦП применяются для широкого класса задач радиотехники – в любых устройствах, где требуется преобразовать аналоговый сигнал в цифровую форму. Они могут использоваться в аудио- и видео-системах, применяются в задачах гидроакустики и гидросвязи (низкая частота дискретизации, высокая разрядность данных), в устройствах преобразования радиочастотного диапазона (схемы DDC/DUC), в радиолокации и радионавигации (высокие частоты дискретизации, средняя разрядность данных). АЦП применяются в цифровых вольтметрах и мультиметрах, в платах видеовхода компьютеров, видеокамерах, системах распознавания речи и звуковых устройствах. Быстрые АЦП используются в осциллографах и спектроанализаторах, применяются в лабораторном оборудовании и медицинской технике. Очень часто АЦП используется в задачах сбора и обработки данных на высоких скоростях.

Как видно, микросхемы АЦП – неотъемлемая часть аналого-цифровых устройств. В современном мире очень непросто найти устройство, в котором бы отсутствовали АЦП. Классический вид АЦП представлен на следующем рисунке.

Это упрощенная схема, взятая из даташита на микросхему AD9684. Она содержит два дифференциальных аналоговых входа VINA и VINB, вход тактовой частоты CLK, управление по интерфейсу SPI, выходную шину в параллельной форме D0-D13, точки напряжения питания различных узлов микросхемы, блок синхронизации SYNC и другие управляющие сигналы.

Очевидно, что микросхемы АЦП характеризуется набором определенных параметров, от которых зависит конечный выбор пользователя и который определяет область применения АЦП. По цифровой части – это скорость передачи данных (эффективная тактовая частота), которая может находиться в диапазоне от нескольких десятков кГц до нескольких ГГц. Разрядность данных на выходе АЦП – в современных устройствах от 8 до 32 бит данных. Со стороны аналоговых характеристик – это отношение сигнал-шум (SNR) и динамический диапазон, свободный от паразитных составляющих (SFDR), выражаемые, как правило, в децибелах (типовые уровни SNR лежат в пределах 70-80 дБ, а уровни SFDR в районе 90 дБ). Немаловажными параметрами при выборе АЦП являются – рассеиваемая мощность (Вт), количество каналов в одном корпусе, интерфейс обмена с цифровым узлом и, разумеется, стоимость компонента.

Рассмотрим современные быстродействующие АЦП и их характеристики на примере таблицы, взятой с известного сайта Analog Devices – гиганта в области производства всевозможных микросхем АЦП и ЦАП. В таблицу для удобства сведены самые важные характеристики микросхем, они разделены по типу интерфейса обмена с цифровым устройством и выстроены по скорости передачи информации (тактовой частоте) от большего значения к меньшему.

В таблице представлены 4 топовые микросхемы, передающие данные в параллельной форме по стандарту LVDS. Разрядность данных 14-16, каналов 1-2, максимальная частота дискретизации 500МГц. Средние значения SNR и SFDR – 70 dBFS и 90 dBc, соответственно. Для некоторых микросхем с последовательной шиной передачи данных (Serial) характеристики практически схожие. Для современных микросхем АЦП, которые используют интерфейс передачи JESD204B и подключаются к ПЛИС через гигабитные линии, тактовые частоты значительно выше, но аналоговые характеристики несколько хуже (по меньшей мере из-за того, что разрядность цифровых данных ниже – 12 и 14 бит). В данной статье не будет рассматриваться подключение АЦП к кристаллам FPGA через гигабитные линии. Я остановлюсь на простом и хорошо изученном варианте подключения микросхем – последовательная и параллельная шина с интерфейсами передачи данных типа LVTTL, LVDS, LVCMOS, LVPECL. В частности, интересен способ передачи данных по LVDS шине, который отличается простотой трассировки печатных плат, дешевизной исполнения, низким уровнем помех и рассеиваемой мощности, а также высокой скоростью передачи данных. Для приема данных по последовательной шине в ПЛИС используются сериалайзеры / десериалайзеры. Для параллельной шины все намного проще и данные принимаются как есть.

В ходе работы по сопряжению аналоговых и цифровых устройств мне приходилось осваивать следующие микросхемы АЦП. Это уже устаревшие, но всё еще используемые – AD9224, AD6644ST-65, AD9244, LCT2207, ADS5474, AD9432BST-105, AD7475BR, микросхемы современного уровня – AD9430BSV, ADS54RF, AD9467, ADC12D1800, AD9680 и другие. Поскольку область моей работы лишь частично связана с аналоговой схемотехникой, я вряд ли расскажу вам о способах улучшениях характеристик законченных аналого-цифровых модулей. Также я не смогу дать советы по качественному построению аналоговых трактов и методике выбора тех или иных компонентов схемы для достижения наилучших аналоговых показателей (SNR, SFDR). Но на вопросы подключения АЦП к кристаллам FPGA и дальнейшей обработки данных я постараюсь ответить в рамках данной статьи.

Примеры модулей АЦП


На следующих рисунках будут представлены современные примеры законченных и качественных модулей аналого-цифрового преобразования данных от российских и зарубежных производителей. Все они имеют один или несколько аналоговых входов подключения и разъем-переходник FMC (FPGA Mezzanine Card) для подключения к несущей плате, на которой устанавливается обработчик данных (как правило, это FPGA). FMC – это один из основных стандартов для подключение изделий по модульной архитектуре. На мезонинный модуль (mezzanine board) зачастую устанавливается аналоговая часть, а на несущий модуль (carier board) устанавливается центральное устройство, осуществляющее обработку данных – это одна или несколько ПЛИС и/или сигнальные процессоры. Из зарубежных производителей устройств следует выделить две лидирующие фирмы-производителя – это 4dsp и hitechglobal. Из отечественных производителей гугл в первых строках поиска выдает ЗАО «Скан инжиниринг Телеком», ЗАО «Инструментальные системы» и другие. Автор статьи не несет ответственности за представленные модули и не использует статью в целях рекламы продукта той или иной фирмы.

HTG-ADC16 (hitechglobal.com). Обладает следующими характеристиками (взяты с официального сайта):

  • 16-Bit Resolution, Dual-Chanel, 1-GSPS ADC
  • Noise Floor: –159 dBFS/Hz
  • Spectral Performance (fIN = 170 MHz at –1 dBFS):
    • SNR: 70 dBFS
    • SFDR: 86 dBc
    • SFDR: 96 dBc (Except HD2, HD3, and Interleaving Tones)
  • Spectral Performance (fIN = 350 MHz at –1 dBFS):
    • SNR: 67.5 dBFS
    • NSD: –154.5 dBFS/Hz
    • SFDR: 75 dBc
    • SFDR: 85 dBc (Except HD2, HD3, and Interleaving Tones)
  • Channel Isolation: 100 dBc at fIN = 170 MHz
  • Input Full-Scale: 1.9 VPP
  • Input Bandwidth (3 dB): 700 MHz
  • On-Chip Dither
  • Integrated Wideband DDC Block
  • JESD204B Interface with Subclass 1 Support:
    • 2 Lanes per ADC at 10.0 Gbps
    • 4 Lanes per ADC at 5.0 Gbps
    • Support for Multi-Chip Synchronization
  • Power Dissipation: 1.35 W/ch at 1 GSPS

FMC104: 4-Channel 250 MSPS @ 14-bit (4dsp.com). Характеристики (некоторые удалены за избыточностью информации):

  • Four Channel 14-bit 250 MSPS A/D conversion
  • Available as air cooled and conduction cooled
  • VITA 57.1-2010 compliant
  • Based on TI ADS62P49
  • LVDS or 1.8V LVCMOS output operation
  • Single ended AC- or DC-coupled analog input
  • Flexible clock tree enables
  • LPC (low-pin count) compatible

Особенность модуля – четыре канала АЦП, напряжение питания 1.8В (используются HP-банки FPGA Xilinx).

FMC120: 4-Channel 250 MSPS @ 14-bit (4dsp.com). Характеристики:

  • Quad — A/D — D/A Channel Operation
    • Quad Channels 16-bit 1.00 GSPS A/D
    • Quad Channels 16-bit 1.25 GSPS D/A
    • Simultaneous sampling on all channels up to 1 GSPS
  • VITA 57.1-2010 compliant
  • Conduction Cooled – Standard Option
  • Single ended DC or AC-coupled analog input.
  • Clock Source, Sampling Frequency, and Calibration through an SPI communication bus
  • HPC – High Pin Count Connector
  • 2Kbit EEPROM (24LC02B) accessible from the Host via I2C bus
  • JTAG – CPLD device is included in the JTAG chain accessible from the FMC connection

FMC140: 4-channel 16-bit 370MSPS A/D (4dsp.com). Обладает следующими характеристиками:

  • Four-channel, 16-bit A/D up to 370 MSPS
  • VITA 57.1-2010 compliant
  • JESD204B serial interface
  • AC or DC-coupled analog signals
  • Clock source, sampling frequency, and calibration through SPI communication busses
  • Flexible clock tree enables
  • Power-down modes to switch off unused functions for system power savings
  • HPC — High Pin Count connector

Особенность модуля – 4 высокоскоростных канала АЦП, разрядность данных 16 бит, обмен по интерфейсу JESB204B.

Модуль SFM-4A1000 (setdsp.ru). Характеристики:

  • Четыре канала АЦП: 14 бит 1000 МГц
  • Широкополосный трасформаторный вход с полосой до 2 ГГц
  • Интерфейс с несущим модулем JESD204B
  • Поддержка встроенных в АЦП функций цифровой децимации и АРУ
  • Высокостабильный опорный генератор, вход внешнего опорного тактирования
  • Программное управление настройками АЦП и схемой тактирования
  • Форм-фактор FMC одиночной ширины с воздушным или кондуктивным охлаждением

Особенность модуля – отечественная разработка, 4 высокоскоростных канала АЦП, полоса 2ГГц, обмен по интерфейсу JESB204B.

Модуль FMC212x4GDA (insys.ru). Характеристики:


  • Два канала АЦП 12 бит
  • Частота преобразования: от 1 до 4 GSPS
  • Аналоговая входная полоса: от 5 до 2000 МГц
  • Входное сопротивление: 50 Ом
  • DDC, встроенный в АЦП
  • Максимальная ширина полосы DDC: 800 МГц
  • Коэффициент децимации DDC: от 4 до 32
  • Четыре канала ЦАП 16 бит 2,8 GSPS
  • Интерполяция: х2, х4, х8
  • Частотный диапазон выходных сигналов ЦАП: от 0,5 до 400 МГц
  • Максимальная амплитуда выходного сигнала: ±0,5 В
  • Выходное сопротивление: 50 Ом
  • Синтезатор тактовых частот АЦП и ЦАП с низким фазовым шумом
  • ANSI/VITA 57.1 FMC модуль 69x76,5 мм

Особенность модуля – 2 высокоскоростных канала АЦП, полоса сигнала до 2ГГц, обмен по интерфейсу JESB204B, встроенные микросхемы DDC, 4 канала ЦАП.

Модуль FMC816x250M (insys.ru). Характеристики:

  • ANSI/VITA 57.1 FMC модуль двойной ширины 139x76.5мм
  • 8 АЦП 16 бит
  • Частота преобразования: от 50 МГц до 250 МГц
  • Аналоговая входная полоса 0,1…250МГц
  • Шкалы преобразования: ±0,8В; ±0,65В
  • Входное сопротивление: 50 Ом
  • Внутреннее/внешнее тактирование
  • Перестраиваемый тактовый генератор 10…250МГц

Особенность модуля – 8 каналов АЦП, сдвоенный модуль.

Как видно, многие из модулей аналого-цифрового преобразования в стандарте FMC похожи и обладают практически идентичными характеристиками, которые определяются установленными микросхемами АЦП и ЦАП. Окончательный выбор того или иного модуля определяется задачей, которую требуется решить конечному пользователю.

Подключение АЦП к ПЛИС


Перейдем к основному разделу статьи – подключение микросхем АЦП к кристаллам ПЛИС. Рассмотрим подключение АЦП по параллельной и последовательной шине, с интерфейсами передачи данных – LVTTL, LVCMOS, LVDS. В статье не будет рассмотрено подключение АЦП по интерфейсу JESD204B, поскольку это материал отдельной темы, который займет не одну полноценную статью. Кроме того, JESD204B существенно отличается в реализации от «классических» вариантов подключения микросхем АЦП и требует более детального рассмотрения.

Как известно, банки (группы пинов) ввода/вывода ПЛИС могут конфигурироваться на различное напряжение питания, границы которого определяются производителем кристаллов. В современных ПЛИС типа Xilinx диапазон подаваемых напряжений зависит от типа банка. Существует два основных типа банка (Xilinx) – HP (высокопроизводительные) и HR (банки с большим числом пинов). Например, в микросхемах 7 серии Xilinx диапазон напряжений для банков HR – от 1.2 до 3.3В, а для банков HP – от 1.2 до 1.8В. Помимо этого, пины банков могут программироваться на широкий диапазон стандартных интерфейсов передачи данных, но конечный выбор стандарта определяется двумя правилами: напряжение питания банка ПЛИС и способ подключения удаленного устройства и ПЛИС. С другой стороны, немаловажным фактором выбора напряжения питания банка ПЛИС является семейство кристаллов. Так, для Kintex-7 возможно использовать стандарт LVDS 25 и питать банк напряжением 2.5В, а для многих микросхем ПЛИС Virtex-7 стандарт подключения исключительно LVDS 18, и банк запитывается напряжением 1.8В. В связи с этим, возникает проблема сопряжения некоторых аналоговых модулей и несущих плат с разными семействами ПЛИС. Поэтому при покупке у стороннего производителя модуля АЦП и/или несущей платы нужно убедиться, что они совместимы по стандарту и напряжению питания. Как правило, интерфейс передачи данных прописывается в файле ограничений (UCF или XDC), а не в исходных кодах проекта, что обеспечивает гибкость конфигурации и повторное использование файлов исходных кодов в других проектах.

Структурная схема файла верхнего уровня проекта (а также внутренних блоков, используемых для приёма данных от микросхем АЦП по стандарту LVTTL / LVCMOS / LVDS) представлена на следующем рисунке.

Она включает следующие элементы:

  • Входной приемник
  • Упаковщик данных
  • Синхронизатор потока данных (FIFO)
  • Блок управления микросхемами АЦП

Помимо этих узлов, на верхнем уровне используется модуль синтеза частоты на основе MMCM – стандартный ресурс ПЛИС. Также для управления задержками в узлах IODELAY применяется компонент IDELAYCTRL.

Основные параметры файла верхнего уровня, от которых зависит конфигурация схемы в ПЛИС:

  • NCHAN — количество независимых каналов АЦП,
  • DATA_WIDTH — разрядность данных АЦП,
  • FIFO_ADDR — глубина FIFO: DEPTH = 2**ADDR,
  • DATA_RATE — режим приёма данных: SDR / DDR,
  • PACK_OUT — ширина выходной шины упаковщика (системная шина),
  • CLK_SEL — выбор основного источника тактовой частоты для многоканальной схемы,
  • USE_MMCM — использование узла MMCM вместо BUFR для деления частоты CLKDIV на SERDES,
  • DIFF_TERM — использование дифференциальных входных сигналов (TRUE/FALSE),
  • IOSTANDARD — стандарт напряжения для LVDS линий,
  • DATA_IOBDELAY_TYPE — режим работы узла задержки IODELAY,
  • DATA_IOBDELAY_VALUE — значение задержки по умолчанию,
  • DIFF_CLOCK — использование дифференциального тактового сигнала на входе (TRUE/FALSE),
  • OVR_PRES — использование линий переполнения АЦП (overflow),
  • STR_PRES — использование линий сигнала внешнего старта АЦП (start),
  • RESYNC_OUT — включение механизма первичной пересинхронизации данных на входном буфере (YES/NO).
и некоторые другие параметры.

Часть код файла верхнего уровня приёмника АЦП выглядит примерно следующим образом:

xFIFO: CTRL_FIFO_CONFIG 
  generic map (
    DATA_WIDTH => PACK_OUT,
    ADDR_WIDTH => FIFO_ADDR
  )
  port map (
    reset   => reset,       
    wr_clk  => clk_pack,     
    rd_clk  => sys_clk,
    data_i  => do_pack,
    data_o  => do_fifo,
    rd_en   => cs_fifo,
    wr_en   => dv_pack,      
    empty   => ef_fifo,
    full    => ff_fifo
);


Здесь подключается узел FIFO для синхронизации данных с системной шиной устройства. Программирование задержек для IODELAY в многоканальной и многоразрядной схеме буфера выглядит следующим образом:
---- Data delays ----
x_dat_dd <= x_dat_do(conv_integer(unsigned(dl_chan))) when rising_edge(dl_clk);      
x_dat_in(conv_integer(unsigned(dl_chan)))(conv_integer(unsigned(dl_muxs)))  <= dl_dat_in when rising_edge(dl_clk);           
x_dat_ce(conv_integer(unsigned(dl_chan)))(conv_integer(unsigned(dl_muxs)))  <= dl_dat_ce when rising_edge(dl_clk);   
x_dat_ld(conv_integer(unsigned(dl_chan)))(conv_integer(unsigned(dl_muxs)))  <= dl_dat_ld when rising_edge(dl_clk);


Где dl_chan — выбранный канал АЦП, dl_muxs — выбранный разряд АЦП. Это сделано для независимого программирования каждого бита данных.

Рассмотрим каждый узел детально.

Замечание: для подключения ПЛИС и ЦАП (цифро-аналоговых преобразователей) ситуация зеркальна. Необходимо сделать все тоже самое, но в обратном порядке. В рамках данной статьи подключение ПЛИС к ЦАП не рассматривается.

Входной приемник


Содержит первичные элементы подключения между внешними сигналами печатной платы и логикой ПЛИС. Это буфер IPAD от контакта ПЛИС к логике входного буфера IOBUF. В зависимости от интерфейса передачи данных буфер может быть дифференциальный – IBUFDS и однополярный – IBUF. Для многих буферов возможна жесткая привязка к требуемому стандарту, либо возможна установка типа выходного сигнала через атрибуты. Например, для IBUFDS с помощью атрибута IOSTANDARD можно заранее в исходных кодах определить и задать стандарт «LVDS_25».

Следом за буфером устанавливается узел регулирования задержки прохождения сигнала IODELAY для выравнивания фронтов параллельной шины данных и первичного согласования многоканальных узлов подключения АЦП к ПЛИС. IODELAY – программируемый ресурс ПЛИС, величина задержки может быть фиксирована и определяться установкой по умолчанию, либо программироваться в диапазоне от 0 до 31 условных величин времени (цифра определяется даташитом на микросхему ПЛИС). Программирование осуществляется примитивным образом с помощью нескольких сигналов. Останавливаться на детальном разборе алгоритма программирования не будем, за дополнительной информацией можно обратиться к документу из списка литературы в конце статьи. Для узлов IODELAY необходимо подключать специальный узел контроля задержек IDELAYCTRL, который в режиме реального времени калибрует задержки для каждого тактового региона ПЛИС. Для устранения влияния температуры кристалла, напряжения питания и загруженности ПЛИС, узел IDELAYCTRL тактируется независимым сигналом REFCLK. Этот тактовый сигнал обеспечивает равную величину задержки (TAP) во всех узлах IODELAY каждого тактового региона ПЛИС. Если в каждом тактовом регионе необходимы свои величины подстройки – в кристалле ПЛИС инициализируются несколько узлов IDELAYCTRL. Тактовый сигнал REFCLK может подаваться с внешнего генератора, установленного вне ПЛИС, либо может быть получен путем синтеза частоты в узле MMCM кристалла ПЛИС.

Следом за узлом задержки IODELAY возможна установка FD триггера, если режим передачи данных DATA_RATE = «SDR». Этот триггер опционально помещается во входной буфер и тактируется частотой АЦП, сопровождающей данные с аналогового модуля. В режиме DATA_RATE = «DDR» триггер заменяется на усложненный вариант IDDR, который имеет один вход данных и два выхода. С выхода возможна выдача данных в нескольких режимах, но на практике я использовал только один – это «SAME_EDGE_PIPELINED», при котором данные с выхода Q1 и Q2 выдаются по одному и тому же фронту тактового сигнала.

Ну и наконец, самый интересный вариант – это подключение узла IODELAY к модулю десериализации данных ISERDES. Узел сериалайзера – сложный элемент входного буфера ПЛИС, он содержит следующие опции:

  • DATA_RATE – определяет режим выходных данных (SDR/DDR),
  • DATA_WIDTH – определяет разрядность шины данных на выходе узла (от 1 до 8),
  • INTERFACE_TYPE – тип интерфейса передачи данных. Для подключения микросхем АЦП используется режим «NETWORKING».
  • SERDES_MODE – режим подключения ISERDES в случае использования нескольких сериалайзеров для приема данных от одного контакта ПЛИС.

Тактирование узла осуществляется несколькими сигналами – это сигнал на высокой частоте принимаемых данных CLK и сигнал CLKDIV, деленный на число, определяемое параметром DATA_WIDTH. Деление может происходить вне ПЛИС, но на практике используются синтезаторы частоты в самом кристалле ПЛИС, которые носят название MMCM. Таким образом, на вход узла ISERDES поступает последовательный сигнал на частоте CLK, а на выходе узла ISERDES получается параллельный поток данных на сниженной частоте CLKDIV = CLK / DATA_WIDTH. Тактовую частоту можно поделить с помощью регионального буфера BUFR, значение коэффициента деления BUFR_DIVIDE = 1-8, или на узле синтезатора частоты MMCM, программируемого в широком диапазоне.

Для устранения эффекта совпадения фронта тактовой частоты и данных не всегда хватает узлов IODELAY и подстройки частоты в MMCM. Зачастую приходится искать альтернативные пути решения этой проблемы. К счастью, это решение было найдено моим коллегой, о чем он недавно рассказал в своей статье (Полезные свойства джиттера).

Все перечисленные выше узлы (за исключением MMCM) входят в состав входного буфера ПЛИС и не занимают логических ресурсов кристалла. С выхода FD / IDDR / ISERDES данные поступают уже на логические элементы – это триггер или FIFO небольшого размера для первичной пересинхронизации данных на частоту, полученную после прохождения частоты дискретизации АЦП в узле MMCM. В некоторых случаях пересинхронизация не используется, а данные синхронизируются напрямую частотой дискретизации АЦП. На следующем рисунке приведена временная диаграмма обработки последовательных данных с микросхемы АЦП на устройстве ISERDES. Показана входная тактовая частота, последовательная форма входных данных и преобразованные данные в параллельный код.

Таким образом, в зависимости от конфигурации, во входном буфере возможно три пути прохождения сигнала, как показано на рисунке:

A) режим SDR — данные принимаются по параллельной шине, для каждого бита данных используется свой буфер ПЛИС,
B) режим DDR — данные принимаются по параллельной шине, данные тактируются удвоенной частотой.
C) режим SERDES — данные принимаются по последовательной шине

Упаковщик данных


Этот узел используется в одноканальных и многоканальных схемах приема данных от АЦП. Основное его назначение – упаковать данные в удобный формат внутренней шины, используемый внутри ПЛИС. Разрядность внутренней шины определяется разработчиком или корпоративным стандартом. Типовые значения разрядности на выходе упаковщика – 32, 64, 128, 256, 512 бит данных. В некоторых случаях упаковщик не может быть сконфигурирован. Это зависит от количества входных каналов, разрядности входной и выходной шины данных упаковщика. Например, для четырехканального источника с разрядностью входных данных = 16 бит невозможно организовать перепаковщик с выходной шиной разрядностью менее WOUT = WIN * NCHAN = 16 * 4 = 64 бит. Для одноканального источника данных с той же разрядностью на входе и выходе данные будут последовательно упакованы пачками по 16 бит в разрядную сетки 64 бита. То есть первый отсчет АЦП займет битовое поле [15:0], второй отсчет – [31:16], третий – [47:32], а четвертый – [63:48]. Далее отсчеты циклически будут занимать битовые поля от младшего к старшему в выходной сетке данных. Другой пример. Используется 2 канала данных, разрядности на входе и выходе остаются те же самые – 16 и 64 бит соответственно. Если система сбора данных на удаленном устройстве включает только один канал, то упаковка происходит, как показано в примере выше, причем неважно, какой из каналов включен. Если система сбора включает оба канала, то данные упаковываются попарно от младшей части разрядной сетки к старшей. Первый отсчет первого канала займет позицию [15:0], первый отсчет второго канала займет позицию [31:16], второй отсчет первого канала – [47:32], второй отсчет второго канала – [63:48]. Как показала практика, это самый удобный вариант упаковки данных при многоканальной обработке, в случае отключения тех или иных каналов передачи. Замечание: количество каналов должно быть кратно степени двойки – 1, 2, 4, 8 и т.д. Может показаться, что этот узел – сложный в реализации и понимании, но после нескольких применений в своих проектах вы найдете для себя, что ничего сложного и необычного здесь нет.

На следующем рисунке приведены временные диаграммы работы узла упаковщика данных в режиме: NCHAN = 1, WIN = 8, WOUT = 32.

Красными линиями показан процесс упаковки данных на выходную шину, которая сопровождается сигналом разрешения DVAL = 1 после приёма 4 отсчетов данных.

Синхронизатор потока данных


Этот узел строится на базе примитивной схемы FIFO и имеет одно важное и простое назначение – преобразование потока данных с частоты дискретизации CLK_ADC на частоту обработки или частоту работы внутренней шины устройства SYS_CLK (системная тактовая частота). Для простоты можно создать узел FIFO в Xilinx Core Generator, но в идеале лучше написать свой модуль, который будет гибок в конфигурации на произвольную ширину шины (FIFO_WIDTH) и глубину памяти (FIFO_DEPTH). На следующем рисунке приведены временные диаграммы работы узла FIFO, показаны входные и выходные данные, а также флаги пустого (empty) и полного (full) FIFO. Следует отметить, что для нормальной работы FIFO АЦП флаг заполненности FULL должен быть всегда равен 0, что говорит о правильности принятия данных от АЦП и отсутствии переполнения. Если флаг FULL = 1, то скорость приема данных удаленным обработчиком недостаточна, либо скорость работы АЦП слишком велика для выбранной системы.

На следующем рисунке изображено схематическое представление узла FIFO в среде Plan Ahead.

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

Внутренняя шина


Возникает вопрос — а куда дальше идут собранные и упакованные данные? Ответ прост: с помощью интерфейсов PCI / PCIe, USB, Ethernet, SRIO, SATA данные достигают конечной цели, где проходят последующую обработку и где осуществляется сбор всей информации. До этого звена внутри ПЛИС может находиться узел цифровой обработки сигналов (DSP), например — DDC, DUC, FFT / IFFT и т. д. Кроме того, данные могут буферизироваться на внешней памяти большого объема, типа DDR3 / DDR4. Это частый приём, который применяется для обработки большого потока информации на высоких скоростях. В данном случае внешняя память имитирует FIFO большого размера. Для соединения ПЛИС с внешней памятью применяются специальные контроллеры, которые, как правило, доступны и открыты для использования. В случае Xilinx они находятся в IP Core Generator.

Помимо прочего, разработчику необходимо создать собственный конечный автомат управления всеми ресурсами приёмника АЦП: это конфигурация задержек в IODELAY, программирование синтезатора частоты MMCM, передача команд по SPI на АЦП и ЦАП модули, управление началом и концом сбора данных с АЦП, управление количеством активных каналов, использование внешней памяти DDR и многое другое. У всех это своя уникальная архитектура, но базовые принципы остаются одинаковыми. На фирме, в которой я работаю, используются узлы управления под названием "тетрады". Подробно о них рассказывал мой коллега здесь.

Управление модулем АЦП


Как правило, управление аналоговым модулем осуществляется через SPI-подобные интерфейсы. Реализовать SPI-интерфейс под силу любому студенту старшего курса, в программе которого есть изучение программируемой логики и ПЛИС. Заострять внимание на узле SPI я не буду. В конце статьи в качестве примера приведен исходный код управления удаленной микросхемой HI-6131, которая обрабатывает сообщения в формате MIL-STD-1553. Код не параметризируемый и заточен конкретно на выбранную микросхему. Для разминки вы можете написать свой узел SPI, который будет конфигурироваться на разные параметры. Временная диаграмма управления по SPI-интерфейсу имеет следующий вид:

Исходный код


Исходный код всех компонентов и узлов представлен на языке VHDL и предназначен для микросхем FPGA Xilinx 7 серии (и выше). Исходные коды открыты для использования и доступны по ссылке на гитхабе — см. здесь. Все компоненты по возможности сделаны гибкими в конфигурации и не требуют существенного вмешательства в исходный код (за исключением узла SPI — простите, было лень). К сожалению, невозможно подстроиться под все существующие решения, но данный пример успешно отработал для всех аналоговых модулей, с которыми я работал.

Например, операции чтения и записи в FIFO, а также подключение узлов преобразования двоичного кода в код Грея выглядит следующим образом:

FIFO R/W
---- Read data ----
pr_rd: process(rd_clk) begin
  if (rising_edge(rd_clk)) then
    if (rd_en = '1' and xempty = '0') then
      data_o <= Mem(conv_integer(pNextWordToRead));
    end if;
  end if;
end process;
        
---- Write data ----
pr_wr: process (wr_clk) begin
  if (rising_edge(wr_clk)) then
    if (wr_en = '1' and xfull = '0') then
      Mem(conv_integer(pNextWordToWrite)) <= data_i;
    end if;
  end if;
end process;

---- Gray counters ----
xGray_WR : rtl_gray_count
  generic map ( COUNTER_WIDTH => ADDR_WIDTH )
  port map (
    cnt => pNextWordToWrite,
    ena => NextWriteAddressEn,
    rst => reset,
    clk => wr_clk
  );
   
xGray_RD : rtl_gray_count
  generic map ( COUNTER_WIDTH => ADDR_WIDTH )        
  port map (
    cnt => pNextWordToRead,
    ena => NextReadAddressEn,
    rst => reset,
    clk => rd_clk
  );



Список литературы


  • 7 Series FPGAs Overview (DS180) (xilinx.com)
  • Xilinx 7 Series Libraries Guide for Schematic Designs (xilinx.com)
  • 7 Series FPGAs SelectIO Resources User Guide (UG471) (xilinx.com)
  • 7 Series FPGAs Clocking Resources User Guide (UG472) (xilinx.com)
  • Serial LVDS High-Speed ADC Interface (xilinx.com)
  • Analog for Xilinx ® FPGAs Selection Guide (ti.com)
  • HSC-ADC-FPGA High Speed Deserialization (analog.com)
  • Interfacing Analog to Digital Converters to FPGAs (latticesemi.com)
и т.д.

Продолжение следует...

Комментарии (0)

    Let's block ads! (Why?)

    Комментариев нет:

    Отправить комментарий