Отладка Проекта Zynq с использованием HDL Coder и Embedded Coder

В этом примере показано, как отлаживать проект Zynq с помощью функций HDL- Coder™ и Embedded Coder ®.

Требования

  • Набор Zynq-7000 оценки Xilinx ZC702 SoC

  • HDL Coder поддержки платформы Xilinx Zynq

  • Пакет поддержки Embedded Coder для платформы Xilinx Zynq

  • Следуйте разделу «Настройка оборудования и инструментов Zynq» в разделе «Начало работы с платформой Xilinx Zynq», чтобы настроить ZC702 оборудование.

Введение

Когда вы разрабатываете прототипы и разрабатываете алгоритм для платформы Zynq, полезно контролировать, настраивать и отлаживать алгоритм во время его работы на оборудовании. В этом примере показано, как использовать такие функции, как режим external mode, интерфейс AXI и блоки HDL FIFO, чтобы проникнуть в проект Zynq. Используя функцию режима external mode, можно зондировать внутренние данные в программном обеспечении, работающем на процессоре ARM. А поскольку процессор ARM подключен к FPGA через интерфейс AXI, можно контролировать и настраивать параметры и на FPGA. Вместе с блоками HDL FIFO можно захватывать быстрые данные FPGA и извлекать их обратно в Simulink для анализа.

Давайте начнем, глядя на пример модели.

open_system('hdlcoder_data_capture');

Подсистема DataCapture является оборудованием подсистемой, предназначенной для фабрики FPGA. Внутри этой подсистемы подсистема OriginalDUT содержит блок Trigonometric Function, который генерирует потоки данных быстрого синуса и косинуса. Подсистема OriginalDUT представляет наш проект алгоритма. Если мы хотим отлажить этот проект, как мы захватываем и отслеживаем этот быстрый поток данных?

FPGA работает на гораздо более быстрой тактовой частоте, чем программный код на процессоре ARM. Режим external mode может использоваться с программным обеспечением, работающим на процессоре ARM, для мониторинга медленно изменяющихся параметров состояния, таких как состояние FIFO, но частота дискретизации программного кода, например, 1KHz, недостаточно быстрая, чтобы захватывать быстро изменяющиеся данные в FPGA, например, 50MHz.

В этом примере показано, как использовать блок FIFO для захвата быстрых данных FPGA, а затем использовать программное обеспечение на процессоре ARM для извлечения захваченных данных через интерфейс AXI и режим external mode.

В целях отладки добавляем Debug_FIFOs подсистемы в DUT. Эта подсистема использует два блока HDL FIFO для захвата быстрых потоков данных для последующего извлечения. Входы сигналов управления в подсистему Debug_FIFOs соединяются с интерфейсом DUT и соединяются с процессором ARM через интерфейс AXI.

На верхнем уровне модели примера, когда переключатель EnableCapture включен, а переключатель RetrieveData выключен, модуль Debug_FIFOs захватит 1000 выборки данных в блоки HDL FIFO. Это фаза захвата данных. Затем, когда переключатель EnableCapture включен и переключатель RetrieveData включен, модуль Debug_FIFOs передаст захваченные данные обратно на процессор ARM. Это фаза извлечения данных. Можно использовать переключатели вручную для переключения между этими двумя фазами для захвата и мониторинга внутренних данных FPGA.

Таким образом, для каждого сигнала, который вы хотите контролировать, можно вставить больше Debug_FIFO модулей в ваш проект, чтобы захватить и извлечь данные обратно в Simulink. Можно также использовать свои собственные сигналы управления или расширить этот пример своими собственными триггерами или квалификаторами.

Порт выхода подсистемы оборудования DirectDataOut выходов данные непосредственно к интерфейсу AXI. Напротив, выходные порты CapturedDataOut1 и CapturedDataOut2 выходы получают данные от FIFO. Мы сравним результаты этих двух выходов в последнем разделе.

