Table of Contents

Введение в высокоскоростной дизайн последовательного интерфейса в VHDL

Современные цифровые системы полагаются на высокоскоростные последовательные протоколы для быстрого перемещения данных между компонентами, периферийными устройствами и сетями. Такие протоколы, как PCI Express (PCIe), Ethernet и USB, определяют физические и линк-слойные требования для передачи от нескольких гигабит до более ста гигабит в секунду. Проектирование этих интерфейсов в VHDL требует глубокого понимания как цифрового логического проектирования, так и конкретных стандартов протокола. Инженеры должны управлять целостностью сигнала, пересечением часовых доменов, схемами кодирования и обработкой ошибок в реальном времени, обеспечивая при этом синтезируемость окончательной реализации для целей FPGA или ASIC.

В этой статье представлено всеобъемлющее руководство по проектированию высокоскоростных последовательных интерфейсов в VHDL, ориентированное на PCIe, Ethernet и USB. Темы включают в себя основы протокола, проблемы проектирования, ключевые методы VHDL и стратегии проверки. Каждый протокол рассматривается индивидуально с практическим руководством по реализации.

Основные принципы высокоскоростных последовательных протоколов

Почему сериалы параллельны?

Высокоскоростные последовательные линии заменяют старые параллельные шины, поскольку они уменьшают количество штифтов, потребляют меньше площади платы и работают на более высоких частотах, не страдая от проблем с перекосами. Данные передаются в виде дифференциальных пар (например, PCIe TX/RX) по одной или нескольким полосам. Поток последовательных данных включает встроенную тактовую обработку, которая требует, чтобы приемник восстанавливал часы от входящих переходов.

Общее кодирование и скремблирование

Для поддержания баланса постоянного тока и обеспечения достаточных переходов для восстановления часов последовательные протоколы используют схемы линейного кодирования:

  • 8b/10b кодирование — Используется Gigabit Ethernet, PCIe Gen1/2 и USB 3.x. Каждый 8-битный байт данных отображается на 10-битный символ, гарантируя максимальную длину пробега 5 и не более 4 последовательных однобитных.
  • 128b/130b кодирование — Используется PCIe Gen3/4/5 и 100GbE. Скремблер рандомизирует поток данных, и для синхронизации добавляются только 2 бита накладных расходов на 128 бит данных.
  • 64b/66b и 64b/67b — распространены в вариантах 10GbE и 25GbE, с синхронизированными заголовками, которые поддерживают выравнивание.

В VHDL логика кодирования/декодирования должна быть синтезирована в виде комбинационных или трубопроводных блоков, часто используя таблицы поиска для 8b/10b и линейные регистры сдвига обратной связи (LFSR) для скремблирования.

Связь обучения и государственных машин

Перед началом высокоскоростной передачи данных последовательные ссылки выполняют обучение ссылкам для согласования скорости, полярности полосы и выравнивания. PCIe, например, имеет Link Training and Status State Machine (LTSSM) с такими состояниями, как обнаружение, опрос, конфигурация, восстановление, L0 (активный) и L1/L2 (низкая мощность). Ethernet PHYs используют автопереговоры для рекламы возможностей. VHDL дизайнеры должны реализовать эти машины состояния с тщательной логикой времени и восстановления ошибок.

Вызовы в VHDL для высокоскоростных интерфейсов

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

Пересечение часовых доменов (CDC) и синхронизация

Большинство высокоскоростных интерфейсов имеют несколько тактовых доменов: часы данных, восстановленные из последовательного потока, системные часы и, возможно, переадресованные часы для каждой полосы. Пересечение данных из асинхронных доменов должно проходить через синхронизаторы (два или три флип-флопса) или механизмы рукопожатия. Использование двухчасовых FIFO (FLT: 1) является рекомендуемым подходом для передачи многобитных слов между тактовыми доменами. библиотеки VHDL, такие как Xilinx XPM или Altera DCFIFO, обеспечивают надежные компоненты.

Метастабильность

Когда сигнал изменяется вблизи кромки часов, захватный флип-флоп может войти в метастабильное состояние. При высоких скоростях передачи данных и множественных часовых доменах метастабильность становится проблемой надежности. Реализовать надлежащие цепочки синхронизации и вычислить среднее время между сбоями (MTBF). Большинство инструментов поставщика FPGA предоставляют отчеты о синхронизаторе MTBF.

Стандарты целостности сигналов и I/O

