Структура проектов ПЛИС

Для работы с проектами ПЛИС различных модулей была разработана архитектура RTL-проектов. Применение данной архитектуры при построении RTL-проектов обеспечивает не только систематизацию, но и снижает временные затраты конечного потребителя при решении прикладных задач, путем модификации предоставляемого ИнСис проекта.

В основу архитектуры RTL-проектов положена шина AXI, что обеспечивает максимальную совместимость предлагаемых компонентов с имеющейся в САПР Vivado фирмы AMD библиотекой IP-блоков.

Следует выделить следующие уровни компонентов:

  • Юнит
  • Блок
  • Интерфейсные узлы
  • Коммутационные узлы

Юнит

Компонент первого (низшего) уровня, построенный на основе шины AXIL, имеющий программно-доступную структуру идентификаторов (набор регистров), называется Юнит.

В адресном пространстве юнита первые три регистра всегда имеют тип доступа только на чтение и образуют стандартную группу идентификаторов юнита. Последующие регистры после группы идентификаторов являются пользовательскими. Тип доступа к пользовательским регистрам и их количество определяется функционалом конечного юнита.

Список некоторых юнитов, наиболее часто используемых в текущей архитектуре, приведен далее.

Название Описание
u_axil_rom Юнит доступа к ROM конфигурации блока
u_axil_reg_access Юнит доступа к регистрам ПЛИС
u_axil_spi_access Юнит доступа к устройствам на шине SPI
u_axil_i2c_access Юнит доступа к устройствам на шине I2C
u_axis_fifo_c2h Юнит доступа к FIFO в направлении C2H
u_axis_fifo_h2c Юнит доступа к FIFO в направлении H2C
u_axil_start_adc Юнит доступа к стартовой подсистеме АЦП
u_axil_start_dac Юнит доступа к стартовой подсистеме ЦАП

U_AXIL_ROM

Юнит для доступа к ROM-конфигурации блока.

  • Реализован доступ со стороны шины AXIL
  • Количество регистров - 128
  • Режим доступа - только чтение

U_AXIL_REG_ACCESS

Юнит для доступа к регистрам ПЛИС

  • Реализован доступ со стороны шины AXIL
  • Разрядность регистров - 32 бита
  • Работает в режиме теневого ОЗУ
  • Осуществляет доступ к 61 регистру в режиме R/W
  • Осуществляет доступ к 67 регистрам в режиме Read Only
  • Позволяет формировать прерывания по отдельным битам регистра STATUS
  • Включает в себя программно-управляемую логику по формированию сигналов RESET

Структура юнита приведена ниже.

U_AXIL_SPI_ACCESS

Юнит для доступа к устройствам на базе последовательной шины типа SPI и ее аналогов.

  • Реализован доступ со стороны шины AXIL
  • Полный программный доступ к устройствам на шине
  • Программная установка длительности сериальной последовательности (от 8 до 96 знаков)
  • Программная установка частоты сериальной последовательности
  • Программная установка полярности CS
  • Поддерживает устройства с функцией отслеживания готовности (BUSY)
  • Возможность работы с несколькими устройствами на шине по маске CS

Структура юнита приведена ниже.

U_AXIL_I2С_ACCESS

Юнит для доступа к устройствам на шине I2C.

  • Реализован доступ со стороны шины AXIL
  • Обеспечивает 7-/10-битную адресацию устройств
  • Арбитраж на шине
  • Режим мультимастер
  • Скорости передачи данных 100 кбит/с, 400 кбит/с и 1 Мбит/с
  • Программируемые пакетные транзакции

Структура юнита приведена ниже.

U_AXIS_FIFO_С2H, U_AXIS_FIFO_H2C

Юниты реализуют следующий функционал:

  • Реализован доступ со стороны шины AXIL
  • Обеспечивает базовый функционал по обмену данными с интерфейсными узлами и пользовательской шиной
  • Поддержка режимов обмена данными по шине AXIS и AXIL в направлении C2H (Carrier module to Host) и H2C (Host to Carrier module)
  • Режим аппаратного и программируемого выбора номера канала обмена шины AXIS
  • Режим аппаратного и программируемого поля TLAST
  • Параметризируемые разрядности пользовательской и AXIS-шины
  • Функционал измерения скорости обмена данными
  • Функционал тестирования шин AXIS, AXIL и шины обмена с пользовательской логикой
  • Интегрированая память обнаруженных ошибок в канале при тестировании
  • Интегрированные порты ввода-вывода с согласованием тактовых доменов через FIFO

Юнит U_AXIS_FIFO_ (C2H, H2C) является системным компонентом текущей архитектуры, на базе которого осуществляется построение интерфейсов обмена данными и реализуется их тестирование. Структуры юнитов U_AXIS_FIFO_C2H и U_AXIS_FIFO_H2C приведены на рисунке 4 и рисунке 5 соответственно.

 

Блок

БЛОК является компонентом второго (более высокого по отношению к Юнит) уровня. БЛОК построен на основе шины AXIL и имеет в своем составе юнит U_AXIL_ROM в начале выделенного блоку адресного пространства.

