Структура проектов ПЛИС
Для работы с проектами ПЛИС различных модулей была разработана архитектура 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. Соединение блоков выполнено штатными средствами на базе портов ввода-вывода.
