exponenta event banner

Создание кода HDL с помощью Simscape HDL Workflow Advisor

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

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

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

  • Моделирование реализации ЛПВП в режиме реального времени с использованием аппаратного моделирования в цикле (HIL)

Основные шаги советника по рабочим процессам HDL 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). Помощник по рабочим процессам HDL:

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

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

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

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

  8. Создайте код HDL:

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

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

    3. Создание кода с помощью makehdl функция.

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

  • События

  • Графики режимов

  • Задержки

  • Включенные параметры времени выполнения

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

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

Создание кода HDL для модели Simscape с помощью помощника по рабочим процессам Simscape HDL

В этом примере показано, как преобразовать модель 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. Чтобы сравнить результаты моделирования базовой линии с последующими итерациями, удалите ограничение точки данных в блоке области, помеченном как блок области нагрузки и запишите сигнал, который вводит данные в блок области, включив ведение журнала данных в инспекторе данных моделирования в.

    1. Откройте блок «Область». Щелкните Вид > Свойства конфигурации. На вкладке Logging снимите флажок Limit data points to last.

    2. Щелкните правой кнопкой мыши соединение с блоком «Область» и выберите Log selected signals. Значок регистрации появляется над сигналом.

    Baseline model of a full-wave bridge rectifier.

  3. Моделирование модели и просмотр результатов в инспекторе расчетных данных.

    %% 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

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

    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'}

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

  5. В сети Simscape можно заменить источник периодического напряжения блоком источника управляемого напряжения блоком синусоидальной волны вне сети.

    1. Удалите блок источника переменного напряжения.

    2. Добавьте блок синусоидальной волны из библиотеки Simulink > Sources.

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

    4. Добавьте блок источника управляемого напряжения из библиотеки SimscapeFoundation Electrical Electrical Sources.

    5. Подключите блок синусоидальной волны к блоку преобразователя Simulink-PS и блок преобразователя Simulink-PS к блоку источника управляемого напряжения.

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

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

    1. Установите для параметра Amplitude значение sqrt(2)*120.

    2. Установите для параметра Frequency (rad/sec) значение 60*2*pi.

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

  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. Моделирование модели и сравнение результатов с результатами базовой линии в инспекторе данных моделирования.

    % 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. Чтобы выполнить будущие проверки хода выполнения для Simscape HDL Workflow Advisor, добавьте и подключите блок цифровых часов из библиотеки Simulink > Sources и блок отображения из библиотеки SimulinkSinks, как показано на рисунке. Для цифрового тактового генератора установите параметр Sample time в значение Ts.

    HDL compatible model including the Digital Clock and Display blocks

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

    Схема модели обновляется, и отображается панель Легенда синхронизации (Timing Legend).

  11. Настройте модель для моделирования в реальном времени.

    1. Настройте модель Simulink для моделирования с фиксированным шагом и фиксированной стоимостью. В окне Параметры конфигурации (Configuration Parameters) щелкните Решатель (Solver) и задайте:

      • Введите для Fixed-step

      • Решатель для discrete (no continuous states)

    2. Настройте сеть Simscape для моделирования с фиксированным шагом и фиксированной стоимостью. Для блока конфигурации решателя:

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

      • Убедитесь, что для типа решателя установлено значение Backward Euler.

      • Определить Ts для времени Sample.

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

    % 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. Выберите Совместимость генерации кода > Проверить конфигурацию решателя, затем щелкните Запустить эту задачу.

    2. Выберите Проверить совместимость моделей и нажмите кнопку Запустить эту задачу.

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

  4. Извлеките коэффициенты state-space. Выберите Преобразование пространства состояния (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 модели. Выберите Создание модели реализации > Создание модели реализации и щелкните Выполнить эту задачу.

    Когда 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:

    • Цифровые часы, дисплей, синусоидальная волна и напряжение нагрузки - остатки от исходной модели

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

    • Тип данных Conversion1, Тип данных Conversion2 - преобразует типы данных двойной и одинарной точности. Создание кода HDL требует данных с одной точностью

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

    • Напряжение нагрузки - блок объема, отображающий напряжение нагрузки.

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

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

    2. Щелкните правой кнопкой мыши входной сигнал в блоке «Область» и выберите «Регистрировать выбранные сигналы».

    Блок Отображение (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. Откройте окно Configuration Parameters из модели реализации HDL. Разверните узел Создание кода HDL и выберите Отчет. Установите флажки для параметров Создать отчет об отслеживании и Создать отчет об использовании ресурсов.

    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, содержащий все сгенерированные ошибки или предупреждения. Отчет содержит ссылку на отчет об использовании ресурсов, в котором описываются потребности в ресурсах для развертывания FPGA.

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

    Чтобы создать код HDL для развертывания на указанном целевом объекте, используйте помощник по рабочим процессам HDL.

См. также

Блоки

Блоки Simscape

Функции

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

Подробнее