Запуск программных задач прерываниями FPGA

Этот пример показывает, как смоделировать алгоритм, разделенный между оборудованием и программным обеспечением. Аппаратный IP реализован в FPGA-фабрике и запускает программную задачу, реализованную во встраиваемом процессоре. Проектируйте, моделируйте и реализуйте полный проект на оборудовании СОС.

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

  • Набор для оценки ZC706 Xilinx ® Zynq ®

  • Набор для оценки ZCU102 Xilinx Zynq UltraScale™+ MPSoC

  • Набор для оценки ZCU111 Xilinx Zynq UltraScale™+ RFSoC

  • ZedBoard™ Zynq-7000 развития

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

  • Набор для разработки Altera Arria ® 10 SoC

Введение

Многие приложения System-on-Chip (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 секунд прерывание 2 поднимается и занимает 100 микросекунд, чтобы обработать блоком Прерывание Канала и запустить соответствующий interruptTask2, который занимает 500 микросекунд, чтобы запустить.

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

Реализация и запуск оборудования

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

  • HDL Coder™

  • Embedded Coder ®

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

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

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

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

  2. Нажмите Next на экране 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. Нажмите кнопку Далее (Next), чтобы перейти к экрану Запуск приложения (Run Application).

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

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

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

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

copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',...
        'supportpackages','xilinxsoc','xilinxsocexamples','bitstreams',...
        'soc_hwsw_interrupt_top-zedboard.bit'), './soc_prj');

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

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

  • На вкладке Hardware нажмите Hardware Settings, чтобы открыть окно Параметры Конфигурации.

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

  • На вкладке целевой компьютер resources > FPGA design (верхний уровень) включите MATLAB как AXI Master IP для взаимодействия на основе хоста и установите тактовую частоту IP-ядра (МГц) равной 10 МГц.

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

copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',...
        'supportpackages','intelsoc','intelsocexamples','bitstreams',...
        'soc_hwsw_interrupt_top-c5soc.rbf'), './soc_prj');

Ниже приведены доступные предварительно сгенерированные файлы битового потока:

  • 'soc _ hwsw _ conrupt _ top-zc706.bit'

  • 'soc _ hwsw _ conrupt _ top-zedboard.bit'

  • 'soc _ hwsw _ conrupt _ top-zcu102.bit'

  • 'soc _ hwsw _ conrupt _ top-XilinxZynqUltraScale _ RFSoCZCU111EvaluationKit.bit'

  • 'soc _ hwsw _ conrupt _ top-c5soc.rbf'

  • 'soc _ hwsw _ conrupt _ top-a10soc.periph.rbf'

  • 'soc _ hwsw _ conrupt _ top-a10soc.core.rbf'

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