Этот пример иллюстрирует, как динамически настроить исходный проект с помощью функции обратного вызова, основанной на исходном проекте параметрах. Кроме того, в этом примере показов, как настроить количество каналов AXI4-Stream интерфейса в исходный проект таким образом, чтобы это был интерфейс Only AXI4-Stream Master, интерфейс Only AXI4-Stream Slave или оба интерфейса.
Чтобы запустить этот пример, вы должны установить и настроить следующее программное и оборудование:
HDL Coder поддержки платформы Xilinx Zynq
Пакет поддержки Embedded Coder для платформы Xilinx Zynq
Xilinx Vivado Design Suite с поддерживаемой версией в HDL Language Support и поддерживаемыми сторонними программами и оборудованием
Набор Zynq-7000 оценки Xilinx ZC706 SoC
Мастер настройки последнего изображения SD из пакета поддержки ECoder
Вместо создания нескольких исходных проектов, которые имеют различные варианты интерфейса, ширины данных или плагины ввода-вывода, теперь у вас есть опция создать один исходный проект, который имеет различные варианты интерфейса или ширины данных в качестве параметров. Можно использовать CustomizeReferenceDesignFcn
метод для ссылки на функцию обратного вызова, которая имеет различные варианты для интерфейсов или ширины данных в вашем исходном проекте. Для примера можно создать один исходный проект и выбрать параметр исходного проекта, который имеет только AXI4-Stream Master или только AXI4-Stream Slave или оба интерфейса AXI4-Stream Master и AXI4-Stream Slave вместо создания трёх отдельных исходных проектов.
Для этой демонстрации можно рассмотреть Xilinx Zynq ZC706 AXI4-Stream исходный проект, который состоит из двух Xilinx AXI DMA, для обработки передачи данных от процессора к FPGA и наоборот, с помощью интерфейсов AXI4-Stream Master и Slave. В этом примере вы настраиваете количество AXI4-Stream каналов интерфейса с одним исходным проектом путем создания функции обратного вызова. Различные интерфейсные каналы в коде коллбэка, показанном ниже, используют другое дерево устройств. Точно так же можно изменить созданный файл определения исходного проекта, чтобы выбрать различные варианты параметров исходного проекта с помощью функции обратного вызова.
На рисунке ниже показан Stream_Channel ссылочный параметр исходного проекта и варианты интерфейса для интерфейса AXI4-Stream с исходным проектом Stream channel Selection, заданные при помощи addParameter
способ. The CustomizeReferenceDesignFcn
метод ссылается на функцию обратного вызова, которая имеет callback_CustomizeReferenceDesign имя.
Код ниже показывает функцию обратного вызова callback_CustomizeReferenceDesign
который имеет ведущие или ведомые AXI4-Stream каналы или оба канала, заданные при помощи addAXI4StreamInterface
способ. The 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. Добавьте папку demo исходный проект в путь MATLAB с помощью следующей команды:
addpath(fullfile(matlabroot,'toolbox','hdlcoder','hdlcoderdemos','customboards','ZC706'));
3. Откройте AXI4-Stream модель Master только с помощью следующей команды:
open_system('hdlcoder_AXI4StreamMaster');
DUT является аппаратной подсистемой, предназначенной для фабрики FPGA. Внутри этой DUT подсистема HDL Counter выполняет функцию master. Этот счетчик рассчитывает от 1 до 50 и соединяется с выходным сигналом yout_data который преобразуется AXI4-Stream главный интерфейс.
Можно также использовать AXI4 модель Slave only. Чтобы открыть модель, используйте следующую команду:
open_system('hdlcoder_AXI4StreamSlave');
Как показано выше, DUT имеет двухпортовую ОЗУ, которая действует как ведомая и получает данные AXI4-Stream используя ведомый интерфейс через axis_data_in входной сигнал.
4. Запустите HDL Workflow Advisor из подсистемы DUT, hdlcoder_AXI4StreamMaster/DUT
для AXI4-Stream Master only demo. Аналогично Откройте HDL Workflow Advisor из подсистемы DUT, hdlcoder_AXI4StreamSlave/DUT
для демонстрации AXI4-Stream Slave only.
Настройки целевого интерфейса уже сохранены для ZC706 в этих моделях, поэтому настройки в Задании с 1.1 по 1.3 загружаются автоматически. В Задаче 1.1 для рабочего процесса Target выбирается IP Core Generation, а для Целевой платформы - набор для оценки ZC706 Xilinx Zynq. В задаче 1.2 AXI4-Stream для исходного проекта выбран интерфейс с Stream Channel Selection. Выберите параметр исходного проекта Stream Channel следующим Master Only
для AXI4-Stream Master only demo и выберите Slave Only
как выбор параметра для AXI4-Stream Slave only demo.
Как показано на рисунке выше, можно настроить исходный проект только на ведущее AXI4-Stream или только ведомое устройство или оба AXI4-Stream ведущее и ведомое устройство путем выбора параметра Stream Channel исходного проекта. Функция обратного вызова с соответствующим Tcl оценивается в конце задачи Set Target Reference Design.
5. Если выбор параметра выбран как Master Only
, затем выбор интерфейса в задаче 1.3 показывает как AXI4 Stream Master
. Здесь интерфейс AXI4-Stream взаимодействует в главном режиме и отправляет данные в AXI4_Stream Slave 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-Stream Master только, и вы можете увидеть соединение между HDL-кодером, сгенерированным DUT IP и ведомым к памяти, сопоставленной с Xilinx AXI DMA IP. В этом исходном проекте контроллер DMA считывает данные с IP FPGA.
Аналогично, следующая схема показывает сгенерированный проект vivado с AXI4-Stream интерфейса Slave only, где FPGA IP получает потоковые данные от контроллера DMA.
7. В HDL Workflow Advisor запустите остальные задачи, чтобы сгенерировать модель интерфейса программного обеспечения, и создайте и загрузите битовый поток FPGA.
Модель интерфейса программного обеспечения сгенерирована в Задаче 4.2, Generate Software Interface Model, как показано на следующем рисунке.
AXI4-Stream блока драйверов IIO не может быть автоматически сгенерирован в модели интерфейса программного обеспечения, когда скалярная yout_data порта сопоставлена AXI4-Stream интерфейсом «AXI4-Stream Master». Прежде чем вы сгенерируете код из модели интерфейса программного обеспечения, добавьте AXI4-Stream IIO Read блока драйверов из пакета Embedded Coder Support Package for Xilinx Zynq Platform Library в браузере библиотеки Simulink.
Предусмотрена обновленная модель интерфейса программного обеспечения для эталонных проектов AXI4-Stream Master только: hdlcoder_AXI4StreamMaster_sw.slx В этой модели используются непрерывные данные отсчета от 0 до 50, которые соединяются с блоком драйвера AXI4 Stream DMA.
Нажмите кнопку Monitor & Tune на вкладке Оборудования Simulink Toolstrip. Embedded Coder создает модель, загружает исполняемый файл ARM на Zc706 оборудование. Теперь и аппаратные, и программные части проекта работают на оборудовании Zynq. FPGA IP отправляет исходные данные через контроллер DMA и AXI4-Stream интерфейс. Процессор ARM получает данные от IP FPGA и отправляет результаты в Simulink через режим external mode. Наблюдайте выходы от оборудования Zynq в момент времени Scope y_out.
Предусмотрена обновленная модель интерфейса программного обеспечения только для AXI4-Stream Slave исходного проекта: hdlcoder_AXI4StreamSlave_sw.slx В этой модели блок счетчика, который генерирует от 1 до 50 инкрементных данных, соединяется с AXI4-Stream Write DMA блока драйверов. Это означает, что контроллер DMA будет осуществлять потоковую передачу выборок данных подсчета в ядро IP HDL через подчиненный интерфейс AXI4-Stream.
Нажмите кнопку Monitor & Tune на вкладке Hardware панели инструментов модели. Embedded Coder создает модель, загружает исполняемый файл ARM на Zc706 оборудование. Теперь и аппаратные, и программные части проекта работают на оборудовании Zynq. Процессор ARM отправляет исходные данные в IP FPGA через контроллер DMA и AXI4-Stream интерфейс. Наблюдайте выходы ядра IP от оборудования Zynq на y_out Time Scope.