В этом примере показано, как динамически настраивать ссылочную конструкцию с помощью функции обратного вызова на основе опций ссылочных параметров конструкции. Кроме того, этот пример показывает, как Вы можете настроить количество каналов интерфейса AXI4-Stream в Вашем справочном дизайне, чтобы быть интерфейсом Only AXI4-Stream Master, интерфейсом Only AXI4-Stream Slave или обоими интерфейсы.
Для выполнения этого примера необходимо установить и настроить следующее программное и аппаратное обеспечение:
Пакет поддержки кодера HDL для платформы Xilinx Zynq
Пакет поддержки встроенного кодера для платформы Xilinx Zynq
Xilinx Vivado Design Suite с поддерживаемой версией, указанной в документе Поддержка языка HDL и Поддерживаемые сторонние инструменты и оборудование
Оценочный комплект Xilinx Zynq-7000 SoC ZC706
Последний образ SD из мастера настройки пакета поддержки Ecoder
Вместо создания нескольких ссылочных конструкций с различными вариантами интерфейса, шириной данных или подключаемыми модулями ввода-вывода теперь можно создать одну ссылочную конструкцию с различными вариантами интерфейса или шириной данных в качестве параметров. Вы можете использовать CustomizeReferenceDesignFcn метод для ссылки на функцию обратного вызова, которая имеет различные варианты для интерфейсов или ширины данных в ссылочной конструкции. Например, Вы можете создать один справочный дизайн и выбрать справочный выбор параметра дизайна, у которого есть только Основной AXI4-поток или только Раб AXI4-потока или и Рабские интерфейсы Владельца и AXI4-потока AXI4-потока вместо того, чтобы создать три отдельных справочных проекта.
Для этого образца Вы можете рассмотреть справочный Xilinx Zynq ZC706 дизайн AXI4-потока, который состоит из двух Xilinx AXI DMAs, чтобы обращаться с передачей данных от Процессора до FPGA и наоборот интерфейсов Владельца и Раба AXI4-потока использования. В этом примере можно настроить количество каналов интерфейса AXI4-Stream с помощью единой ссылочной конструкции путем создания функции обратного вызова. Различные каналы интерфейса в коде обратного вызова, показанном ниже, используют другое дерево устройств. Аналогичным образом можно изменить созданный файл определения конструкции привязки для выбора различных вариантов параметров конструкции привязки с помощью функции обратного вызова.
На рисунке ниже показан Stream_Channel ссылочный параметр конструкции и выбор интерфейса для AXI4-Stream интерфейса с эталонным дизайном выбора канала потока, указанным с помощью addParameter способ. CustomizeReferenceDesignFcn метод ссылается на функцию обратного вызова с именем callback_CustomizeReferenceDesign.

