В этом примере показано, как смоделировать доступ к внешней памяти из FPGA для вращения художественного изображения ASCII. Многие приложения требуют, чтобы FPGA получал доступ к памяти случайным образом в соответствии с требованиями алгоритма. Вы научитесь проектировать генерацию адресов памяти наряду с другими AXI4 основными сигналами для чтения и записи конкретных областей памяти с помощью SoC Blockset. Вы будете моделировать, реализовывать и проверять свой проект на оборудовании.
Поддерживаемые аппаратные платформы:
Аналитический набор Artix ® 7 35T Arty FPGA
Плата для разработки KC705 Xilinx ® Kintex ® 7
Набор для оценки ZC706 Xilinx Zynq ®
Набор для оценки ZCU102 Xilinx Zynq UltraScale™+ MPSoC
Набор для оценки ZCU111 Xilinx Zynq UltraScale™+ RFSoC
Комплект для разработки Altera ® Cyclone ® V
Набор для разработки Altera Arria ® 10 SoC
Арт- изображение ASCII кодируется как матрица 24 на 64 символов. Задача проекта состоит в том, чтобы повернуть изображение путем моделирования AXI4 интерфейсов Master в логике FPGA для внешнего доступа к памяти. Симулируя проект с моделью внешней памяти и протоколом AXI4, вы проверяете поведение во время проекта приложения. Это экономит время, потраченное на отладку проекта на оборудовании во время фазы реализации.
Общее значение dataflow соответствует описанному на рисунке ниже. Изображение сохранено во внешней памяти в области памяти от адреса 0x00000000 к 0x000017FF. Алгоритм FPGA читает изображение от этой области и вращает его, сочиняя его в обратном порядке в область памяти от 0x00001800. Наконец, данные считываются из памяти.
Модели структурированы с помощью моделей-ссылок. Верхняя часть 'soc_image_rotation' включает модель FPGA 'soc_image_rotation_fpga', использующую блок Model в качестве модели-ссылки.
Верхняя модель охватывает следующие области:
Testbench Input: Он моделирует стимулы, чтобы настроить проект для симуляции. The AXI4 Master Source
блок инициализирует входные данные изображения во внешнюю память. The Algorithm Start
блок отправляет сигнал Start в алгоритм FPGA через блок Register Channel. Откройте soc_image_rotation_init.m функции предварительной загрузки, чтобы увидеть, как инициализируются параметры модели и входные данные.
Выходы Testbench: The AXI4 Master Sink
блок моделирует чтение выходного изображения данных из внешней памяти. Данные выходы сохраняются в переменной AXI4MasterSinkContent в рабочей области. Откройте функцию stop soc_image_rotation_post.m, чтобы увидеть, как строятся входные данные и выходные данные.
Память: Система памяти моделируется с помощью одного контроллера памяти и двух блоков Memory Channel. Input Read Memory Channel
блок моделирует область 1 памяти, в которой хранится и Output Write Memory Channel
входное изображение блок моделирует область 2 памяти, где сохранено повернутое изображение.
FPGA: Эта область создает экземпляр FPGA модели-ссылки который моделирует логику для интерфейсов AXI4 Master и вращения данных.
Модель FPGA реализует алгоритм в трех подсистемах, AXI4MasterRead
, ReverseDataOrder
и AXI4MasterWrite
. Откройте подсистему FPGA для вращения изображения:
Как положительное ребро start
обнаруживается сигнал, AXIMasterRead
считывает одну линию данных изображения и доставляет ее в ReverseDataOrder
для изменения порядка данных. Сторнированные данные затем записываются во внешнюю память по AXIMasterWrite
подсистема. После записи данных для одной линии он отправляет сигнал request_next_line
для запуска чтения следующей линии по AXIMasterRead
. Этот цикл продолжается до тех пор, пока не будут обработаны все линии изображения.
Откройте AXI4MasterReadController и AXI4MasterWriteController блоки, чтобы просмотреть код MATLAB ® для интерфейсов AXI4 Master. Эти блоки проектируют логику адресации для операций чтения и записи в соответствии с AXI4 протоколом. SoC Blockset поддерживает протокол Master AXI4 и для синхронизации схем AXI4 сигналов, пожалуйста, обратитесь к Model Design для генерации AXI4 интерфейса Master.
Запустите модель и откройте анализатор Logic из модели FPGA. Заметьте следующие ключевые точки:
Одна линия данных записывается/считывается мастерами в один пакет. Поскольку каждая линия имеет длину 64 символа; длина пакета - 64 (0x40). Обратите внимание на это значение на сигналах rd_len
и wr_len
.
Каждый символ имеет 4 байта, поскольку он расширен до типа данных uint32, что делает длину линии 64x4 = 256 (0x100) байт. Поэтому адреса увеличиваются/уменьшаются на 0x100. Обратите внимание на это rd_addr
и wr_addr
сигналы.
За одним пакетом чтения следует один пакет записи. Наблюдайте, как rd_dvalid
и wr_dvalid
другой способ переключения.
request_next_line
утверждает после каждого пакета записи, который запускает следующий пакет чтения.
Входное и выходные изображения строятся в конце симуляции:
Для этого раздела требуются следующие продукты:
HDL Coder™
Пакет поддержки SoC Blockset для устройств Xilinx, или
Пакет поддержки SoC Blockset для устройств Intel ®
Для реализации модели на поддерживаемой плате FPGA используйте приложение SoC Builder. Перед реализацией убедитесь, что установлены необходимые продукты и программное обеспечение поставщиков FPGA.
Откройте SoC Builder, нажав кнопку 'Configure, Build, & Deploy' на панели инструментов и выполните следующие действия:
Выберите 'Build Model ' on ' Setup' экран. Нажмите 'Next'.
Нажмите 'View/Edit Memory Map', чтобы просмотреть карту памяти на экране 'Review Memory Map'. Заметьте, что базовый адрес 0x00000000 назначен Input Read Memory Channel
блок и базовый адрес 0x00001800 назначены на Output Write Memory Channel
блок. Адрес AXI4 является суммой базового адреса и адреса из алгоритма FPGA. Для примера, wr_addr
от алгоритма FPGA начинается с 0x1700. Выходные данные будут написаны внешней памяти от адреса 0x00001800 + 0x1700 = 0x00002F00. Для получения дополнительной информации о вычислении регистра базовых адресов см. AXI4 Model Design for Master Interface Generation. Нажмите 'Next'.
Укажите папку проекта на экране 'Select Project Folder'. Нажмите 'Next'.
Выберите 'Build, load and run ' on ' Select Build Action'. Нажмите 'Next'.
Нажмите 'Validate', чтобы проверить совместимость модели для реализации на экране 'Validate Model'. Нажмите 'Next'.
Нажмите 'Build', чтобы начать создание модели на экране 'Build Model'. Внешний интерпретатор откроется, когда начнется синтез FPGA. Выберите 'Next' для 'Load Bitstream'.
Синтез FPGA может занять более 30 минут. Чтобы сэкономить время, вы можете захотеть использовать предоставленный предварительно сгенерированный битовый поток путем следующих шагов:
Закройте внешний интерпретатор, чтобы завершить синтез.
Скопируйте предварительно сгенерированный битовый поток в папку проекта, запустив команду ниже, а затем,
Нажмите кнопку 'Load', чтобы загрузить предварительно сгенерированный битовый поток.
copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox',... 'soc','supportpackages','xilinxsoc','xilinxsocexamples','bitstreams',... 'soc_image_rotation-zc706.bit'), './soc_prj');
Чтобы запустить этот пример, скопируйте испытательный стенд примера в папку проекта.
copyfile(fullfile(matlabroot,'toolbox','soc','socexamples','soc_image_rotation_aximaster.m'),... './soc_prj','f');
Введите следующую команду для запуска испытательного стенда:
soc_image_rotation_aximaster
Испытательный стенд выполняет следующие операции:
Инициализирует вращение изображения IP
Запись входных данных изображения во внешнюю память
Запускает операцию вращения изображения
Считывает и отображает выходные данные изображения из внешней памяти
Если ваша плата FPGA не является комплектом для оценки ZC706 Xilinx Zynq, вам необходимо сделать следующие настройки в параметрах конфигурации верхней модели перед запуском SoC Builder.
Выберите «Аппаратная плата» на панели «Аппаратная реализация», чтобы соответствовать вашей плате.
Снимите флажок 'Include processing system' на панели 'Аппаратная реализация - > целевой компьютер resources - > FPGA design (верхний уровень)'.
Установите значение 'Interconnect data width (bits)' в '32' на панели 'Аппаратная реализация - > целевой компьютер resources - > FPGA design (mem channels)'.
Доступные предварительно сгенерированные битовые потоки:
'soc _ изображение _ rotation-zc706.bit'
'soc _ изображение _ rotation-arty.bit'
'soc _ изображение _ rotation-zcu102.bit'
'soc _ изображение _ rotation-XilinxZynqUltraScale _ RFSoCZCU111EvaluationKit.bit'
'soc _ изображение _ rotation-kc705.bit'
'soc _ изображение _ rotation-a10soc.soff'
Измените команду copyfile и пример испытательного стенда так, чтобы они совпадали с вашими платой и выбранной папкой проекта. В случае набора разработок Altera Arria ® 10 SoC и комплекта разработок Altera Cyclone ® V SoC используйте команду copyfile ниже, соответствующую вашей плате.
copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',... 'supportpackages','intelsoc','intelsocexamples','bitstreams',... 'soc_image_rotation-a10soc.sof'), './soc_prj');
Обратите внимание, что предварительно сгенерированный битовый поток может не работать, если вы настроили карту памяти.
В этом примере показано моделирование интерфейсов AXI4 Master для доступа к внешней памяти случайным образом с помощью SoC Blockset путем вращения художественного изображения ASCII. Вы можете использовать это в качестве руководства для разработки собственного алгоритма для доступа к памяти непосредственно AXI4 протоколу Master.