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


Всім привіт!

У даній статті мова піде про підключення мікросхем АЦП до кристалам ПЛІС. Будуть розглянуті основні особливості з'єднання вузлів схем, представлені сучасні АЦП і їх характеристики. У статті будуть надані практичні поради по швидкому і правильному підключення АЦП до ПЛІС з мінімальними тимчасовими витратами. Крім того, мова піде про засади підключення тих чи інших АЦП, буде розглянуто вхідний буфер ПЛІС та його базові компоненти – тригери, вузли затримки 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.8 V LVCMOS output operation
  • Single ended AC — or DC-coupled analog input
  • Flexible clock tree enables
  • LPC (low-pin count) compatible
Особливість модуля – чотири канали АЦП, напруга живлення 1.8 В (використовуються HP-банки Xilinx FPGA).

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 або 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 = ALT * 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 / Pci, 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 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.