В приведенном ниже коде показана функция обратного вызова callback_CustomizeReferenceDesign , который имеет ведущие или подчиненные каналы AXI4-Stream или оба канала, указанные с помощью addAXI4StreamInterface способ. DeviceTreeName способ, показанный ниже в обратном вызове, заключается в указании файла дерева устройств, который отличается для различных каналов потока.
function callback_CustomizeReferenceDesign(infoStruct) % Reference design callback run at the end of the task Set Target Reference Design
% infoStruct: information in structure format % infoStruct.ReferenceDesignObject: current reference design registration object % infoStruct.BoardObject: current board registration object % infoStruct.ParameterStruct: custom parameters of the current reference design, in struct format % infoStruct.HDLModelDutPath: the block path to the HDL DUT subsystem % infoStruct.ReferenceDesignToolVersion: Reference design Tool Version set in 1.2 Task
hRD = infoStruct.ReferenceDesignObject; paramStruct = infoStruct.ParameterStruct;
% get the reference design parameter value
ParamValue = paramStruct.StreamChanel;
% Add the reference design interface into interface list table baed on the % reference design Parameter value
if strcmp(ParamValue, 'Both Master & Slave') % add custom Vivado design hRD.addCustomVivadoDesign( ... 'CustomBlockDesignTcl', 'system_top.tcl', ... 'VivadoBoardPart', 'xilinx.com:zc706:part0:1.0'); hRD.addAXI4StreamInterface( ... 'MasterChannelEnable', true, ... 'SlaveChannelEnable', true, ... 'MasterChannelConnection', 'axi_dma_s2mm/S_AXIS_S2MM', ... 'SlaveChannelConnection', 'axi_dma_mm2s/M_AXIS_MM2S', ... 'MasterChannelDataWidth', 32, ... 'SlaveChannelDataWidth', 32, ... 'HasDMAConnection', true); hRD.DeviceTreeName = 'devicetree_axistream_iio.dtb';
elseif strcmp(ParamValue, 'Master Only') % Block design TCl for Master Only reference design hRD.addCustomVivadoDesign( ... 'CustomBlockDesignTcl', 'system_top_masteronly.tcl', ... 'VivadoBoardPart', 'xilinx.com:zc706:part0:1.0');
hRD.addAXI4StreamInterface( ...
'MasterChannelEnable', true, ...
'SlaveChannelEnable', false, ...
'MasterChannelConnection', 'axi_dma_s2mm/S_AXIS_S2MM', ...
'MasterChannelDataWidth', 32, ...
'HasDMAConnection', true);
hRD.DeviceTreeName = 'devicetree_axistream_MasterOnly_iio.dtb';elseif strcmp(ParamValue, 'Slave Only') % Block design TCl for Slave Only reference design hRD.addCustomVivadoDesign( ... 'CustomBlockDesignTcl', 'system_top_slaveonly.tcl', ... 'VivadoBoardPart', 'xilinx.com:zc706:part0:1.0');
% add AXI4-Stream Slave only interface
hRD.addAXI4StreamInterface( ...
'MasterChannelEnable', false, ...
'SlaveChannelEnable', true, ...
'SlaveChannelConnection', 'axi_dma_mm2s/M_AXIS_MM2S', ...
'SlaveChannelDataWidth', 32, ...
'HasDMAConnection', true);
hRD.DeviceTreeName = 'devicetree_axistream_SlaveOnly_iio.dtb';
end
endТаким образом, создайте функцию обратного вызова, как показано выше, и передайте аргумент infoStruct функции обратного вызова. Аргумент содержит сведения о настройке ссылочной конструкции в формате структуры. Сохраните созданную функцию обратного вызова в папке ссылочного проекта, как показано ниже, или сохраните файл в любом месте и добавьте его в путь MATLAB.

1.Настройте путь к инструменту синтеза Xilinx Vivado с помощью следующей команды в окне команды MATLAB. При выполнении команды используйте собственный путь установки Vivado.
hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2019.2\bin\vivado.bat');
2. Добавьте папку демонстрационного образца к пути MATLAB с помощью следующей команды:
addpath(fullfile(matlabroot,'toolbox','hdlcoder','hdlcoderdemos','customboards','ZC706'));
3. Открытый Владелец AXI4-потока только использование модели после команды:
open_system('hdlcoder_AXI4StreamMaster');

DUT - это аппаратная подсистема, предназначенная для фабрики FPGA. Внутри этого DUT подсистема счетчика HDL действует как ведущая. Этот счетчик отсчитывается от 1 до 50 и подключается к выходному сигналу yout_data который отображается AXI4-Stream главный интерфейс.
Можно также использовать модель только AXI4 подчиненного устройства. Для открытия модели используйте следующую команду:
open_system('hdlcoder_AXI4StreamSlave');

Как показано выше, DUT имеет двухпортовое ОЗУ, которое действует как подчиненное устройство и принимает данные AXI4-Stream используя подчиненный интерфейс через axis_data_in входной сигнал.
4. Запустите помощник по рабочим процессам HDL из подсистемы DUT, hdlcoder_AXI4StreamMaster/DUT только для демонстрации AXI4-Stream Master. Аналогично откройте помощник по рабочим процессам HDL из подсистемы DUT, hdlcoder_AXI4StreamSlave/DUT только для демонстрационной версии AXI4-Stream Slave.
Настройки целевого интерфейса уже сохранены для ZC706 в этих моделях, поэтому настройки в задании 1.1-1.3 загружаются автоматически. В задаче 1.1 для целевого рабочего процесса выбирается поколение IP Core, а для целевой платформы - оценочный комплект Xilinx Zynq ZC706. В задаче 1.2 AXI4-Stream эталонного проектирования выбран интерфейс с выбором канала потока. Выбор ссылочного параметра конструкции Stream Channel в качестве Master Only только для демонстрационной версии AXI4-Stream Master и выберите Slave Only в качестве параметра выбора только для демонстрационной версии AXI4-Stream Slave.

