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

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

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

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

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

Шаги HDL Workflow Advisor Simscape

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

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

  2. Гарантируйте, что модель содержит только линейный или переключила линейные блоки при помощи функции simscape.findNonLinearBlocks. Эта функция обнаруживает нелинейные блоки в вашей модели Simscape. Функция возвращает номер и тип сетей, то есть, линейный, переключенный линейный, или нелинейный, на основе блоков, которые содержит сеть. Функция также возвращает имена любых блоков, которые приводят к нелинейным уравнениям. Обновите или замените любые блоки, которые приводят к нелинейным уравнениям.

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

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

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

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

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

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

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

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

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

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

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

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

    1. Сконфигурируйте модель Simulink для генерации HDL-кода путем выполнения функции hdlsetup. Функция hdlsetup конфигурирует решатель фиксированного шага для совместимости генерации HDL-кода и указывает, что симуляция запускается и времена остановки.

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

    3. Сгенерируйте код с помощью функции makehdl.

Ограничения

HDL Workflow Advisor Simscape не работает на сети Simscape, которые содержат:

  • События.

  • Графики режима.

  • Задержки.

  • Enabled параметры периода выполнения.

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

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

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

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

Образцовая подготовка

Подготовить вашу модель Simscape к преобразованию в HDL-код для развертывания FPGA:

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

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

  2. Чтобы сравнить базовые результаты симуляции с результатами измененных версий модели позже, удалите ограничение точки данных на блок scope Load Voltage и включите регистрацию данных Инспектору Данных моделирования для сигнала что входные данные к осциллографу.

    1. В параметрах конфигурации для осциллографа, для параметров Logging, очищают опцию, чтобы ограничить точки данных.

    2. Щелкните правой кнопкой по строке связи к блоку scope Load Voltage и выберите Log selected signals.

    Значок журналирования отмечает сигнал в модели.

  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

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

    Базовые результаты симуляции как ожидалось для двухполупериодного напряжения загрузки мостового выпрямителя.

  4. HDL Workflow Advisor Simscape не может преобразовать нелинейные сети в HDL-код. Прежде, чем запустить советника, идентифицируйте и замените блоки, которые заставляют вашу сеть быть нелинейной. Чтобы идентифицировать блоки, используйте функцию 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 периодический источник путем добавления Simscape Управляемый Исходный блок Напряжения в сети Simscape с блоком Simulink Sine Wave вне сети. Дополнительное преимущество - то, что можно сконфигурировать частоту и амплитуду для блока Sine Wave во время выполнения во время симуляции в реальном времени.

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

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

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

    4. Добавьте Управляемый Исходный блок Напряжения от библиотеки Simscape / Foundation Library / Electrical / Electrical Sources.

    5. Соедините блок Sine Wave с блоком Simulink-PS Converter и блоком Simulink-PS Converter к Управляемому Исходному блоку Напряжения.

  6. Модель Simulink сконфигурирована для симуляции переменного шага. Если вы задаете шаг расчета блока Sine Wave как -1 для наследования шага расчета, симуляция генерирует предупреждение. Вместо этого задайте шаг расчета для Синусоиды как 0 при помощи переменной рабочей области, которую можно позже настроить для улучшения скорости симуляции или точности. Удаленный Исходный блок напряжения переменного тока имеет Peak amplitude sqrt(2)*120 V и Frequency 60 Hz.

    Сконфигурируйте блок Sine Wave.

    1. Задайте шаг расчета в рабочей области.

      Ts = 1e-5;

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

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

    4. Установите параметр Sample time на 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);

    Результаты подобны базовым результатам.

  9. Чтобы исследовать прогресс HDL Workflow Advisor Simscape позже, добавьте и соедините блок Digital Clock от библиотеки Simulink Sources и блок Display от библиотеки Simulink / Sinks, как показано в фигуре. Для Электронных часов задайте Ts для параметра Sample time.

  10. Модель в настоящее время моделирует в непрерывное время с помощью решателя переменного шага. Для оперативной симуляции решатель фиксированного шага требуется для симуляции дискретного времени. Цвета шага расчета и аннотации помогают вам определить, содержит ли ваша модель какие-либо непрерывные настройки. Чтобы включить цвета шага расчета и аннотации, в окне модели Simulink, выбирают Display> Sample Time> All.

    Обновления диаграммы модели и отображения Легенды Шага расчета.

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

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

      • Установите Type на Fixed-step.

      • Установите Solver на discrete (no continuous states).

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

      • Выберите Use локальный решатель.

      • Гарантируйте, что Solver type установлен в Backward Euler.

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

  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);

    Результаты подобны базовым результатам.

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

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

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

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

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

      open_system('ssc_bridge_rectifier_hdl')

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

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

    sschdladvisor('ssc_model')

    HDL Workflow Advisor Simscape открывается.

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

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

    2. Выберите Check switched linear и затем нажмите Run this task.

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

  4. Извлеките коэффициенты пространства состояний. Выберите State-space conversion> Get state-space parameters и затем нажмите Run this task. Преобразование может занять время. Блок Display в окне модели показывает прошедшее время симуляции.

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

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

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

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

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

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

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

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

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

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

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

    Модель содержит маркированные блоки:

    • Subsystem — Подсистема Simulink, которая содержит подготовленную модель и любой сигнал, направляющий, который добавляет HDL Workflow Advisor Simscape. Для этой модели советник добавляет блок Goto, который направляет вход блока Sine Wave к HDL Subsystem.

    • Блок T — From, который направляет вход блока Sine Wave от блока Subsystem до блока HDL Subsystem.

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

    • Data Type Conversion1 — Преобразовывает двойные типы данных в один типы данных, как требуется для генерации HDL-кода.

    • HDL Subsystem — Подсистема Simulink, которая содержит совместимую версию генерации HDL-кода вашей сети Simscape. Для этой модели советник добавляет блок Goto, который направляет вход блока Sine Wave к блоку HDL Subsystem.

    • Осциллограф Отображает напряжение загрузки.

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

    1. Удалите блок T From.

    2. Скопируйте и вставьте блок Sine Wave от блока Subsystem в модель верхнего уровня.

    3. Соедините блок Sine Wave с блоком Rate Transition1.

    4. Удалите блок Subsystem, который содержит базовую модель.

    5. Включите регистрацию данных Инспектору Данных моделирования для сигнала, который переходит к блоку Scope.

  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);

    Результаты подобны базовым результатам. Ваша модель Simscape теперь преобразована в генерацию HDL-кода совместимая реализация.

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

    1. В образцовых параметрах конфигурации, для 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'));
      hdlset_param('gmStateSpaceHDL_ssc_model', 'MaskParameterAsGeneric', 'on');
      hdlset_param('gmStateSpaceHDL_ssc_model', 'Oversampling', 100);
      
      % Set SubSystem HDL parameters
      hdlset_param('gmStateSpaceHDL_ssc_model/HDL Subsystem', 'FlattenHierarchy', 'on');
      
    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.
      ### Starting HDL check.
      ### 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 0: 1 cycles.
      ### Clock-rate pipelining results can be diagnosed by running this script:...
          C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\highlightClockRatePipelining.m
      ### One or more feedback loops in the model are inhibiting optimizations. ...
          To highlight these loops in your model, click the following MATLAB ... 
          script: C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\highlightFeedbackLoop.m
      ### To clear highlighting, click the following MATLAB ...
          script: C:\Temp\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 100 times faster clock ...
          with respect to the base rate = 2e-07.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode ...
          Selection/Mode Vector To Index/Subsystem1 ...
          as C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_mul_comp ...
          as C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\nfp_mul_comp.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_add_comp ...
          as C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\nfp_add_comp.vhd.
      ### Working on MultiplyAndAdd_2_entries ...
          as C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\MultiplyAndAdd_2_entries.vhd.
      ### Working on MultiplyAndAdd_1_entries ...
          as C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\MultiplyAndAdd_1_entries.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_uminus_comp ...
          as C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\nfp_uminus_comp.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_relop_comp ...
          as C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\nfp_relop_comp.vhd.
      ### Working on HDL Subsystem_tc ...
          as C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem_tc.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem ...
          as C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem.vhd.
      ### Generating package file ...
          C:\Temp\hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem_pkg.vhd.
      ### Generating HTML files for code generation report ...
          at gmStateSpaceHDL_ssc_model_codegen_rpt.html
      ### Creating HDL Code Generation Check Report HDL_Subsystem_report.html
      ### HDL check for 'gmStateSpaceHDL_ssc_model' complete ...
          with 0 errors, 0 warnings, and 3 messages.
      ### HDL code generation complete.

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

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

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

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

Блоки

Блоки Simscape

Функции

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

Больше о