Произвольный доступ внешней памяти

Пример показывает, как смоделировать доступы к внешней памяти от FPGA для вращения изображения ASCII-творчества. Много приложений требуют, чтобы FPGA получил доступ к памяти случайным способом согласно требованиям алгоритма. Вы изучите, как разработать генерацию адреса памяти наряду с другими основными сигналами AXI4 считать и записать определенные области памяти с помощью SoC Blockset. Вы моделируете, реализуете и проверите свой проект на оборудовании.

Поддерживаемые аппаратные платформы:

  • Оценочный комплект Artix® 7 35T Arty FPGA

  • Макетная плата Xilinx® Kintex® 7 KC705

  • Оценочный комплект Xilinx Zynq® ZC706

  • Xilinx Zynq UltraScale™ + оценочный комплект MPSoC ZCU102

  • Комплект разработчика Altera® Cyclone® V SoC

  • Altera комплект разработчика Arria® 10 SoC

Разработайте задачу

Изображение ASCII-творчества закодировано как 24 64 матрица uint8 символов. Задача проекта состоит в том, чтобы вращать изображение путем моделирования Ведущих интерфейсов AXI4 в логике FPGA для доступа к внешней памяти. Путем симуляции проекта с моделью внешней памяти и протоколом AXI4, вы проверяете поведение во время проектирования приложений. Это экономит время, в противном случае проведенное в отладке проекта на оборудовании во время фазы реализации.

Полный поток данных как описан в фигуре ниже. Изображение хранится во внешней памяти в области памяти от адреса 0x00000000 к 0x000017FF. Алгоритм FPGA читает изображение из этой области и вращает его путем записи его в обратном порядке в область памяти от 0x00001800. Наконец, данные считаны назад из памяти.

Образцовая структура

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

Топ-модель покрывает следующие области:

  • Вход испытательного стенда: Это моделирует стимулы, чтобы настроить проект для симуляции. Блок AXI4 Master Source инициализирует входные данные изображения к внешней памяти. Блок Algorithm Start отправляет сигнал Запуска в алгоритм FPGA через блок Register Channel. Открытая функция предварительной нагрузки soc_image_rotation_init.m, чтобы видеть, как инициализируются параметры модели и входные данные.

  • Испытательный стенд Вывод: блок AXI4 Master Sink моделирует чтение данных о выходном изображении из внешней памяти. Выходные данные сохранены в переменной AXI4MasterSinkContent в рабочей области. Открытая функция остановки soc_image_rotation_post.m, чтобы видеть, как построены входные данные и выходные данные.

  • Memory: Система памяти моделируется с помощью одного Контроллера памяти и двух блоков Канала Памяти. область памяти моделей блока Input Read Memory Channel 1, где введенное изображение хранится и область памяти моделей блока Output Write Memory Channel 2, где вращаемое изображение хранится.

  • FPGA: Эта область инстанцирует модели - ссылки FPGA, которая моделирует логику для Основных интерфейсов AXI4 и вращения данных.

Модель FPGA реализует алгоритм в трех подсистемах, AXI4MasterRead, ReverseDataOrder и AXI4MasterWrite. Открытая подсистема FPGA для поворота изображения:

Когда положительное ребро сигнала start обнаруживается, AXIMasterRead читает одну строку данных изображения, и поставьте его ReverseDataOrder для реверсов порядок данных. Обратные данные затем записаны во внешнюю память подсистемой AXIMasterWrite. Если данные для одной строки записаны, это отправляет request_next_line сигнала, чтобы инициировать чтение следующей строки AXIMasterRead. Этот цикл продолжается, пока все строки изображения не обрабатываются.

Откройте AXI4MasterReadController и блоки AXI4MasterWriteController, чтобы осмотреть код MATLAB® для Основных интерфейсов AXI4. Эти блоки разрабатывают логику обращения для операций чтения и операций записи согласно протоколу AXI4. SoC Blockset поддерживает Основной протокол AXI4 и для синхронизации схем сигналов AXI4, обратитесь к Образцовому Проекту для Основной Интерфейсной Генерации AXI4.

Симуляция

Запустите модель и откройте Анализатор логики из модели FPGA. Заметьте следующие ключевые пункты:

  • Одна строка данных пишется/читается ведущими устройствами в одном пакете. Поскольку каждая строка является 64 символами долго; пакетная длина 64 (0x400). Отметьте это значение на сигналах rd_len и wr_len.

  • Каждый символ имеет 4 байта, когда он расширен к unit32 типу данных, который делает длину строки 64x4 = 256 (0x100) байтов. Поэтому адреса постепенно увеличивают/постепенно уменьшают 0x100. Отметьте это на сигналах wr_addr и rd_addr.

  • Один пакет чтения сопровождается одним пакетом записи. Наблюдайте, как rd_dvalid и wr_dvalid переключаются альтернативно.

  • request_next_line утверждает после каждого пакета записи, которые инициировали следующий пакет чтения.

Изображения ввода и вывода построены в конце симуляции:

Реализация

Следующие продукты требуются для этого раздела:

  • HDL Coder™

  • Пакет поддержки SoC Blockset для устройств Xilinx, или

  • Пакет поддержки SoC Blockset для устройств Intel®

Чтобы реализовать модель на поддерживаемой плате FPGA, используйте Разработчика SoC приложение. Убедитесь, что вы установили требуемые продукты и программное обеспечение поставщика FPGA перед реализацией.

Open
<docid:soc_ref#mw_c7ffe7b7-da90-4248-9010-19b4413be7ab SoC Builder> from
the Tools menu and follow these steps:
  • Выберите экран '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 для получения дополнительной информации о вычислении индексного регистра. Нажмите '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(matlabroot,'toolbox','soc','socexamples','bitstreams','soc_image_rotation_fpga-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.

  • Выберите 'Hardware board' под панелью 'Аппаратной реализации', чтобы совпадать с вашей платой.

  • Снимите флажок, 'Включают систему обработки' под 'Аппаратной реализацией-> ресурсы Целевого компьютера-> проект FPGA' панель (верхнего уровня).

  • Установите 'Взаимосвязанную ширину данных (биты)' на '32' под 'Аппаратной реализацией-> ресурсы Целевого компьютера-> проект FPGA (каналы мадам)' панель.

Доступные предсгенерированные потоки битов:

  • 'soc_image_rotation_fpga-zc706.bit'

  • 'soc_image_rotation_fpga-arty.bit'

  • 'soc_image_rotation_fpga-kc705.bit'

  • 'soc_image_rotation_fpga-a10soc.sof'

Измените copyfile команду и испытательный стенд в качестве примера, чтобы совпадать с вашей платой и выбранной папкой проекта как соответствующими. Обратите внимание на то, что предсгенерированный поток битов не может работать, если вы настроили карту распределения памяти.

Введите следующую команду, чтобы закрыть модель FPGA и топ-модель:

Заключение

Этот пример показывает моделирование Основных интерфейсов AXI4 для доступа к внешней памяти случайным способом с помощью SoC Blockset путем вращения изображения ASCII-творчества. Можно использовать это в качестве руководства, чтобы разработать собственный алгоритм, чтобы получить доступ к памяти непосредственно с помощью Ведущего протокола AXI4.