Начало работы с интерфейсом командной строки рабочего процесса HDL

В этом примере показов, как использовать HDL Workflow Advisor для запуска HDL- рабочих процессов из командной строки и функциональности 'Экспорта to скрипта'.

Введение

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

Используя Интерфейс командной строки рабочего процесса HDL, можно запустить ту же последовательность шагов и управлять теми же настройками строения, которые доступны в HDL Workflow Advisor для следующих рабочих процессов:

  1. Типовой ASIC/FPGA

  2. FPGA под ключ

  3. Генерация ядра IP

  4. Simulink Real-Time

Откройте модель

В этом примере мы будем использовать модель hdlcoder_sfir_fixed_stream, но Интерфейс командной строки рабочего процесса HDL может использоваться с любой моделью, которая работает с перечисленными выше рабочими процессами.

open_system('hdlcoder_sfir_fixed_stream')

Убедитесь, что в путь включены требуемые сторонние инструменты. Для примера, чтобы включить Vivado, установленную локально, в расположение окон по умолчанию, используйте следующую команду:

>> hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath','C:\Xilinx\Vivado\2017.4\bin\vivado.bat');

Затем запустите консультанта по рабочему процессу и выберите соответствующую подсистему в качестве DUT.

Setup рабочего процесса

Используйте HDL Workflow Advisor, чтобы настроить проект с нужными настройками, такой как инструмент и Device. Начните, изменив рабочий процесс на «Generic ASIC/FPGA», чтобы мы могли аннотировать модель с результатами синтеза.

Можно также задать цели высокого уровня для инструмента синтеза. Для примера попробуйте установить инструмент на «Оптимизированная скорость».

Кроме того, измените флажок «Пропустить эту задачу» для Run Implementation так, чтобы экспортированный скрипт также запустил этот шаг

Экспорт в скрипт

После ввода всех начальных настроек экспортируйте рабочий процесс в скрипт, который можно запустить непосредственно из командной строки для более быстрых итераций проектирования.

Сохраните файл как любое имя, которое вам нравится. По умолчанию будет «hdlworkflow.m». Экспортированный скрипт показан ниже:

%--------------------------------------------------------------------------
% HDL Workflow Script
% Generated with MATLAB 9.0 (R2016b Prerelease) at 10:40:45 on 31/12/2015
% This script was generated using the following parameter values:
%     Filename  : '/mathworks/devel/sandbox/cberry/work/demo/hdlworkflow.m'
%     Overwrite : true
%     Comments  : true
%     Headers   : true
%     DUT       : 'hdlcoder_sfir_fixed_stream/DUT'
% To view changes after modifying the workflow, run the following command:
% >> hWC.export('DUT','hdlcoder_sfir_fixed_stream/DUT');
%--------------------------------------------------------------------------

%   Copyright 2018 The MathWorks, Inc.

%% Load the Model
load_system('hdlcoder_sfir_fixed_stream');

%% Restore the Model to default HDL parameters
%hdlrestoreparams('hdlcoder_sfir_fixed_stream/DUT');

%% Model HDL Parameters
%% Set Model 'hdlcoder_sfir_fixed_stream' HDL parameters
hdlset_param('hdlcoder_sfir_fixed_stream', 'HDLSubsystem', 'hdlcoder_sfir_fixed_stream/DUT');
hdlset_param('hdlcoder_sfir_fixed_stream', 'ReferenceDesign', 'Default system with AXI4-Stream interface');
hdlset_param('hdlcoder_sfir_fixed_stream', 'ResetType', 'Synchronous');
hdlset_param('hdlcoder_sfir_fixed_stream', 'SynthesisTool', 'Xilinx Vivado');
hdlset_param('hdlcoder_sfir_fixed_stream', 'SynthesisToolChipFamily', 'Zynq');
hdlset_param('hdlcoder_sfir_fixed_stream', 'SynthesisToolDeviceName', 'xc7z020');
hdlset_param('hdlcoder_sfir_fixed_stream', 'SynthesisToolPackageName', 'clg484');
hdlset_param('hdlcoder_sfir_fixed_stream', 'SynthesisToolSpeedValue', '-1');
hdlset_param('hdlcoder_sfir_fixed_stream', 'TargetDirectory', 'hdl_prj/hdlsrc');


%% Workflow Configuration Settings
% Construct the Workflow Configuration Object with default settings
hWC = hdlcoder.WorkflowConfig('SynthesisTool','Xilinx Vivado','TargetWorkflow','Generic ASIC/FPGA');

