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

В этом примере показано, как смоделировать доступы к внешней памяти от 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 (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 приложение. Убедитесь, что вы установили требуемые продукты и программное обеспечение поставщика FPGA перед реализацией.

Откройте Разработчика SoC путем нажимания кнопки '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 для получения дополнительной информации о вычислении индексного регистра. Нажмите '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-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-zc706.bit'

  • 'soc_image_rotation-arty.bit'

  • 'soc_image_rotation-kc705.bit'

  • 'soc_image_rotation-a10soc.sof'

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

Заключение

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