Блок может содержать внутри себя от 1 до 48 юнитов. Адресные смещения на юниты относительно базового адреса указываются в юните U_AXIL_ROM регистрами U_OFFSET_XX, где ХХ — порядковый номер юнита на линиях узла AXIL_CROSSBAR. Со стороны ПО количество подключенных юнитов определяется методом сканирования регистров действующих значений смещений (U_OFFSET_XX). U_OFFSET_XX = 0xFFFFFFFF означает, что юнит отсутствует. Подключение юнитов внутри блока к узлу AXIL_CROSSBAR осуществляется только в последовательной форме, иное подключение юнитов к узлу AXIL_CROSSBAR запрещено.

Блок может иметь подключение к шине AXIS интерфейсного узла. Возможно подключение до четырех каналов AXIS в направлении C2H и до четырех в направлении H2С.

Интерфейсные узлы

Компоненты, которые принимают участие в построении логики, образующей компьютерные интерфейсы обмена потоковыми данными и управляющими транзакциями, называются интерфейсными. Как правило, к интерфейсным узлам подключены коммутационные узлы, обеспечивающие доступ к блокам по шине AXIL. Интерфейсный узел определяет значение базового адреса проекта (BASE_ADDR). Относительно базового адреса строится вся система доступа к блокам на шине AXIL. Примеры интерфейсных узлов приведены далее.

Название Описание
u_axil_rom Юнит доступа к ROM конфигурации блока
u_axil_reg_access Юнит доступа к регистрам ПЛИС
u_axil_spi_access Юнит доступа к устройствам на шине SPI
u_axil_i2c_access Юнит доступа к устройствам на шине I2C
u_axis_fifo_c2h Юнит доступа к FIFO в направлении C2H
u_axis_fifo_h2c Юнит доступа к FIFO в направлении H2C
u_axil_start_adc Юнит доступа к стартовой подсистеме АЦП
u_axil_start_dac Юнит доступа к стартовой подсистеме ЦАП

Коммутационные узлы

Компоненты, которые принимают участие в построении интерфейсов (AXIL, AXIS), обеспечивающих интеграцию юнитов в блок и подключение блоков к интерфейсным узлам, называются коммутационными. Примеры коммутационных узлов приведены далее.

Название Описание
axi_crossbar_is Узел кросс-коммутации шины AXIL
axis_switch_c2h Узел кросс-коммутации шины AXIS C2H
axis_switch_h2c Узел кросс-коммутации шины AXIS H2C

Общие принципы построения проектов

Специфика блока MAIN

Блок MAIN всегда расположен по смещению, равному базовому адресу (BASE_ADDR). В юните U_AXIL_ROM блока MAIN выделена дополнительная группа регистров, в которых задаются значения адресного смещения на блоки относительно базового адреса. Адресное смещение хранится в регистрах B_OFFSET_XX, где ХХ — порядковый номер блока на линиях узла AXIL_CROSSBAR. Со стороны ПО количество подключенных блоков определяется методом сканирования регистров действующих значений смещений (B_OFFSET_XX). B_OFFSET_XX = 0xFFFFFFFF означает, что блок отсутствует. Подключение блоков к узлу AXIL_CROSSBAR осуществляется только в последовательной форме, иное подключение запрещено. Структура проекта ПЛИС с диаграммой распределения адресов между блоками и юнитами приведена на рисунке ниже.

Базовые Блоки

Проекты ПЛИС, выполненные по архитектуре AXI, в большей степени своей структуры опираются на базовые блоки. Базовые блоки обеспечивают функционал взаимодействия с различными интерфейсами, которые широко применяются в оборудовании, разрабатываемом в компании. Примеры базовых блоков приведены в следующей таблице .

Название блока Описание
is_mt28ew Поддержка конфигурационной FLASH ПЛИС
is_piox Поддержка порта PIOX
is_synx Поддержка порта SYNX
is_sdram Поддержка SDRAM (DDR4, DDR3)
is_aurora_64_66 Поддержка интерфейса AURORA_64_66
is_chain Тестирование ресурсов ПЛИС (DSP, RAMB)

Аппаратно-ориентированные блоки

Аппаратно-ориентированные блоки обеспечивают функционал конечного оборудования. Как правило, таким оборудованием являются конкретные несущие (НМ) и мезонинные модули (ММ). Примеры аппаратно-ориентированных блоков приведены в таблице ниже.

Название блока Описание
is_main126 Поддержка ресурсов НМ FMC126P
is_main107 Поддержка ресурсов НМ FMC107P
is_main155 Поддержка ресурсов НМ FMC155CPS
is_fm418t Поддержка ресурсов ММ FM418T
is_fm402s Поддержка ресурсов ММ FM402S
is_fm214x1gtrf Поддержка ресурсов ММ FM214x1GTRF
is_fm1614x600m Поддержка ресурсов ММ FM1614x600M

Пример структуры аппаратно-ориентированного блока IS_FM214x1GTRF приведен далее.

Кросс-блочные соединения

На базе интегрированных в блок юнитов U_AXIS_FIFO_C2H и U_AXIS_FIFO_H2C возможна реализация каналов передачи данных между блоками в согласованном режиме с развязыванием по частотным доменам. На рисунке 8 представлен пример кросс-блочного соединения четырех блоков. Два блока динамической памяти (IS_SDRAM) работают в параллельном режиме через блок IS_DIO_DUAL с пользовательским блоком IS_USER. Соединение блоков выполнено штатными средствами на базе портов ввода-вывода.