Сгенерируйте HDL-код, используя Simscape HDL Workflow Advisor

Если у вас есть лицензия HDL- Coder™, можно сгенерировать HDL-код из модели Simscape™ для развертывания на платформах FPGA с помощью Simscape HDL Workflow Advisor. Simscape HDL Workflow Advisor генерирует Simulink® реализация вашей модели Simscape затем преобразует модель Simulink в HDL-код с помощью HDL Coder. Преобразование вашей модели Simscape в HDL-код позволяет вам:

  • Ускорите симуляцию физических систем с помощью оптимизированной реализации моделей Simscape

  • Быстрые прототипирования с использованием возможностей реконфигурируемости и параллелизма FPGA

  • Симулируйте реализацию HDL в режиме реального времени с помощью симуляции оборудования в цикле (HIL)

Основные шаги HDL Workflow Advisor Simscape

Преобразуйте модель Simscape в HDL-код с помощью Simscape HDL Workflow Advisor путем выполнения следующих шагов.

  1. Сгенерируйте результаты базовой линии для модели Simscape.

  2. Убедитесь, что модель содержит только линейные или коммутируемые линейные блоки при помощи simscape.findNonlinearBlocks функция.

  3. Убедитесь, что результаты симуляции модели совпадают с результатами базовой линии.

  4. Сконфигурируйте сеть Simscape для симуляции в реальном времени и генерации HDL-кода:

    1. Добавьте блоки, которые позволяют вам контролировать прогресс рабочего процесса HDL с точки зрения времени симуляции.

    2. Отображение информации о шаге расчета.

    3. Сконфигурируйте сеть Simscape для симуляции с фиксированными и фиксированными затратами.

  5. Убедитесь, что результаты симуляции дискретной модели совпадают с результатами базовой линии.

  6. Запустите задачи Simscape HDL Workflow Advisor при помощи sschdladvisor (HDL Coder) функция. Далее HDL Workflow Advisor:

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

    • Извлекает коэффициенты пространства состояний для сети Simscape.

    • Генерирует совместимую с генерацией HDL-кода реализацию сети Simscape.

  7. Убедитесь, что результаты симуляции от реализации, совместимой с генерацией HDL-кода, соответствуют результатам базового уровня.

  8. Сгенерируйте HDL-код:

    1. Запустите hdlsetup (HDL Coder) функция. hdlsetup функция конфигурирует решатель с фиксированным шагом для генерации HDL-кода и задает начало и времена остановки симуляции.

    2. Сохраните параметры модели и настройки генерации модели валидации.

    3. Сгенерируйте код используя makehdl функция.

Перед запуском Simscape HDL Workflow Advisor настройте сеть, чтобы исключить:

  • События

  • Режимные графики

  • Задержки

  • Включенные параметры времени запуска

  • Периодические источники

  • Нелинейности, которые являются результатом сетевой связности - если ваша модель действительно содержит нелинейность этого рода, sschdladvisor функция может запустить все задачи к завершению, но генерирует выход с нулевым значением.

Сгенерируйте HDL-код для модели Simscape с помощью Simscape HDL Workflow Advisor

В этом примере показано, как преобразовать вашу модель Simscape в HDL-код с помощью Simscape HDL Workflow Advisor. Чтобы сконфигурировать сеть Simscape и модель Simulink для симуляции в реальном времени и генерации HDL-кода, смотрите Подготовку модели. Чтобы открыть версию модели, которая уже подготовлена для использования Simscape HDL Workflow Advisor, смотрите Сгенерировать HDL-код при помощи Simscape HDL Workflow Advisor.

Подготовка модели

