В этом примере показано, как отладить конструкцию Zynq с использованием функций HDL Coder™ и Embedded Coder ®.
Оценочный комплект Xilinx Zynq-7000 SoC ZC702
Пакет поддержки кодера HDL для платформы Xilinx Zynq
Пакет поддержки встроенного кодера для платформы Xilinx Zynq
Следуйте разделу «Настройка оборудования и инструментов Zynq» в разделе «Начало работы с целевой платформой Xilinx Zynq», чтобы настроить ZC702 оборудование.
При создании прототипа и разработке алгоритма для платформы Zynq полезно отслеживать, настраивать и отлаживать алгоритм во время его работы на оборудовании. В этом примере показано, как использовать такие функции, как внешний режим, интерфейс AXI и блоки HDL FIFO для проверки конструкции Zynq. С помощью функции внешнего режима можно проверить внутренние данные в программном обеспечении, работающем на процессоре ARM. А поскольку ARM-процессор подключается к FPGA через интерфейс AXI, можно также контролировать и настраивать параметры на FPGA. Вместе с блоками HDL FIFO можно собирать быстрые данные FPGA и извлекать их обратно в Simulink для анализа.

Начнем с примера модели.
open_system('hdlcoder_data_capture');

Подсистема DataCapture - это аппаратная подсистема, предназначенная для фабрики FPGA. Внутри этой подсистемы подсистема OriginalDUT содержит блок Тригонометрической функции, который генерирует быстрые потоки синусоидальных и косинусных данных. Подсистема OriginalDUT представляет наш алгоритм. Если мы хотим отладить эту конструкцию, как нам захватить и отслеживать этот быстрый поток данных?
FPGA работает на гораздо более высокой тактовой частоте, чем программный код процессора ARM. Внешний режим может использоваться с программным обеспечением, работающим на процессоре ARM, для мониторинга медленно изменяющихся параметров состояния, таких как состояние FIFO, но частота выборки программного кода, например, 1KHz, недостаточно высока, чтобы захватить быстро изменяющиеся данные в FPGA, например, 50MHz.
В этом примере показано, как использовать блок FIFO для захвата быстрых данных FPGA, а затем использовать программное обеспечение процессора ARM для извлечения захваченных данных через интерфейс AXI и внешний режим.
В целях отладки мы добавляем подсистему Debug_FIFOs в DUT. Эта подсистема использует два блока HDL FIFO для захвата быстрых потоков данных для будущего поиска. Входы управляющих сигналов в подсистему Debug_FIFOs подключаются к интерфейсу DUT и через интерфейс AXI подключаются к процессору ARM.
На верхнем уровне примерной модели, когда переключатель EnureCapture включен, а переключатель RetrieveData выключен, модуль Debug_FIFOs захватит 1000 выборок данных в блоки FIFO HDL. Это этап сбора данных. Затем, когда переключатель EnureCapture включен, а переключатель RetrieveData снова включен, модуль Debug_FIFOs передает захваченные данные обратно на процессор ARM. Это фаза извлечения данных. Можно использовать ручные переключатели для переключения между этими двумя фазами для сбора и мониторинга внутренних данных FPGA.

Таким образом, для каждого сигнала, который требуется отслеживать, можно вставить в проект более Debug_FIFO модулей для сбора и извлечения данных обратно в Simulink. Можно также использовать собственные управляющие сигналы или расширить этот пример с помощью собственных триггеров или квалификаторов.
Выходной порт аппаратной подсистемы DirectDataOut выводит данные непосредственно в интерфейс AXI. Напротив, выходные порты CapturedDataOut1 и CapturedDataOut2 выводят захваченные данные из FIFO. Результаты этих двух мероприятий будут сопоставлены в последнем разделе.
Затем мы запустим HDL Workflow Advisor из модели и выполним рабочий процесс совместного проектирования HW/SW Zynq, чтобы развернуть эту конструкцию на оборудовании Zynq. Подробное пошаговое руководство см. в примере Начало работы с платформой Targeting Xilinx Zynq.
1. В задании Set Target > Set Target Device and Synthesis Tool в поле Target workflow выберите IP Core Generation. В поле Целевая платформа выберите оценочный комплект Xilinx Zynq ZC702. Запустите эту задачу.
2. В задании Set Target > Set Target Interface выберите AXI4-Lite для всех портов ввода и вывода.

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

4. Сконфигурируйте и создайте модель интерфейса программного обеспечения для внешнего режима:
В созданной модели щелкните панель Оборудование (Hardware) и перейдите в раздел Параметры оборудования (Hardware settings), чтобы открыть диалоговое окно Параметр конфигурации (Configuration Parameter).
Выберите Решатель и установите для параметра «Stop Time» значение «inf».
На панели «Оборудование» нажмите кнопку «Монитор и настройка».
Нажмите кнопку «Выполнить» на панели инструментов модели. Embedded Coder строит модель, загружает исполняемый файл ARM на оборудование Zynq ZC702, выполняет его и подключает модель к исполняемому файлу, работающему на оборудовании Zynq ZC702.
Теперь как аппаратная, так и программная части конструкции работают на аппаратном обеспечении Zynq, следующим шагом является сбор и извлечение данных с платы Zynq.
После подключения внешнего режима убедитесь, что переключатель EnureCapture находится в позиции 1, а переключатель RetrieveData - в позиции 0. Обратите внимание, что поле отображения FIFONumber увеличивается почти сразу до 1000. Это означает, что FIFO внутри FPGA-матрицы начал сбор данных и был быстро заполнен 1000 выборками данных.
Откройте блок временной области и просмотрите выходные данные DirectDataOut в первой строке. Обратите внимание, что полученные данные представляют собой, казалось бы, случайный сигнал между -1 и 1. Это связано с тем, что FPGA работает на гораздо более высокой частоте, чем программное обеспечение процессора ARM. Непосредственное использование внешнего режима для контроля быстрых данных FPGA означает выборку быстрой синусоидальной формы сигнала с очень низкой скоростью, которая генерирует случайную форму сигнала между -1 и 1.
Теперь дважды щелкните переключатель RetrieveData, чтобы включить считывание данных. Параметр EnureCapture должен быть включен. Когда переключатель RetrieveData включен, внутренняя логика, смоделированная в этом примере, посылает полученные выборки данных один за другим от FIFO процессору ARM через интерфейс AXI. Эти выборки данных затем передаются из процессора ARM в Simulink через внешний режим. Обратите внимание, что поле отображения FIFONNUMBER уменьшается до 0.
Откройте блок Временная область, вторая и третья строки области теперь показывает синус и косинус волны мы захватили в FIFO. На следующем рисунке показаны формы сигналов объема.

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