Развертывание проекта на оборудовании Zynq

Далее мы запустим HDL Workflow Advisor из модели и запустим рабочий процесс совместного проектирования Zynq HW/SW, чтобы развернуть этот проект на оборудовании Zynq. Подробное руководство по шагам см. в примере Начало работы с таргетингом Xilinx Zynq Platform.

1. В задаче Set Target > Set Target Device and Synthesis Tool для рабочего процесса Target выберите IP Core Generation. Для Целевой платформы выберите Xilinx Zynq ZC702 комплект для оценки. Запустите эту задачу.

2. В задаче Set Target > Set Target Interface выберите AXI4-Lite для всех входов и выходных портов.

3. Затем выполните все шаги рабочего процесса, чтобы сгенерировать HDL IP, создать проект EDK, сгенерировать модель интерфейса программного обеспечения, а также создать и загрузить битовый поток FPGA. Сгенерированное программное обеспечение показано на следующем рисунке:

4. Сконфигурируйте и создайте модель программного интерфейса для режима external mode:

  1. В сгенерированной модели щелкните на панели Hardware и перейдите в Hardware settings, чтобы открыть диалоговое окно Параметр Конфигурации.

  2. Выберите решатель и установите «Stop Time» на «inf».

  3. На панели « Оборудовании» нажмите кнопку «Монитор и настройка».

  4. Нажмите кнопку Run на панели инструментов модели. Embedded Coder строит модель, загружает исполняемый файл ARM на оборудование Zynq ZC702, выполняет его и соединяет модель с исполняемым файлом, работающим на оборудовании Zynq ZC702.

Сбор и отображение данных с оборудования Zynq

Теперь и аппаратные, и программные части проекта работают на оборудовании Zynq, следующим шагом является сбор и извлечение данных с платы Zynq.

После подключения режима external mode убедитесь, что переключатель EnableCapture находится в положении 1, а переключатель RetrieveData находится в положении 0. Заметьте, что окно FIFONnumber почти сразу увеличивается до 1000. Это означает, что FIFO внутри ткани FPGA начала сбор данных и была быстро заполнена 1000 выборками данных.

Откройте блок Time Scope и наблюдайте выход DirectDataOut в первой строке. Заметьте, что полученные данные являются, казалось бы, случайной формой волны между -1 и 1. Это связано с тем, что FPGA работает на гораздо более высокой частоте, чем программное обеспечение на процессоре ARM. Прямое использование режима external mode для мониторинга быстрых данных FPGA означает дискретизацию сигнала быстрого синуса с очень медленной скоростью, которая генерирует случайную форму волны между -1 и 1.

Теперь дважды кликните переключатель RetrieveData, чтобы включить считывание данных. Переключатель EnableCapture должен быть включен. Когда переключатель RetrieveData включен, внутренняя логика, смоделированная в этом примере, отправляет захваченные выборки данных один за другим из FIFO в процессор ARM через интерфейс AXI. Эти выборки данных затем отправляются из процессора ARM в Simulink через режим external mode. Заметьте, что окно отображения FIFONnumber уменьшается до 0.

Откройте блок Time Scope, вторая и третья строки возможностей показывают синус и косинус волны, которые мы захватили в FIFO. На следующем рисунке показаны формы волны возможностей.

Сводные данные

В этом примере показано, как использовать такие функции, как режим external mode, интерфейс AXI и блоки HDL FIFO, чтобы тестировать в проекте Zynq, захватывать быстрые данные FPGA и возвращать их обратно в Simulink для анализа. Аналогичный мониторинг можно осуществлять с помощью инструментов поставщиков FPGA, таких как ChipScope™ или SignalTap™. Но сила этого подхода в том, что вы можете получить все преимущества визуализации Simulink, как различные блоки scope, и вы также можете создать свои собственные пользовательские элементы управления, триггеры или квалификаторы в Simulink.