Чтобы подготовить модель Simscape для развертывания FPGA:

  1. Откройте ssc_bridge_rectifier моделировать и показ скрытые имена блоков. В MATLAB® в командной строке введите

    baselineModel = 'ssc_bridge_rectifier';
    load_system(baselineModel)
    set_param(baselineModel,'HideAutomaticNames','off')
    open_system(baselineModel)

  2. Чтобы сравнить результаты симуляции базовой линии с последующими итерациями, удалите ограничение точки данных на Scope блоке, маркированном блоком Load Voltage scope, и соберите сигнал, который вводит данные в блок Scope, включив логгирование данных в Simulation Data Inspector для.

    1. Откройте Scope блок. Щелкните View > Configuration Properties. На вкладке Logging очистите Limit data points to last.

    2. Щелкните правой кнопкой мыши соединение с блоком Scope и выберите Log selected signals. Логгирующий значок появляется над сигналом.

    Baseline model of a full-wave bridge rectifier.

  3. Симулируйте модель и просмотрите результаты в Данные моделирования Inspector.

    %% Simulate baseline model
    sim(baselineModel)
    
    %% Get Simulation Data Inspector run IDs for 
    runIDs = Simulink.sdi.getAllRunIDs;
    runID = runIDs(end);
    run = Simulink.sdi.getRun(runID);
    signal1 = run.getSignalByIndex(1);
    % run.signalCount
    signal1.checked = true;
    Simulink.sdi.view

    При необходимости нажмите пробел на клавиатуре, чтобы соответствовать графику Данные Моделирования Inspector для просмотра.

    Simulation Data Inspector results from the baseline model.

    Симуляция базовой линии возвращает ожидаемые результаты для напряжения нагрузки полноволнового мостового выпрямителя.

  4. Перед запуском советника идентифицируйте и замените блоки, которые вызывают нелинейность вашей сети. Чтобы идентифицировать блоки, используйте simcape.findNonlearBlocks функция.

    simscape.findNonlinearBlocks(baselineModel)
    Found network that contains nonlinear equations in the following blocks:
        'ssc_bridge_rectifier/AC Voltage Source'
    
    The number of linear or switched linear networks in the model is 0.
    The number of nonlinear networks in the model is 1.
    
    ans =
    
      1×1 cell array
    
        {'ssc_bridge_rectifier/AC Voltage Source'}

    Модель содержит блок AC Voltage Source, периодический источник, который приводит к нелинейным уравнениям.

  5. Можно заменить периодический источник на блок Controlled Voltage Source в сети Simscape с блоком Sine Wave вне сети.

    1. Удалите AC Voltage Source блок.

    2. Добавьте блок Sine Wave из библиотеки Simulink > Sources.

    3. Добавьте блок Simulink-PS Converter из библиотеки Simscape > Utilities.

    4. Добавьте Controlled Voltage Source блок из библиотеки <reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0>.

    5. Соедините блок Sine Wave с блоком Simulink-PS Converter и блок Simulink-PS Converter с блоком Controlled Voltage Source.

    Modified model. The Controlled Voltage Source block and Sine Wave block replaced the AC Voltage Source block in the baseline model.

  6. Сконфигурируйте блок Sine Wave так, чтобы он совпадал с параметрами блока AC Voltage Source, который вы удалили.

    1. Установите параметр Amplitude равным sqrt(2)*120.

    2. Установите параметр Frequency (rad/sec) равным 60*2*pi.

    3. Установите параметр Sample time равным 1e-5. Затем щелкните значок с тремя точкамиIcon with three vertical dots рядом с полем с Sample time и выберите Create variable. Назовите переменную Ts и нажмите Create. Теперь можно просматривать и редактировать эту переменную в рабочей рабочей области.

  7. Убедитесь, что нет блоков, которые заставляют вашу сеть быть нелинейной.

    % Simulate
    sim(baselineModel)
    
    % Check for nonlinear blocks
    simscape.findNonlinearBlocks(baselineModel)
    The number of linear or switched linear networks in the model is 1.
    
    ans =
    
      0×0 empty cell array

    Модель содержит только блоки, которые приводят к линейным или коммутируемым линейным уравнениям.

  8. Симулируйте модель и сравните результаты с результатами базовой линии в Данные моделирования Inspector.

    % Get Simulation Data Inspector run IDs 
    runIDs = Simulink.sdi.getAllRunIDs;
    runBaseline = runIDs(end - 1);
    runSwitchedLinear = runIDs(end);
    
    % Open the Simulation Data Inspector
    Simulink.sdi.view
    
    compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...
        runSwitchedLinear);

    Simulation data inspector output comparing the Run 2 modifed model to the baseline. The inspector superimposes the new plot on the old and displays a plot of their difference below.

    Результаты аналогичны результатам базовой линии.

  9. Чтобы выполнить будущие проверки прогресса для HDL Workflow Advisor Simscape, добавьте и соедините Digital Clock блок от Simulink> Sources библиотека и Display блок из библиотеки <reservedrangesplaceholder4> <reservedrangesplaceholder3>, как показано в рисунке. Для Digital Clock установите параметр Sample time равным Ts.

    HDL compatible model including the Digital Clock and Display blocks

  10. Модель stil устанавливает, чтобы использовать решатель с переменным шагом. Для симуляции в реальном времени необходимо использовать решатель с фиксированным шагом. Используйте шаг расчета цветов и аннотаций, чтобы помочь вам определить, содержит ли модель какие-либо непрерывные настройки. Чтобы включить шаг расчета цветов и аннотаций, на вкладке Debug нажмите Information Overlays, а в группе Sample Time выберите Colors и Text.

    Обновляется диаграмма модели и отображения панель «Легенда синхронизации».

  11. Сконфигурируйте модель для симуляции в реальном времени.

    1. Сконфигурируйте модель Simulink для симуляции с фиксированными и фиксированными затратами. В Параметры конфигурации окне нажмите Solver и установите:

      • Type с Fixed-step

      • Solver с discrete (no continuous states)

    2. Сконфигурируйте сеть Simscape для симуляции с фиксированными и фиксированными затратами. Для блока Solver Configuration:

      • Выберите Использовать локальный решатель.

      • Убедитесь, что для Solver type задано значение Backward Euler.

      • Задайте Ts для Sample time.

  12. Симулируйте модель и сравните результаты с результатами базовой линии в Данные моделирования Inspector.

    % Simulate
    sim(baselineModel)
    
    % Get Simulation Data Inspector run IDs 
    runIDs = Simulink.sdi.getAllRunIDs;
    runBaseline = runIDs(end - 2);
    runRealTime = runIDs(end);
    
    % Open the Simulation Data Inspector
    Simulink.sdi.view
    
    compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...
        runRealTime);

    Simulation data inspector output comparing the Run 3 modified model to the baseline. The inspector superimposes the new plot on the old and displays a plot of their difference below.

    Результаты аналогичны результатам базовой линии.