VHDL не управляет непосредственно целостностью аналогового сигнала, но конструкция должна правильно взаимодействовать с приемопередатчиками (например, Xilinx GTY или Intel Transceiver). Цифровая логика должна соответствовать временным ограничениям для параллельного бокового интерфейса приемопередатчика (например, интерфейс PCS-PMA). Моделирование предварительного и после-выкладки с использованием моделей IBIS-AMI может проверять качество сигнала.

Обработка ошибок в реальном времени

Серийные ссылки подвержены битовым ошибкам из-за несоответствия шума, перекрестного разговора или импеданса. Протоколы включают обнаружение ошибок (CRC, контрольная сумма) и ретрансляцию (например, ACK / Nak) уровня передачи данных PCIe. Внедряйте их в VHDL в качестве конвейерных генераторов CRC или шашек и государственных машин для логики повторного использования.

Ключевые технологии VHDL для высокоскоростных серий

Пипелинирование и ретиминг

Комбинационные пути длиннее нескольких шлюзов вызывают нарушения синхронизации на высоких тактовых частотах. Разорвать критические пути с дополнительными этапами трубопровода. Разработчики VHDL должны вручную прокладывать пути передачи данных, особенно для кодирования/декодирования, вычислений CRC и указателей FIFO. Используйте атрибуты синтеза для предотвращения логической реструктуризации, которая перемещает регистры.

Использование IP-адреса поставщика

Логика низкоуровневого приемопередатчика (сериализатор, десериализатор, восстановление часов) не реализована непосредственно в VHDL для большинства FPGA. Вместо этого дизайнеры инстанцируют предоставленные поставщиком IP-ядра (например, Xilinx GT Wizard, Intel Transceiver Toolkit). Код VHDL обертывает этот IP и добавляет машины состояния, специфичные для протокола, и логику пути передачи данных. Всегда изучайте руководство пользователя приемопередатчика, чтобы понять требования к времени интерфейса и сбросу.

Модульный дизайн с пакетами и компонентами

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

  • Обертка SerDes — Абстракция над приемопередатчиком, обработка 8b/10b или интеграция скремблера.
  • Свяжитесь с машиной состояния — протокол-специфический (например, автопереговоры Ethernet, PCIe LTSSM).
  • CRC движок — Параметризуемый для различных полиномов (CRC-32 для Ethernet, CRC-16 для USB, CRC-32C для PCIe).
  • FIFO — Конфигурируемые глубина, тип и часовые домены.

Используйте VHDL-2008 для многополосных конструкций.

Синтез атрибутов и ограничений

Установите надлежащие временные ограничения для каждого часового домена (задержки ввода/вывода, группы часов). Используйте атрибуты синтеза, такие как , и , чтобы сохранить критические пути синхронизации. Для Xilinx примените к синхронизатору флип-флопс.

Внедрение PCI Express в VHDL

Обзор архитектуры PCIe

PCIe следует многоуровневой архитектуре: физический слой, уровень связи данных и уровень транзакции. Физический слой далее подразделяется на логический (PCS) и электрический (PMA). Большинство работ VHDL фокусируется на уровне связи данных и уровне транзакции, поскольку физический слой обычно обрабатывается закаленными приемопередатчиками и PHY IP в FPGA.

Ключевые компоненты VHDL для PCIe

  • Управление полосами движения — Для многополосных конструкций (x1, x2, x4, x8, x16) реализуйте перполосное партеу и выравнивание символов. Используйте детекторы шаблонов для обучающих последовательностей (TS1/TS2).
  • Link Training State Machine (LTSSM) — Внедрить 12-состоятельную машину, определенную в спецификации базы PCIe. Каждое состояние имеет конкретные таймеры и счетчики. В VHDL используйте перечисленные типы для состояний и процесса, чувствительного к восстановленным часам.
  • Слой передачи данных — отвечает за отслеживание порядковых номеров, генерацию CRC-32c и протокол ACK/NAK. Внедряйте буфер повторных попыток, который хранит передаваемые пакеты до тех пор, пока они не будут признаны.
  • Слой транзакций — Собирает память, I/O, конфигурацию и TLP сообщений (пакеты уровня транзакций). Генерация заголовков и парсинг, плюс управление потоком с помощью кредитов.

Практический пример VHDL Snippet

