Динамическое создание исходного проекта только с интерфейсом Master или только SLAVE AXI4-Stream

Этот пример иллюстрирует, как динамически настроить исходный проект с помощью функции обратного вызова, основанной на исходном проекте параметрах. Кроме того, в этом примере показов, как настроить количество каналов AXI4-Stream интерфейса в исходный проект таким образом, чтобы это был интерфейс Only AXI4-Stream Master, интерфейс Only AXI4-Stream Slave или оба интерфейса.

Prerequisities

Чтобы запустить этот пример, вы должны установить и настроить следующее программное и оборудование:

Введение

Вместо создания нескольких исходных проектов, которые имеют различные варианты интерфейса, ширины данных или плагины ввода-вывода, теперь у вас есть опция создать один исходный проект, который имеет различные варианты интерфейса или ширины данных в качестве параметров. Можно использовать 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.

Сгенерируйте ядро IP HDL только с интерфейсом AXI4-Stream Master/Only AXI4-Stream Slave

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.

Сгенерируйте исполняемый файл ARM AXI4-Stream Используя блок драйверов для исходного проекта только AXI4-Stream Master

Модель интерфейса программного обеспечения сгенерирована в Задаче 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.

Сгенерируйте исполняемый файл ARM Использование AXI4-Stream Блока драйверов только для AXI4-Stream Slave исходного проекта

Предусмотрена обновленная модель интерфейса программного обеспечения только для 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.