% Specify the top level project directory
hWC.ProjectFolder = 'hdl_prj';

% Set Workflow tasks to run
hWC.RunTaskGenerateRTLCodeAndTestbench = true;
hWC.RunTaskCreateProject = true;
hWC.RunTaskRunSynthesis = true;
hWC.RunTaskRunImplementation = false;
hWC.RunTaskAnnotateModelWithSynthesisResult = true;

% Set properties related to 'RunTaskGenerateRTLCodeAndTestbench' Task
hWC.GenerateRTLCode = true;
hWC.GenerateRTLTestbench = false;
hWC.GenerateCosimulationModel = false;
hWC.CosimulationModelForUseWith ='Mentor Graphics ModelSim';
hWC.GenerateValidationModel = false;

% Set properties related to 'RunTaskCreateProject' Task
hWC.Objective = hdlcoder.Objective.None;
hWC.AdditionalProjectCreationTclFiles ='';

% Set properties related to 'RunTaskRunSynthesis' Task
hWC.SkipPreRouteTimingAnalysis = false;

% Set properties related to 'RunTaskRunImplementation' Task
hWC.IgnorePlaceAndRouteErrors = false;

% Set properties related to 'RunTaskAnnotateModelWithSynthesisResult' Task
hWC.CriticalPathSource ='pre-route';
hWC.CriticalPathNumber =  1;
hWC.ShowAllPaths = false;
hWC.ShowDelayData = true;
hWC.ShowUniquePaths = false;
hWC.ShowEndsOnly = false;

% Validate the Workflow Configuration Object
hWC.validate;

%% Run the workflow
hdlcoder.runWorkflow('hdlcoder_sfir_fixed_stream/DUT', hWC);

Запуск рабочего процесса из скрипта

Выполнение скрипта непосредственно будет выполнять ваш рабочий процесс и выводить компактный набор сообщений во время выполнения в окно cmd. Если вы хотите увидеть подробную выходную информацию инструмента синтеза, нажмите на соответствующую гиперссылку «Synthesis tool log:» под желаемым заголовком задачи, чтобы открыть этот файл в редакторе MATLAB.

>> hdlworkflow
### Workflow begin.
### ++++++++++++++ Task Generate RTL Code and Testbench ++++++++++++++
### Generating HDL for 'hdlcoder_sfir_fixed_stream/DUT'.
### Starting HDL check.
### Begin VHDL Code Generation for 'hdlcoder_sfir_fixed_stream'.
### Working on hdlcoder_sfir_fixed_stream/DUT/symmetric_fir as hdl_prj\hdlsrc\hdlcoder_sfir_fixed_stream\symmetric_fir.vhd.
### Working on hdlcoder_sfir_fixed_stream/DUT as hdl_prj\hdlsrc\hdlcoder_sfir_fixed_stream\DUT.vhd.
### Creating HDL Code Generation Check Report DUT_report.html
### HDL check for 'hdlcoder_sfir_fixed_stream' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.
### ++++++++++++++ Task Create Project ++++++++++++++
### Generating Xilinx Vivado 2014.4 project: hdl_prj\vivado_prj\DUT_vivado.xpr
### Synthesis tool log: hdl_prj\hdlsrc\hdlcoder_sfir_fixed_stream\workflow_task_CreateProject.log
### Task "Create Project" successful.
### ++++++++++++++ Task Run Synthesis ++++++++++++++
### Synthesis tool log: hdl_prj\hdlsrc\hdlcoder_sfir_fixed_stream\workflow_task_RunSynthesis.log
### Task "Run Synthesis" successful.
### ++++++++++++++ Task Run Implementation ++++++++++++++
### Synthesis tool log: hdl_prj\hdlsrc\hdlcoder_sfir_fixed_stream\workflow_task_RunImplementation.log
### Task "Run Implementation" successful.
### ++++++++++++++ Task Annotate Model with Synthesis Result ++++++++++++++
### Parsing the timing file...
### Matched Source = 'hdlcoder_sfir_fixed_stream/DUT/symmetric_fir/m3_out1'
### Matched Destination = 'hdlcoder_sfir_fixed_stream/DUT/y_out_data'
### Highlighting CP 1 from 'hdlcoder_sfir_fixed_stream/DUT/symmetric_fir/m3_out1' to 'hdlcoder_sfir_fixed_stream/DUT/y_out_data' ...
### Click here to reset highlighting.
### Workflow complete.