Сгенерируйте HDL-код при помощи Simscape HDL Workflow Advisor

Сгенерируйте HDL-код путем запуска Simscape HDL Workflow Advisor либо на модели Simscape, которую вы подготовили в разделе Подготовка модели, либо путем открытия ssc_bridge_rectifier_hdl модель, которая подготовлена для генерации кода.

  1. Переименуйте модель.

    • Если вы подготовили модель в разделе Подготовка модели (Model Preparation), переименуйте модель ssc_model.

    • Чтобы открыть и использовать модель, которая уже подготовлена для генерации HDL-кода, в командной строке MATLAB введите

      open_system('ssc_bridge_rectifier_hdl')

      Сохраните модель в локальную директорию как ssc_model.

    The HDL-ready bridge rectifier model. The labels and Simulink blocks and connections are now red.

  2. Запустите Simscape HDL Workflow Advisor.

    sschdladvisor('ssc_model')

    Откроется Simscape HDL Workflow Advisor.

  3. Запустите проверку совместимости генерации кода.

    1. Выберите Code generation compatibility > Check solver configuration , затем нажмите Run This Task.

    2. Выберите Check model compatibility, затем нажмите Run this task.

    Советник сообщает, когда модель проходит эти проверки.

  4. Извлеките коэффициенты пространства состояний. Выберите State-space conversion и нажмите Run All. Преобразование может занять некоторое время.

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

    • Количество состояний: 5

    • Количество входов: 1

    • Количество выходов: 1

    • Количество режимов: 7

    • Количество дифференциальных переменных: 1

    • Дискретный шаг расчета: 1e-05

    ПараметрРазмер параметра
    A5 x 5 x 7
    B5 x 1 x 7
    F05 x 1 x 7
    C1 x 5 x 1
    D1 x 1 x 1
    Y01 x 1 x 1

    Размер состояния, режима и данных о параметрах помогает вам оценить, сколько ресурсов FPGA требуется для развертывания модели. Чем выше значения, тем больше ресурсов FPGA требуется. Входные и выходные данные указывают количество и тип ввода-вывода соединений, необходимых для развертывания приложений и визуализации.

  5. Сгенерируйте HDL- реализации своей модели. Выберите Implementation model generation > Generate implementation model и нажмите Run this task.

    Когда Simscape HDL Workflow Advisor генерирует модель реализации, советник сообщает, что задача прошла, и отображает ссылку на сгенерированную модель реализации, которая называется gmStateSpaceHDL_ssc_model.

  6. Откройте сгенерированную модель реализации, нажав gmStateSpaceHDL_ssc_model.

    The HDL implementation model. The Simulink blocks from the previous model connect to an interface system that contains the HDL Subsystem block.

    Модель содержит блоки из исходной модели, а также новые блоки, поддерживающие HDL Workflow Advisor:

    • Digital Clock, Display, Sine Wave и Load Voltage - остатки от вашей исходной модели

    • Скорость Transition1 - обрабатывает передачу данных между блоками, работающими с различными скоростями.

    • Тип данных Conversion1, тип данных Conversion2 - преобразуется между типами данных двойной и одинарной точности. Для генерации HDL-кода требуются данные с одной точностью

    • Подсистема HDL - содержит совместимую с генерацией HDL-кода версию вашей сети Simscape.

    • Load Voltage - Scope блок, который отображает напряжение нагрузки.

  7. Подготовьте модель реализации для сравнения симуляции с базовыми результатами:

    1. Можно настроить автоматически сгенерированную модель и удалить остаточные блоки по мере необходимости, чтобы улучшить чистоту модели. Блок Digial Clock и блок Display излишни, но не будет препятствовать результатам симуляции.

    2. Щелкните правой кнопкой мыши входной сигнал в блок Scope и выберите Log Selected Signals.

    Блок Display в окне модели показывает прошедшее время симуляции.

    The model colors change after you complete a run.

  8. Чтобы убедиться, что HDL-подсистема соответствует вашей исходной модели Simscape, моделируйте модель и сравните результаты с результатами симуляции базовой линии.

    % Simulate
    sim('gmStateSpaceHDL_ssc_model')
    
    % Get Simulation Data Inspector run IDs 
    runIDs = Simulink.sdi.getAllRunIDs;
    runBaseline = runIDs(end - 3);
    runHDLImplementation = runIDs(end);
    
    % Open the Simulation Data Inspector
    Simulink.sdi.view
    
    compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...
        runHDLImplementation);

    Simulation data inspector output comparing the Run 4 modified model to the baseline. The inspector superimposes the new plot on the old and displays a plot of their difference below.

    Результаты аналогичны результатам базовой линии. Simscape модели совместим с генерацией HDL-кода.

  9. Сгенерируйте HDL-код из реализации:

    1. Доступ к окну Параметров конфигурации из модели реализации HDL. Разверните HDL Code Generation и выберите Report. Установите флажки для Generate traceability report и Generate resource utilization report опций.

    2. Запустите hdlsetup функция.

      hdlsetup('gmStateSpaceHDL_ssc_model')
    3. Сохраните настройки модели и параметра подсистемы.

      hdlsaveparams('gmStateSpaceHDL_ssc_model');
      
      %% Set Model 'gmStateSpaceHDL_ssc_model' HDL parameters
      hdlset_param('gmStateSpaceHDL_ssc_model', 'FloatingPointTargetConfiguration', hdlcoder.createFloatingPointTargetConfig('NativeFloatingPoint' ...
      , 'LatencyStrategy', 'MIN') ...
      );
      hdlset_param('gmStateSpaceHDL_ssc_model', 'HDLSubsystem', 'gmStateSpaceHDL_ssc_model/HDL Subsystem');
      hdlset_param('gmStateSpaceHDL_ssc_model', 'MaskParameterAsGeneric', 'on');
      hdlset_param('gmStateSpaceHDL_ssc_model', 'Oversampling', 49);
      
      % Set SubSystem HDL parameters
      hdlset_param('gmStateSpaceHDL_ssc_model/HDL Subsystem', 'FlattenHierarchy', 'on');
      
      hdlset_param('gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/Generate Mode Vector', 'Architecture', 'MATLAB Datapath');
      
      % Set SubSystem HDL parameters
      hdlset_param('gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/State Update/Multiply State', 'SharingFactor', 1);
      
    4. Сохраните настройки генерации модели валидации.

      HDLmodelname = 'gmStateSpaceHDL_ssc_model';
      hdlset_param(HDLmodelname, 'GenerateValidationModel', 'on');
    5. Сгенерируйте HDL-код.

      makehdl('gmStateSpaceHDL_ssc_model/HDL Subsystem')
      ### Generating HDL for 'gmStateSpaceHDL_ssc_model/HDL Subsystem'.
      ### Using the config set for model gmStateSpaceHDL_ssc_model for HDL code generation parameters.
      ### Running HDL checks on the model 'gmStateSpaceHDL_ssc_model'.
      ### Begin compilation of the model 'gmStateSpaceHDL_ssc_model'...
      ### Applying HDL optimizations on the model 'gmStateSpaceHDL_ssc_model'...
      ### The code generation and optimization options you have chosen have introduced additional pipeline delays.
      ### The delay balancing feature has automatically inserted matching delays for compensation.
      ### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays.
      ### Output port 1: 1 cycles.
      ### Begin model generation.
      ### Model generation complete.
      ### Clock-rate pipelining results can be diagnosed by running this script: hdlsrc\gmStateSpaceHDL_ssc_model\highlightClockRatePipelining.m
      ### To clear highlighting, click the following MATLAB script: hdlsrc\gmStateSpaceHDL_ssc_model\clearhighlighting.m
      ### Generating new validation model: gm_gmStateSpaceHDL_ssc_model_vnl.
      ### Validation model generation complete.
      ### Begin VHDL Code Generation for 'gmStateSpaceHDL_ssc_model'.
      ### MESSAGE: The design requires 49 times faster clock with respect to the base rate = 3.33333e-06.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem7 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem6 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem5 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block1.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem4 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block2.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem3 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block3.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem2 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block4.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem1 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block5.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_mul_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_mul_single.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_add_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_add_single.vhd.
      ### Working on dot_product_2 as hdlsrc\gmStateSpaceHDL_ssc_model\dot_product_2.vhd.
      ### Working on dot_product_1 as hdlsrc\gmStateSpaceHDL_ssc_model\dot_product_1.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_uminus_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_uminus_single.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_relop_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_relop_single.vhd.
      ### Working on HDL Subsystem_tc as hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem_tc.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem as hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem.vhd.
      ### Generating package file hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem_pkg.vhd.
      ### Code Generation for 'gmStateSpaceHDL_ssc_model' completed.
      ### Creating HDL Code Generation Check Report HDL_Subsystem_report.html
      ### HDL check for 'gmStateSpaceHDL_ssc_model' complete with 0 errors, 7 warnings, and 2 messages.
      ### HDL code generation complete.

      Откроется отчет генерации HDL-кода, содержащий все сгенерированные ошибки или предупреждения. Отчет содержит ссылку на отчет об использовании ресурсов, в котором описываются потребности в ресурсах для развертывания ПЛИС.

    Сгенерированный HDL-код и модель валидации сохраняются в hdlsrc\gmStateSpaceHDL_ssc_model\html директория. Сгенерированный код сохраняется следующим HDL_Subsystem_tc.vhd.

    Чтобы сгенерировать HDL-код для развертывания на указанном объекте, используйте HDL Workflow Advisor.

См. также

Блоки

Блоки Simscape

Функции

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

Подробнее о