Этот пример иллюстрирует, как настроить исходный проект динамически при помощи функции обратного вызова на основе опций параметра исходного проекта. Кроме того, этот пример показывает, как можно настроить количество каналов интерфейса AXI4-Stream в исходном проекте, чтобы быть интерфейсом Only AXI4-Stream Master, интерфейсом Only AXI4-Stream Slave или обоими интерфейсы.
Чтобы запустить этот пример, необходимо было установить следующее программное и аппаратное обеспечение и настроить:
Пакет поддержки HDL Coder для платформы Xilinx Zynq
Пакет поддержки Embedded Coder для платформы Xilinx Zynq
Набор Проекта Xilinx Vivado, с поддерживаемой версией, перечисленной в Поддержке Языка HDL и Поддерживаемых Сторонних программах и Оборудовании
Оценочный комплект Xilinx Zynq-7000 SoC ZC706
Последнее изображение SD от ECoder поддерживает мастер установки пакета
Вместо того, чтобы создать несколько исходных проектов, которые имеют различный интерфейсный выбор, ширины данных или плагины ввода-вывода теперь, у вас есть опция создания одного исходного проекта, который имеет различный интерфейсный выбор или ширины данных как параметры. Можно использовать CustomizeReferenceDesignFcn
метод, чтобы сослаться на функцию обратного вызова, которая имеет различный выбор для интерфейсов или ширин данных в вашем исходном проекте. Например, можно создать один исходный проект и выбрать выбор параметра исходного проекта, который имеет только Основной AXI4-поток или только AXI4-потоковое Ведомое устройство или и AXI4-потоковые Ведущие и AXI4-потоковые Ведомые интерфейсы вместо того, чтобы создать три отдельных исходных проекта.
Для этой демонстрации можно рассмотреть AXI4-потоковый исходный проект Xilinx Zynq ZC706, который состоит из двух Xilinx AXI DMAs, чтобы обработать передачу данных от Процессора до FPGA и наоборот AXI4-потокового Ведущего устройства использования и Ведомых интерфейсов. В этом примере вы настраиваете количество каналов интерфейса AXI4-Stream с одним исходным проектом путем создания функции обратного вызова. Различный интерфейс образовывает канал в коде коллбэка, показанном ниже использования различное дерево устройств. Точно так же можно изменить созданный файл определения исходного проекта, чтобы выбрать различный выбор параметра исходного проекта с помощью функции обратного вызова.
Изображение ниже показов параметр исходного проекта Stream_Channel и интерфейсный выбор для интерфейса AXI4-Stream с исходным проектом Выбора Речного русла, заданным при помощи addParameter
метод. CustomizeReferenceDesignFcn
метод ссылается на функцию обратного вызова, которая имеет имя callback_CustomizeReferenceDesign.
Код ниже показов функция обратного вызова callback_CustomizeReferenceDesign
это имеет AXI4-потоковое Ведущее устройство или Ведомые Каналы или оба канала, заданные при помощи 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. Настройте инструмент path синтеза 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 и соединяется с your_data выходным сигналом, который сопоставлен с AXI4-потоковым ведущим интерфейсом.
Можно также использовать Ведомое устройство AXI4 только модель. Используйте следующую команду, чтобы открыть модель:
open_system('hdlcoder_AXI4StreamSlave');
Как показано выше DUT имеет Двухпортовый RAM, который действует как ведомое устройство и получает данные с помощью интерфейса AXI4-Stream Slave через axis_data_in входной сигнал.
4. Запустите HDL Workflow Advisor с подсистемы DUT, hdlcoder_AXI4StreamMaster/DUT
поскольку AXI4-потоковое Ведущее устройство только демонстрирует. Столь же Открытый HDL Workflow Advisor от подсистемы DUT, hdlcoder_AXI4StreamSlave/DUT
поскольку AXI4-потоковое Ведомое устройство только демонстрирует.
Целевые интерфейсные настройки уже сохранены для ZC706 в этих моделях, таким образом, настройки в Задаче 1.1 к 1,3 автоматически загружаются. В Задаче 1.1, Генерация Ядра IP выбрана для Целевого рабочего процесса, и оценочный комплект Xilinx Zynq ZC706 выбран для Целевой платформы. В задаче 1.2, интерфейс AXI4-Stream с Выбором Речного русла выбран для исходного проекта. Выберите выбор параметра исходного проекта Stream Channel как Master Only
поскольку AXI4-потоковое Ведущее устройство только демонстрирует и выбирает Slave Only
как выбор параметра для AXI4-потокового Ведомого устройства только демонстрируют.
Как показано на рисунке выше вас может настроить исходный проект Только к Основному AXI4-потоку или Только Ведомому или и AXI4-потоковое Ведущее устройство и Ведомое устройство путем выбора выбора параметра исходного проекта Речного русла. Функция обратного вызова с соответствующим Tcl оценена в конце Целевой задачи Исходного проекта Набора.
5. Если выбор параметра, выбранный как Master Only
, затем интерфейсный выбор в задаче 1.3 показывает AXI4 Stream Master
. Здесь, интерфейс AXI4-Stream связывается в привилегированном режиме и отправляет данные в Ведомый IP AXI4_Stream через сигнал your_data. Точно так же, Если Slave Only
выбор параметра выбран, затем интерфейсный выбор показывает AXI4 Stream Slave
. Куда, интерфейс AXI4-Stream связывается в ведомом режиме и получает данные через сигнал axis_data_in как показано ниже.
6. Щелкните правой кнопкой по задаче 4.1, Создайте Проект и выберите Run to Selected Task, чтобы вставить сгенерированное ядро IP в интерфейс AXI4-Stream с исходным проектом Выбора Речного русла. Исходный проект содержит Xilinx, IP DMA AXI, чтобы обработать потоковую передачу данных между матрицей FPGA и процессором или наоборот на основе исходного проекта соединяет интерфейсом или Только с основным AXI4-потоком или только AXI4-потоковым Ведомым устройством.
Следующая схема показывает, что сгенерированный vivado проект с AXI4-потоковым Ведущим устройством только соединяет интерфейсом с выбором, и вы видите, что связь между кодером HDL сгенерировала IP DUT и ведомое устройство Xilinx с отображенной памятью IP DMA AXI. В этом исходном проекте Контроллер DMA считывает данные из IP FPGA.
Точно так же следующая схема показывает, что сгенерированный vivado проект с AXI4-потоковым Ведомым устройством только соединяет интерфейсом с выбором, где IP FPGA получает данные о потоковой передаче от Диспетчера DMA.
7. В HDL Workflow Advisor запустите остальную часть задач сгенерировать модель программного интерфейса, и создать и загрузить поток битов FPGA.
Модель программного интерфейса сгенерирована в Задаче 4.2, Сгенерируйте Модель Программного интерфейса, как показано в следующем изображении.
AXI4-потоковый IIO блок драйверов не может быть автоматически сгенерирован в модели программного интерфейса, когда скалярный порт your_data сопоставлен с AXI4-потоковым Ведущим устройством "интерфейса AXI4-Stream". Прежде чем вы сгенерируете код из модели программного интерфейса, добавьте AXI4-потоковый IIO блок драйверов Чтения из Пакета Поддержки Embedded Coder для Библиотеки Платформы Xilinx Zynq в Браузере Библиотеки Simulink.
Обновленная модель программного интерфейса для AXI4-потокового Ведущего устройства только исходные проекты предоставлена: Текущие данные hdlcoder_AXI4StreamMaster_sw.slx от количества 0 до 50 используются в этой модели и соединяются с Потоковым блоком драйверов DMA AXI4.
Нажмите кнопку Monitor & Tune на вкладке Hardware Панели инструментов Simulink. Embedded Coder создает модель, загружает исполняемый файл ARM на оборудование Zc706. Теперь оба аппаратные и программные части проекта работают на оборудовании Zynq. IP FPGA отправляет исходные данные через контроллер DMA и интерфейс AXI4-Stream. Процессор ARM получает данные из IP FPGA и отправляет данные о результате в Simulink через режим external mode. Наблюдайте выходной сигнал от оборудования Zynq на Осциллографе времени y_out.
Обновленная модель программного интерфейса только для AXI4-потокового Ведомого исходного проекта предоставлена: hdlcoder_AXI4StreamSlave_sw.slx В этой модели, встречный блок, который генерирует 1 - 50 инкрементных данных, соединяется с AXI4-потоковым блоком драйверов DMA Записи. Это означает, что контроллер DMA передаст выборки данных о количестве потоком к ядру IP HDL через интерфейс AXI4-Stream Slave.
Нажмите кнопку Monitor & Tune на вкладке Hardware панели инструментов модели. Embedded Coder создает модель, загружает исполняемый файл ARM на оборудование Zc706. Теперь оба аппаратные и программные части проекта работают на оборудовании Zynq. Процессор ARM отправляет исходные данные в IP FPGA через контроллер DMA и интерфейс AXI4-Stream. Наблюдайте выходной сигнал ядра IP от оборудования Zynq на Time Scope y_out.