Инициирование программных задач прерываниями FPGA

В этом примере показано, как смоделировать алгоритм, разделенный между аппаратным и программным обеспечением. Аппаратный IP реализован в матрице FPGA и инициировал программную задачу, реализованную во встраиваемом процессоре. Спроектируйте, симулируйте и реализуйте полный проект на оборудовании SoC.

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

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

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

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

  • Макетная плата ZedBoard™ Zynq-7000

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

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

Введение

Много приложений Системы на чипе (SoC) требуют, чтобы аппаратное устройство инициировало асинхронную задачу на процессоре. Эта функциональность может быть полезной при реализации циклов управления низкой задержки, которые охватывают между аппаратным и программным обеспечением. Это также полезно в обрабатывании срочных аппаратных запросов программным обеспечением. Для таких проектов аппаратное устройство повышает запрос на прерывание до контроллера прерываний, чтобы показать, что данные готовы к действию программной задачей на процессоре.

Спроектируйте задачу

Этот пример включает два аппаратных ядра IP в FPGA. Эти ядра IP генерируют сигналы прерывания асинхронно. Прерывания инициировали две отдельных задачи на процессоре, один для каждого аппаратного ядра IP. Задачи процессора получают доступ к аппаратным устройствам путем чтения или записи регистров.

Структура модели

Топ-модель sw_hw_interrupt_top включает модель FPGA sw_hw_interrupt_fpga и модель процессора sw_hw_interrupt_proc как модели - ссылки. Топ-модель также включает блоки Канала Канала и Регистра Прерывания в передачи данных модели с FPGA на Процессор.

Модель FPGA реализует два ядра IP, которые генерируют прерывания на основе постепенного увеличения 32 битно-встречных значений. Первое ядро IP генерирует прерывание, когда или 16-е или 18-й бит встречного значения изменяются с 0 до 1. Второе ядро IP генерирует прерывание, когда или 14-й или 16-й бит встречного значения изменяется с 0 до 1. Встречное значение во время генерации прерывания указано и передано процессору с помощью блока Register Channel. Модель процессора реализует две программных задачи, один для каждого ядра IP, которые читают встречное значение, ранее указанное FPGA.

Симуляция

Симулируйте систему в течение 0,03 секунд и откройте блок Scope на топ-модели, чтобы визуализировать встречные значения, когда они читаются процессором.

Затем на вкладке Simulation, нажмите Data Inspector, чтобы просмотреть синхронизацию различных событий, инициированных прерываниями. Добавьте interrupt1 и сигналы interruptTask1 в виде сверху, и добавьте interrupt2 и сигналы interruptTask2 в виде снизу. График симуляции показывает, что каждый раз прерывание инициировано, соответствующая задача выполняется. Во время 0,01802 секунды interrupt2 повышен и занимает 100 микросекунд к процессу блоком Interrupt Channel и инициировать соответствующий interruptTask2, который занимает 500 микросекунд, чтобы запуститься.

Во время 0,01966 секунды, interrupt1 & interrupt2 повышены одновременно, и они обслуживаются процессором на основе их относительного приоритета. Поскольку interrupt1 соединяется сначала во входных портах блока Interrupt Channel, он имеет более высокий приоритет, чем interrupt2. interruptTask2 ожидает, чтобы быть выполненным, в то время как interruptTask1 все еще выполняется из-за более высокого приоритета interrupt1.

Реализуйте и работавший оборудование

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

  • HDL Coder™

  • Embedded Coder®

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

Для получения дополнительной информации о пакетах поддержки, смотрите SoC Blockset Поддерживаемые аппаратные средства.

Чтобы реализовать модель на поддерживаемой плате SoC используют инструмент SoC Builder. По умолчанию модель будет реализована на ZedBoard, когда это сконфигурировано с той платой. Открыть Разработчика SoC нажатие кнопки, кнопка 'Configure, Build, & Deploy' в панели инструментов и выполнить эти шаги:

  1. Выберите Build Model на экране Setup. Нажать Далее.

  2. Нажмите Далее на экране Review Task Map.

  3. На экране Review Memory Map нажмите View/Edit Memory Map, чтобы просмотреть карту распределения памяти. Нажать Далее.

  4. Задайте папку проекта на экране Select Project Folder. Нажать Далее.

  5. Выберите Build, загрузку для режима external mode на экране Select Build Action. Нажать Далее.

  6. На экране Validate Model нажмите Validate, чтобы проверять совместимость модели для реализации. Нажать Далее.

  7. На экране Build Model нажмите Build, чтобы начать создавать из модели. Внешний интерпретатор открывается, когда синтез FPGA начинается. Нажать Далее.

  8. Нажмите Test Connection на экране Connect Hardware, чтобы протестировать возможность соединения хоста - компьютера с платой SoC. Нажмите Далее, чтобы перейти к Экрану приложения Запуска.

Синтез FPGA может занять больше чем 30 минут, чтобы завершиться. Чтобы сэкономить время, можно хотеть использовать обеспеченный предсгенерированный поток битов путем выполнения этих шагов:

  1. Закройте внешний интерпретатор, чтобы отключить синтез.

  2. Скопируйте предварительно сгенерированный поток битов в свою папку проекта путем выполнения этого copyfile команда ниже

  3. Нажмите Load и Run, чтобы загрузить предсгенерированный поток битов и запустить модель на плате SoC

copyfile(fullfile(matlabroot,'toolbox','soc','socexamples','bitstreams','soc_hwsw_interrupt_top-zedboard.bit'), './soc_prj');

После загрузки потока битов запустите модель сгенерированного программного обеспечения soc_hwsw_interrupt_sw в режиме external mode. Из панели инструментов модели откройте Data Inspector и добавьте interruptTask1 в виде сверху и interruptTask2 в вид снизу. Заметьте, что каждый раз прерывание инициировано, соответствующая задача выполняется.

Реализация на других платах: Чтобы реализовать модель на поддерживаемой плате кроме ZedBoard, сначала сконфигурируйте модель на поддерживаемую плату, и затем установите параметры в качестве примера как ниже.

  • На вкладке Hardware нажмите Hardware Settings, чтобы открыть окно Configuration Parameters.

  • На вкладке Hardware Implementation выберите свою плату из Аппаратной платы на модели процессора и верхней части.

  • На ресурсах Целевого компьютера> проект FPGA (верхний уровень), который включает вкладка, Включает MATLAB как Ведущий IP AXI для основанного на хосте взаимодействия и установил тактовую частоту ядра IP (МГц) на 10 МГц.

Затем нажмите Configure, Build, & Deploy на панели инструментов открытому Разработчику SoC и выполните шаги, как ранее утверждено для ZedBoard выше. Измените copyfile команда, чтобы совпадать с потоком битов, соответствующим вашей плате. В случае Altera комплект разработчика Arria® 10 SoC скопируйте '.periph.rbf' и '.core.rbf' файлы. Следующее является доступными предсгенерированными файлами потока битов:

  • 'soc_hwsw_interrupt_top-zc706.bit'

  • 'soc_hwsw_interrupt_top-zedboard.bit'

  • 'soc_hwsw_interrupt_top-zcu102.bit'

  • 'soc_hwsw_interrupt_top-XilinxZynqUltraScale_RFSoCZCU111EvaluationKit.bit'

  • 'soc_hwsw_interrupt_top-c5soc.rbf'

  • 'soc_hwsw_interrupt_top-a10soc.periph.rbf'

  • 'soc_hwsw_interrupt_top-a10soc.core.rbf'

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