Запуск рабочего процесса в интерактивном режиме

Интерфейс HDL Workflow Command-Line также может использоваться в интерактивном режиме. Например, после выполнения либо всего скрипта, либо просто раздела «Настройки строения рабочего процесса», объект WorkflowConfig, hWC, будет заполнен в рабочей области:

>> hWC =
GenericTurnkeyConfig with properties:
                              SynthesisTool: 'Xilinx Vivado'
                             TargetWorkflow: 'Generic ASIC/FPGA'
                              ProjectFolder: 'hdl_prj'
         RunTaskGenerateRTLCodeAndTestbench: true
                       RunTaskCreateProject: true
                        RunTaskRunSynthesis: true
                   RunTaskRunImplementation: true
    RunTaskAnnotateModelWithSynthesisResult: true
            TaskGenerateRTLCodeAndTestbench
                            GenerateRTLCode: true
                       GenerateRTLTestbench: false
                  GenerateCosimulationModel: false
                CosimulationModelForUseWith: 'Mentor Graphics ModelSim'
                    GenerateValidationModel: false
                          TaskCreateProject
                                  Objective: hdlcoder.Objective.SpeedOptimized
          AdditionalProjectCreationTclFiles: ''
                           TaskRunSynthesis
                 SkipPreRouteTimingAnalysis: false
                      TaskRunImplementation
                  IgnorePlaceAndRouteErrors: false
       TaskAnnotateModelWithSynthesisResult
                         CriticalPathSource: 'pre-route'
                         CriticalPathNumber: 1
                               ShowAllPaths: false
                              ShowDelayData: true
                            ShowUniquePaths: false
                               ShowEndsOnly: false

Можно отредактировать этот объект строения, а затем запустить рабочий процесс с измененными настройками. Например, поскольку задача «Run Implementation» была включена в предыдущем запуске, мы можем изменить критический источник пути на «post-route» с и перезапустить только задачу модели Annotate:

>> hWC.clearAllTasks;
>> hWC.RunTaskAnnotateModelWithSynthesisResult = true;
>> hWC.CriticalPathSource = 'post-route';

Затем запустите изменённые строения рабочего процесса непосредственно с помощью команды hdlcoder.runWorkflow:

>> hdlcoder.runWorkflow('hdlcoder_led_blinking/led_counter', hWC)

Импортируйте скрипт в HDL Workflow Advisor

Любые изменения, внесенные в экспортированный скрипт, также могут быть импортированы обратно в HDL Workflow Advisor в любое время. Для этого убедитесь, что загруженная модель совпадает с моделью, используемой в скрипте, и выберите в меню File «Import from script».

После импорта все параметры скрипта будут заполнены в HDL Workflow Advisor.

Сохраните программный скрипт HDL Workflow Command-Line Interface для дальнейшего использования

В некоторых случаях можно избежать повторного выполнения всех шагов в HDL Workflow Advisor только для выполнения определенных задач в Advisor. Для примера, при запуске рабочего процесса генерации ядра IP, после генерации битового потока FPGA в Build FPGA Bitstream Задача, Advisor предоставляет ссылку, которая генерирует скрипт для запуска Program Target Device Задача.

Нажмите на ссылку для hdlworkflow_ProgramTargetDevice.m в Build FPGA Bitstream Задача сгенерировать скрипт интерфейса командной строки рабочего процесса, который будет выполнять только Program Target Device Задача из существующей директории hdl_prj. Поэтому можно избежать выполнения всех шагов в рабочем процессе, чтобы просто перепрограммировать целевое устройство.

Сгенерированный скрипт является стандартным HDL скриптом CLI рабочего процесса. При запуске HDL- Рабочего процесса в интерфейсе командной строки Program Target Device Задача может выполняться независимо от предыдущих задач, пока битовый поток FPGA уже сгенерирован.

Как связанное примечание, если вы используете Download метод программирования в Program Target Device Задача, HDL Workflow Advisor копирует сгенерированный файл битового потока на карту SD на плате Zynq или Intel SoC, поэтому вам не нужно перезапускать Program Target Device Задача для загрузки битового потока. Битовый поток FPGA будет перезагружен с SD-карты автоматически в процессе загрузки Linux.

Сводные данные

Интерфейс HDL Workflow Command-Line обеспечивает простую альтернативу графическому HDL Workflow Advisor с использованием скриптов. Рабочие процессы можно сначала настроить с помощью HDL Workflow Advisor, а затем экспортировать в скрипт для итерационного или автоматического использования.