Сгенерируйте 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'}

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

  5. Можно заменить Simscape периодический источник путем добавления блока Simscape Controlled Voltage Source в сети Simscape с блоком Simulink Sine Wave вне сети. Дополнительное преимущество - то, что можно сконфигурировать частоту и амплитуду для блока Sine Wave во время выполнения во время симуляции в реальном времени.

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

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

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

    4. Добавьте блок Controlled Voltage Source из библиотеки Simscape / Foundation Library / Electrical / Electrical Sources.

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

  6. Модель Simulink сконфигурирована для симуляции переменного шага. Если вы задаете шаг расчета блока Sine Wave как -1, для наследования шага расчета симуляция генерирует предупреждение. Вместо этого задайте шаг расчета для Sine Wave как 0 при помощи переменной рабочей области, которую можно позже настроить для улучшения скорости симуляции или точности. Удаленный блок AC Voltage Source имеет 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, как показано на рисунке. Для Digital Clock задайте Ts для параметра Sample time.

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

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

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

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

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

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

    2. Сконфигурируйте сеть Simscape для фиксированного шага, симуляции фиксированных затрат. Для блока Solver 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.

    • Блок TFrom, который направляет вход блока 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

Функции

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

Больше о