В этом примере показов, как использовать HDL Workflow Advisor для запуска HDL- рабочих процессов из командной строки и функциональности 'Экспорта to скрипта'.
Этот пример является пошаговым руководством, которое помогает познакомить вас с интерфейсом командной строки рабочего процесса HDL.
Используя Интерфейс командной строки рабочего процесса HDL, можно запустить ту же последовательность шагов и управлять теми же настройками строения, которые доступны в HDL Workflow Advisor для следующих рабочих процессов:
Типовой ASIC/FPGA
FPGA под ключ
Генерация ядра IP
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.
Используйте 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 в любое время. Для этого убедитесь, что загруженная модель совпадает с моделью, используемой в скрипте, и выберите в меню File «Import from script».
После импорта все параметры скрипта будут заполнены в HDL Workflow Advisor.
В некоторых случаях можно избежать повторного выполнения всех шагов в 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, а затем экспортировать в скрипт для итерационного или автоматического использования.