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

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

Почему настраивают исходный проект

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

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

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

Задавать функцию обратного вызова:

  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-потокового Ведущего Канала. В этом случае используйте 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-поток или только AXI4-потоковое Ведомое устройство или и AXI4-потоковые Ведущие и AXI4-потоковые Ведомые интерфейсы. В этом примере показано, как можно настроить каналы интерфейса AXI4-Stream, вы хотите использовать при предназначении для собственного исходного проекта для Xilinx Zynq ZC706 evaluation kit.

Этот код показывает параметр исходного проекта и интерфейсный выбор для исходного проекта my_reference_design заданный при помощи addParameter метод в plugin_rd файл. 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-потоковое Ведущее устройство или Ведомые Каналы или оба канала, заданные при помощи 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.

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

Смотрите также

|

Связанные примеры

Больше о