Как показано в числе выше Вас может настроить справочный дизайн Только к Основному AXI4-потоку или Только Раб или и Владелец AXI4-потока и Раб, выбрав справочный выбор параметра дизайна Речного русла. Функция обратного вызова с соответствующей Tcl оценивается в конце задачи Set Target Reference Design.
5. Если выбран вариант параметра как Master Only, то выбор интерфейса в задаче 1.3 показывает как AXI4 Stream Master. В данном случае интерфейс AXI4-Stream осуществляет связь в режиме ведущего устройства и передает данные AXI4_Stream ведомый IP через сигнал yout_data. Аналогично, если Slave Only выбор параметра выбирается, затем выбор интерфейса отображается как AXI4 Stream Slave. Где интерфейс AXI4-Stream осуществляет связь в подчиненном режиме и принимает данные через сигнал axis_data_in как показано ниже.

6. Щелкните правой кнопкой мыши задачу 4.1 «Создать проект» и выберите «Выполнить до выбранной задачи», чтобы вставить сгенерированное ядро IP в интерфейс AXI4-Stream с эталонным дизайном выбора канала потока. Эталонная конструкция содержит Xilinx AXI DMA IP для обработки потока данных между фабрикой FPGA и процессором или наоборот на основе эталонного проектного интерфейса Only AXI4-Stream master или only AXI4-Stream Slave.
Следующая диаграмма показывает, что произведенный vivado проект с Владельцем AXI4-потока только соединяет выбор, и Вы видите, что связь между кодером HDL произвела IP DUT, и раб памяти нанес на карту Xilinx IP AXI DMA. В этой эталонной конструкции контроллер DMA считывает данные из IP FPGA.

Точно так же следующая диаграмма показывает, что произведенный vivado проект с Рабом AXI4-потока только соединяет выбор, где IP FPGA получает текущие данные от Диспетчера DMA.

7. В помощнике по рабочим процессам HDL выполните остальные задачи для создания модели интерфейса программного обеспечения, а также создайте и загрузите битовый поток FPGA.
Модель интерфейса программного обеспечения генерируется в задаче 4.2 «Создание модели интерфейса программного обеспечения», как показано на следующем рисунке.

Блок водителя AXI4-потока IIO не может быть автоматически произведен в модели интерфейса программного обеспечения, когда скалярный порт your_data нанесен на карту Владельцу AXI4-потока «интерфейса AXI4-Stream». Прежде чем Вы сгенерируете код из модели интерфейса программного обеспечения, добавьте AXI4-поток IIO Прочитанный блок водителя от Вложенного Пакета Поддержки Кодера для Библиотеки Платформы Xilinx Zynq в Браузере Библиотеки Simulink.
Обновленная модель интерфейса программного обеспечения для Владельца AXI4-потока только справочные проекты предоставлена: hdlcoder_AXI4StreamMaster_sw.slx Непрерывные данные от пункта обвинения 0 до 50 используются в этой модели и связаны с Потоком AXI4 блок водителя DMA.

Нажмите кнопку Monitor & Tune на вкладке Hardware панели инструментов Simulink. Embedded Coder строит модель, загружает исполняемый файл ARM на Zc706 оборудование. Теперь как аппаратные, так и программные части проекта работают на аппаратном обеспечении Zynq. IP FPGA передает исходные данные через контроллер DMA и интерфейс AXI4-Stream. Процессор ARM получает данные из IP-адреса FPGA и отправляет результирующие данные в Simulink через внешний режим. Просмотрите выходные данные аппаратных средств Zynq во время y_out Scope.

Обновленная модель интерфейса программного обеспечения только для Рабского справочного дизайна AXI4-потока предоставлена: hdlcoder_AXI4StreamSlave_sw.slx В этой модели, встречный блок, который производит 1 - 50 возрастающих данных, связан, чтобы AXI4-течь, Пишут блок водителя DMA. Это означает, что диспетчер DMA будет течь образцы данных количества к IP ядру HDL через интерфейс AXI4-Stream Slave.

Нажмите кнопку «Мониторинг и настройка» на вкладке «Оборудование» панели инструментов модели. Embedded Coder строит модель, загружает исполняемый файл ARM на Zc706 оборудование. Теперь как аппаратные, так и программные части проекта работают на аппаратном обеспечении Zynq. Процессор ARM посылает исходные данные в IP FPGA через контроллер DMA и интерфейс AXI4-Stream. Проверьте выходные данные IP-ядра от аппаратных средств Zynq на y_out временной области.
