Динамическая настройка исходного проекта на основе параметров исходного проекта

Когда вы задаете свой собственный пользовательский исходный проект, можно динамически настроить исходный проект с помощью CustomizeReferenceDesignFcn метод hdlcoder.ReferenceDesign класс.

Зачем настраивать исходный проект

Путем настройки параметров исходного проекта вместо поддержания отдельных исходных проектов, которые имеют различные варианты интерфейса, ширины данных или ввода-вывода плагины, создайте один исходный проект, который имеет различные варианты интерфейса или ширины данных в качестве параметров. Затем можно использовать CustomizeReferenceDesignFcn метод для ссылки на функцию обратного вызова, которая имеет различные варианты для интерфейсов или ширины данных.

Для примера вместо создания отдельных исходных проектов, которые имеют разную ширину данных для интерфейсов, можно параметризовать ширину данных, а затем создать параметр исходного проекта. Когда вы запускаете IP Core Generation рабочий процесс, можно использовать параметр, чтобы выбрать ширину данных, которые вы хотите использовать. Точно так же вместо использования нескольких исходных проектов можно создать один исходный проект, который имеет только AXI4-Stream Master или только AXI4-Stream Slave или оба AXI4-Stream Master и AXI4-Stream Slave интерфейсов.

Как Исходный проект Индивидуальной настройки Работ

Чтобы определить функцию обратного вызова:

  1. В plugin_rd файл, задайте параметры исходного проекта, которые вы хотите настроить с помощью addParameter способ.

  2. Создайте MATLAB® файл, который определяет функцию обратного вызова. Вы можете использовать любое произвольное имя для функции обратного вызова.

  3. Сохраните функцию обратного вызова в той же папке, что и plugin_rd.m файл.

  4. Зарегистрируйте указатель на функцию обратного вызова в определении исходного проекта plugin_rd файл при помощи CustomizeReferenceDesignFcn способ.

Чтобы использовать различные исходные проекты индивидуальных настроек:

  1. Откройте HDL Workflow Advisor. В Set Target Device and Synthesis Tool задаче выберите IP Core Generation в качестве Target workflow и затем выберите целевую плату, для которой вы создали свой собственный пользовательский исходный проект в качестве Target platform.

  2. В Set Target Reference Design задаче, когда вы выбираете пользовательский исходный проект, который вы хотите настроить для целевой платы, HDL- Coder™ заполняет параметры исходного проекта. В зависимости от вариантов параметров, таких как заданные вами типы интерфейсов, оценивается функция обратного вызова. Запустите эту задачу.

  3. Выберите Set Target Interface задачу. В зависимости от параметра, выбранного на предыдущем шаге, выбор целевого интерфейса заполняется таблицей интерфейсов целевой платформы.

Настраиваемые параметры исходного проекта

В функции обратного вызова можно настроить эти ссылочные параметры исходного проекта. Не задавайте эти параметры в plugin_rd файл.

  • Блочный проект Tcl файла

    % ...
    
    % if ~isempty(ParamValue)
        hRD.addCustomVivadoDesign( ...
                'CustomBlockDesignTcl', 'system_top.tcl', ...
                'VivadoBoardPart',      'xilinx.com:zc706:part0:1.0'};
    
    % ...
    
  • Исходного проекта интерфейсов и свойств исходного проекта интерфейса

    Для примера можно параметризовать ширину данных главного канала AXI4-Stream. В этом случае используйте addAXI4StreamInterface метод в функции обратного вызова вместо plugin_rd файл.

    % ...
    
    % Add AXI4-Stream interface by parameterizing data width
    DataWidth = hRD.getParamValue(paramValue)
                     
    if ~isempty(DataWidth)
       hRD.addAXI4StreamInterface( 
        'MasterChannelEnable',     'true', ...
        'SlaveChannelEnable',      'true', ...
        'MasterChannelConnection', 'ByPass_0.AXI4_Stream_Slave', ...
        'SlaveChannelConnection',  'ByPass_0.AXI4_Stream_Master', ...
        'MasterChannelDataWidth',   DataWidth, ...
        'SlaveChannelDataWidth',    DataWidth);
    end
    
    % ...
    

  • IP-репозитории

    В функции обратного вызова необходимо задать конструкцию блоков Tcl файла при добавлении IP-репозиториев.

    % ...
    
    %% Add IP Repository
    hRD.addIPRepository(...
        'IPListFunction', 'mathworks.hdlcoder.vivado.hdlcoder_video_iplist',
    		 'NotExistMessage', 'IP repository not found');
    
    %% Add custom design files
    hRD.addCustomVivadoDesign( ...
        'CustomBlockDesignTcl', 'system_top.tcl', ...
        'VivadoBoardPart',      'em.avnet.com:zed:part0:1.0');
    
    
    % ...
    

