В этом примере показано, как моделировать доступ к внешней памяти из FPGA для поворота изображения ASCII. Многие приложения требуют от FPGA произвольного доступа к памяти в соответствии с требованиями алгоритма. Вы узнаете, как создавать адреса памяти вместе с другими главными сигналами AXI4 для чтения и записи определенных областей памяти с помощью SoC Blockset. Вы будете моделировать, внедрять и проверять дизайн на оборудовании.
Поддерживаемые аппаратные платформы:
Оценочный комплект Artix ® 7 35T Arty FPGA
Плата для разработчиков Xilinx ® Kintex ® 7 KC705
Оценочный комплект Xilinx Zynq ® ZC706
Набор для оценки Xilinx Zynq UltraScale™+ MPSoC ZCU102
Набор для оценки Xilinx Zynq UltraScale™+ RFSoC ZCU111
Комплект для разработки Altera ® Cyclone ® V SoC
Комплект для разработки Altera Arria ® 10 SoC
Изображение ASCII кодируется как матрица 24 на 64 из uint8 символов. Задача проектирования состоит в том, чтобы повернуть изображение путем моделирования интерфейсов AXI4 Master в логике FPGA для доступа к внешней памяти. Моделируя конструкцию с помощью модели внешней памяти и протокола AXI4, можно проверить поведение во время разработки приложения. Это экономит время, затрачиваемое на отладку конструкции оборудования на этапе внедрения.
Общий поток данных соответствует описанию на рисунке ниже. Изображение сохранено во внешней памяти в регионе памяти от адреса 0x00000000 к 0x000017FF. Алгоритм FPGA читает изображение из этого региона и вращает его, сочиняя его в обратном порядке в регион памяти от 0x00001800. Наконец, данные считываются обратно из памяти.

Модели структурированы с использованием привязок модели. Верхняя модель 'soc_image_rotation' включает модель FPGA 'soc_image_rotation_fpga', использующую блок Model в качестве ссылки на модель.

Верхняя модель охватывает следующие области:
Testbench Input: Он моделирует стимулы, чтобы настроить дизайн для моделирования. AXI4 Master Source блок инициализирует входные данные изображения во внешнюю память. Algorithm Start блок посылает сигнал Start в алгоритм FPGA через блок Register Channel. Откройте soc_image_rotation_init.m функции предварительной загрузки, чтобы увидеть, как инициализируются параметры модели и входные данные.
Выходные данные Testbench: AXI4 Master Sink блок моделирует считывание выходных данных изображения из внешней памяти. Выходные данные сохраняются в AXI4MasterSinkContent переменных в рабочей области. Откройте функцию остановки soc_image_rotation_post.m, чтобы увидеть, как печатаются входные и выходные данные.
Память: Система памяти моделируется с использованием одного контроллера памяти и двух блоков канала памяти. 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 поддерживает Основной протокол AXI4 и для выбора времени диаграмм сигналов AXI4, пожалуйста, обратитесь к Образцовому Дизайну для Основного Интерфейсного Поколения AXI4.
Запустите модель и откройте анализатор 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 утверждает после каждого пакета записи, который запускает следующий пакет чтения.

Входные и выходные изображения печатаются в конце моделирования:


Для этого раздела требуются следующие продукты:
Coder™ ЛПВП
Пакет поддержки пакетов SoC для устройств Xilinx или
Пакет поддержки SoC Blockset для устройств Intel ®
Для реализации модели на поддерживаемой плате FPGA используйте приложение SoC Builder. Перед внедрением убедитесь, что установлены необходимые продукты и программное обеспечение поставщика FPGA.
Откройте SoC Builder, нажав кнопку «Настроить, построить и развернуть» на панели инструментов, и выполните следующие действия.
Выберите «Build Model» на экране «Setup». Нажмите кнопку «Далее».
Нажмите кнопку «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. Нажмите кнопку «Далее».
Укажите папку проекта на экране «Select Project Folder». Нажмите кнопку «Далее».
Выберите «Build, load and run» на экране «Select Build Action». Нажмите кнопку «Далее».
Нажмите кнопку «Validate», чтобы проверить совместимость модели для реализации на экране «Validate Model». Нажмите кнопку «Далее».
Нажмите кнопку «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 не является оценочным комплектом Xilinx Zynq ZC706, перед запуском SoC Builder необходимо выполнить следующие настройки в параметрах конфигурации модели высшего уровня.
Выберите «Hardware board» (Аппаратная плата) на панели «Hardware Implementation» (Аппаратная реализация) для соответствия вашей системной плате.
Снимите флажок «Include processing system» на панели «Hardware Implementation - > Target hardware resources - > FPGA design (top-level)».
Установите для параметра «Interconnect data width (bits)» значение «32» в разделе «Hardware Implementation - > Target hardware resources - > FPGA design (mem-каналы)».
Доступные предварительно сгенерированные потоки битов:
'soc _ image _ rotation-zc706.bit'
'soc _ image _ rotation-arty.bit'
«soc _ image _ rotation-zcu102.bit»
'soc_image_rotation-XilinxZynqUltraScale_RFSoCZCU111EvaluationKit.bit'
'soc _ image _ rotation-kc705.bit'
«soc _ image _ rotation-a10soc.sof»
Измените команду 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. Это можно использовать как руководство для разработки собственного алгоритма доступа к памяти непосредственно с помощью протокола Master AXI4.