-- Simplified LTSSM implementation (partial)
type ltssm_state is (DETECT, POLLING, CONFIGURATION, L0, ...);
signal current_state, next_state : ltssm_state;
process(clk, rst)
begin
 if rst = '1' then
 current_state <= DETECT;
 elsif rising_edge(clk) then
 current_state <= next_state;
 end if;
end process;

Примечание: Real LTSSM включает таймеры, такие как PollingActive и ConfigurationComplete. Используйте счетчики, приводимые в действие стабильными опорными часами.

Проверка PCIe Core

Поскольку PCIe сложен, рассмотрите возможность использования среды проверки интеллектуальной собственности (VIP) или коммерческого моделирования. VHDL-тестбенчи могут генерировать последовательности TLP и проверять ответы. Используйте интегрированный блок PCIe Xilinx для фактической связи; ваш дизайн VHDL подключается к интерфейсу жесткого IP (например, AXI4-Stream). Для получения более подробной информации см. Xilinx PG195 PCIe DMA Guide .

Внедрение Ethernet в VHDL

Слои протоколов Ethernet

Из модели OSI Ethernet охватывает физический уровень (PHY) и уровень передачи данных (MAC). В конструкциях VHDL MAC (контроллер доступа к среде) обычно является основным компонентом, взаимодействующим с внешним PHY через шину MII, GMII, RGMII или SGMII. Для высоких скоростей (1 Гбит/с и выше) дизайнеры используют последовательные приемопередатчики со встроенными SERDES.

Ключевые компоненты VHDL для Ethernet

  • MAC Core — Внедряет протокол CSMA/CD (или полнодуплексный) , определение рамки, генерация преамбулы, CRC-32 check/append.
  • PHY Интерфейс — Для 1GbE реализуйте GMII или SGMII-машину, которая отправляет 8 бит данных с управляющими сигналами. Для 10GbE используйте XGMII (32-битный путь передачи данных) или последовательный интерфейс.
  • Буфер пакетов — ОЗУ с двумя портами, которая хранит входящие / исходящие кадры, обрабатывая перелив и отток.
  • Авто-переговоры — При проектировании интерфейса управления PHY (например, MDIO) реализуйте машину состояния авто-переговоров для рекламы возможностей.

Ethernet над последовательными приемопередатчиками

Для 1GbE SGMII или 10GbE код VHDL должен управлять выравниванием последовательной линии и связыванием полосы. Используйте фиксированный режим PCS приемопередатчика (например, 8b/10b для SGMII) или настройте приемопередатчик в качестве сырой последовательной коробки передач. Общий подход заключается в том, чтобы инстанцировать IP-адрес поставщика для MAC и PHY и обернуть его в VHDL для управления и DMA.

Пример: Осуществление CRC-32

Создайте CRC-32 для Ethernet-кадров.

-- CRC-32 macro (IEEE 802.3 polynomial)
signal data_in : std_logic_vector(7 downto 0);
signal crc_out : std_logic_vector(31 downto 0);
...
crc_engine : entity work.crc32
 generic map (DATA_WIDTH => 8, CRC_WIDTH => 32)
 port map (clk, rst, data_valid, data_in, crc_out);

Внешний ресурс

См. IEEE 802.3 Ethernet Working Group для спецификаций, и Xilinx XAPP1082 для 1Gb/10Gb Ethernet руководства по проектированию.

Использование USB в VHDL

Обзор USB

USB 3.0 и 3.1 используют двухконтурную архитектуру: устаревший путь USB 2.0 (на основе дифференциальной пары, 480 Мбит/с) и путь сверхскоростной (с использованием кодирования 8b/10b, до 10 Гбит/с). Для дизайна VHDL сосредоточьтесь на физическом и линк-слое сверхскоростной скорости, если ориентируетесь на высокую скорость. Спецификация USB определяет архитектуру, аналогичную PCIe: физические, линковые и протокольные слои.

Ключевые компоненты VHDL для USB 3.x SuperSpeed

  • Link Layer State Machine — Обработка инициализации ссылок, управления питанием и восстановления ошибок. Государства включают (например, Polling, U0 (активный), U1/U2/U3 (низкая мощность)).
  • 8b/10b Encoder/Decoder — Для USB 3.0. Используйте таблицу поиска VHDL или синтезируемый ПЗУ.
  • Lane Deskewing — SuperSpeed использует 1 полосу движения в направлении. Ему по-прежнему требуется выравнивание символов на основе символов COM (comma).
  • Packet Framing — пакеты USB состоят из заголовка (HP), пакета данных (DP) и команды ссылок (LC). Внедрить машину состояния, которая распознает последовательности кадрирования (например, наборы упорядоченных SKP).
  • Link Command Decoder — Обработка команд, таких как TS1, TS2 (обучение) и SKP (пропуск) для сопоставления ставок.