Примечание

Вы не можете изменить имя исходного проекта, имя платы и поддерживаемые версии инструмента в функции обратного вызова. Эти параметры используются в Set Target Device and Synthesis Tool задаче перед оценкой функции обратного вызова, когда целевой исходный проект выбран в Set Target Reference Design задаче.

Пример: Создайте только Основной или Только Ведомый или Оба Ведомых и Главных Исходных проектов

Вместо использования нескольких исходных проектов можно создать один исходный проект, которая имеет только AXI4-Stream Master или только AXI4-Stream Slave или оба AXI4-Stream Master и AXI4-Stream Slave интерфейсов. В этом примере показано, как можно настроить каналы интерфейса AXI4-Stream, которые вы хотите использовать при нацеливании на свой собственный исходный проект для Xilinx Zynq ZC706 evaluation kit.

Этот код показывает параметр исходного проекта и варианты интерфейса для исходного проекта my_reference_design задается при помощи addParameter метод в plugin_rd файл. The CustomizeReferenceDesignFcn метод ссылается на функцию обратного вызова, которая имеет имя customcallback_axistreamchannel.

function hRD = plugin_rd()
% Reference design definition

%   Copyright 2017-2019 The MathWorks, Inc.

% Construct reference design object
hRD = hdlcoder.ReferenceDesign('SynthesisTool', 'Xilinx Vivado');

hRD.ReferenceDesignName = 'Vivado Custom Reference Design';
hRD.BoardName = 'Xilinx Zynq ZC706 evaluation kit';

% Tool information
hRD.SupportedToolVersion = {'2019.1'}; 

% ...
% ...

% Parameter For  calling AXI4 Master 
interface from Callback function
hRD.addParameter ...
('ParameterID'    ,  'stream_channel', ...
 'DisplayName'    ,  'Stream Channel', ...
 'DefaultValue'   ,  'Both Master and Slave',...
 'ParameterType'  ,   hdlcoder.ParameterType.Dropdown, ...
 'Choice'         ,   {'Both Master and Slave','Master Only','Slave Only'});

% Reference the callback function.
hRD.CustomizeReferenceDesignFcn = @my_reference_design.customcallback_axistreamchannel;

% ...
 

Когда вы создаете функцию обратного вызова, передайте infoStruct аргумент функции. Аргумент содержит исходный проект и информацию о плате в structure формат. Этот код показывает функцию обратного вызова customcallback_axistreamchannel который имеет ведущие или ведомые AXI4-Stream каналы или оба канала, заданные при помощи addAXI4StreamInterface способ.

% Control AXI Master or Slave channel selection by using callback function

function customcallback_axistreamchannel(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

paramStruct = infoStruct.ParameterStruct;

if ~isempty(paramStruct)
    paramIDCell = fieldnames(paramStruct);
    paramValue = '';
    for ii = 1:length(paramIDCell)
        paramID = paramIDCell(ii);
        if strcmp(paramID,'Both Master and Slave')
            paramValue = paramStruct.paramID;
            break;
        elseif strcmp(paramID,'Master Only')
            paramValue = paramStruct.paramID;
            break;
        elseif strcmp(paramID,'Slave Only')
            paramValue = paramStruct.paramID;
            break;
        end
    end
end
interface_type = str2double(paramValue);

if ~isempty(interface_type)

    if strcmp(interface_type, 'Both Master and 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);

    elseif strcmp(interface_type, 'Master Only')

        % add custom vivado design
        hRD.addCustomVivadoDesign( ...
            'CustomBlockDesignTcl', 'system_top.tcl', ...
            'VivadoBoardPart',      'xilinx.com:zc706:part0:1.0');

        hRD.addAXI4StreamInterface( ...
            'MasterChannelEnable',      true, ...
            'MasterChannelConnection',  'axi_dma_s2mm/S_AXIS_S2MM', ...
            'MasterChannelDataWidth',   32);


    % ...

    

Сохраните функцию обратного вызова в той же папке, что и plugin_rd файл.

Когда вы запускаете IP Core Generation рабочий процесс с Xilinx Zynq ZC706 evaluation kit как Target platform, вы видите Stream Channel параметра, отображаемую в Set Target Reference Design задаче.

Можно задать тип исходного проекта, который вы хотите использовать, а затем запустить рабочий процесс, чтобы задать целевые интерфейсы платформы, а затем сгенерировать HDL-ядро IP и затем интегрировать IP-ядро в исходный проект.

См. также

|

Похожие примеры

Подробнее о