USB контроллер устройства

Для USB-устройства конструкция VHDL должна реализовывать конечные точки: контрольную конечную точку (EP0) для настройки/статуса, объемной, прерываемой и изохронной конечных точек. Слой протокола обрабатывает запросы транзакций и протокол переключения данных. Это часто сочетается с микроконтроллером или двигателем DMA. Многие конструкции FPGA используют встроенный процессор с мягким ядром (например, MicroBlaze), работающий с прошивкой для обработки конфигурации устройства USB.

Внешний ресурс

Официальные спецификации USB 3.1 являются существенными. Для руководящих принципов реализации, специфичных для VHDL, см. Intel AN 141: USB 3.0 PHY Design .

Стратегии верификации и моделирования

Архитектура Testench

Создавайте тест-системы VHDL, которые управляют интерфейсом с реалистичными последовательностями протоколов. Для PCIe генерируйте выровненные тренировочные последовательности и проверяйте переходы состояния линии связи. Для Ethernet отправляйте действительные и недействительные кадры, проверяйте CRC и проверяйте обработку столкновений (полудуплекс). Для USB, выполняйте команды линии связи и состояние машины управления питанием.

Модели, Vivado Simulator или VCS

Моделирование полной конструкции, включая модели IP поставщика. Используйте направленные тесты, затем случайные ограниченные тесты для покрытия краевых случаев. Для PCIe рассмотрите возможность использования IP-проверки (VIP), который обеспечивает мониторинг и подсчет баллов. Для Ethernet модель приемопередатчика обычно включает в себя дрожание часов и распространение сигнала.

Сроки закрытия и постсинтезное моделирование

После синтеза запустите моделирование после маршрута с задними аннотированными задержками для проверки времени установки / удержания и времени срабатывания. Используйте статический анализ времени инструментов поставщика, чтобы убедиться, что конструкция соответствует требуемой частоте (например, 125 МГц для RGMII, 250 МГц для XGMII).

Прототипирование и проверка оборудования FPGA

Выбор FPGA Board

Для высокоскоростных последовательных интерфейсов выберите плату с соответствующей поддержкой приемопередатчика. Xilinx Kintex-7/Ultrascale+ или Intel Arria 10/Stratix 10 предлагают высокоскоростные приемопередатчики GTP/GTY/GTG. Убедитесь, что на плате есть правильные разъемы: слот PCIe, клетка SFP+ (для Ethernet) или разъем USB 3.0.

Методы отладки

Используйте интегрированные логические анализаторы (Xilinx ILA, Intel Signal Tap) для зондирования внутренних состояний. Поскольку последовательные ссылки быстры, захватывайте данные на параллельной стороне приемопередатчика. Для PCIe используйте анализатор PCIe (например, Teledyne LeCroy) для проверки соответствия. Для Ethernet используйте сетевой анализатор для проверки целостности кадра.

Общие подводные камни

  • Неправильная последовательность сброса: приемопередатчики часто требуют определенной последовательности включения и сброса. Следуйте рекомендациям поставщика.
  • Часы: восстановленные часы должны быть маршрутизированы как глобальные часы. Используйте правильные плитки управления часами (MMCM, PLL).
  • Переполнение FIFO: Убедитесь, что логика пользователя может потреблять данные достаточно быстро. Внедрите механизмы обратного давления (например, пакеты XOFF).

Заключение

Проектирование высокоскоростных последовательных интерфейсов в VHDL для PCIe, Ethernet и USB является сложной, но глубоко полезной задачей. Успех требует основательного заземления в спецификациях протокола, тщательных практик кодирования VHDL для управления часовыми доменами и временем и строгой проверки. Используя IP-адреса приемопередатчиков поставщиков, модульный дизайн и систематическое моделирование, инженеры могут создавать надежные интерфейсы, которые работают на многогигабитных скоростях. Будь то для связи с центрами обработки данных, бытовой электроники или промышленного управления, овладение этими методами VHDL позволит вам построить следующее поколение высокопроизводительных цифровых систем.

Внешние ссылки