Сгенерируйте HDL-код из моделей Simscape

Этот пример использует полуволновую модель выпрямителя, чтобы проиллюстрировать, как можно разработать модель объекта управления в Simscape™ и использовать HDL Workflow Advisor Simscape, чтобы сгенерировать HDL-код для модели.

Почему генерируют HDL-код?

Чтобы выполнить оборудование в цикле (HIL) симуляция с меньшими тактами и увеличенной точностью, можно развернуть модели объекта управления на FPGAs на борту модулей ввода-вывода Speedgoat. При помощи HDL Workflow Advisor Simscape можно сгенерировать модель реализации HDL. Можно затем сгенерировать HDL-код для модели реализации и развернуть сгенерированный код на платформы FPGA. Используя эту возможность, можно смоделировать и развернуть комплексные физические системы в Simscape, который ранее занял много времени к модели при помощи блоков Simulink™.

Модели Simscape Example для генерации HDL-кода

Для генерации HDL-кода можно разработать собственный алгоритм Simscape или выбрать из списка моделей в качестве примера, которые создаются в Simscape. Модели в качестве примера включают:

  • Повысьте конвертер

  • Мостовой выпрямитель

  • Понижающий конвертер

  • Полуволновой выпрямитель

  • Три выпрямителя фазы

  • Два идеала конвертера уровня

  • Два конвертера уровня Igbt

Все примеры снабжаются префиксом sschdlex и отправляют зафиксированный с Example. Например, чтобы открыть модель Boost Converter, в командном окне MATLAB™, введите:

load_system('sschdlexBoostConverterExample')
open_system('sschdlexBoostConverterExample/Simscape_system')

Ограничения для генерации HDL-кода из моделей Simscape

HDL Coder™ не поддерживает генерацию кода от сетей Simscape, которые содержат:

  • События

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

  • Задержки

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

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

  • Блоки Simscape™ Multibody™

  • Simscape Electrical Специализированные блоки Энергосистем

Инструкции для моделирования Simscape для совместимости HDL

1. Создайте модель Simscape при помощи коммутируемых линейных блоков. Добавьте блоки Конвертера PS Simulink во входных портах и блоки Конвертера Simulink PS в выходных портах.

2. Сконфигурируйте опции решателя для генерации HDL-кода при помощи Блока Configuration Решателя. В параметрах блоков этого блока:

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

  • Используйте Backward Euler в качестве типа Решателя.

  • Задайте дискретный шаг расчета, Ts.

3. Заключите блоки в Подсистеме и обеспечьте тестовые воздействия.

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

hdlsetup('current_model')

5. Проверьте совместимость модели Simscape при помощи функции simscape.findNonLinearBlocks. Эта функция обнаруживает нелинейные блоки в вашей модели Simscape. Обеспечьте путь к своей модели Simscape в качестве аргумента к этой функции. Это возвращает имена нелинейных блоков.

Например: проверять присутствие нелинейных блоков в Половине Модели Выпрямителя Волны, в окне команды MATLAB, введите:

simscape.findNonlinearBlocks('sschdlexHalfWaveRectifierExample')

Полуволновая модель выпрямителя

Открыть модель полупериодного выпрямителя, в Окне Команды MATLAB, введите:

open_system('sschdlexHalfWaveRectifierExample')

Сохраните эту модель локально как HalfWaveRectifier_HDL, чтобы запустить рабочий процесс.

load_system('HalfWaveRectifier_HDL')
open_system('HalfWaveRectifier_HDL/Simscape_system')
set_param('HalfWaveRectifier_HDL', 'SimulationCommand', 'update');

Использование модели Simscape переключило линейные блоки, такие как Диод и Резистор, чтобы смоделировать проект. Модель имеет блоки Конвертера PS Simulink во входном порту и блоки конвертера Simulink PS в выходных портах. Чтобы проверить, что настройки решателя сконфигурированы правильно, откройте Блок Configuration Решателя.

В верхнем уровне модели вы видите блок Simscape_system, который моделирует алгоритм полупериодного выпрямителя. Модель принимает вход Sine Wave, использует блок Rate Transition, чтобы дискретизировать непрерывный вход времени и имеет блок Scope, который вычисляет вывод. Чтобы видеть входной стимул и вывод из модели, соедините вход Sine Wave с блоком Scope.

open_system('HalfWaveRectifier_HDL')

Сконфигурировать модель полупериодного выпрямителя для совместимости HDL, в окне команды MATLAB, введите:

hdlsetup('HalfWaveRectifier_HDL')

Моделируйте и проверьте функциональность алгоритма Simscape

Чтобы видеть результаты симуляции, моделируйте модель и затем откройте блок Scope.

sim('HalfWaveRectifier_HDL')

Эти данные показывают результаты симуляции с входом синусоиды и выходными параметрами от Simscape_system.

Откройте HDL Workflow Advisor Simscape

Чтобы сгенерировать модель реализации HDL, из которой можно сгенерировать код, используйте HDL Workflow Advisor Simscape. Чтобы открыть Советника, запустите эту команду:

sschdladvisor('HalfWaveRectifier_HDL')
Updating Model Advisor cache…
Model Advisor cache updated. For new customizations, to update the cache, use the Advisor.Manager.refresh_customizations method.

Это обновляет образцовый кэш советника и открывает HDL Workflow Advisor Simscape. Чтобы узнать больше о HDL Workflow Advisor Simscape и различных задачах, щелкните правой кнопкой по той папке или задаче, и выберите What, Это?.

См. также Задачи HDL Workflow Advisor Simscape.

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

Чтобы запустить рабочий процесс, в HDL Workflow Advisor Simscape, щелкают правой кнопкой по задаче модели реализации Generate и выбирают Run to Selected Task.

Если задача передает, вы видите ссылку на модель реализации.

В некоторых случаях ваш алгоритм Simscape не может быть совместимым для генерации модели реализации использование HDL Workflow Advisor Simscape. В таких случаях, запуская определенные задачи в Советнике может привести к задаче перестать работать. Чтобы изучить, как можно сделать его HDL совместимый, смотрите

Открытая модель реализации HDL

Чтобы видеть модель реализации, в Сгенерировать задаче модели реализации, щелкают по ссылке.

open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL')

Модель содержит две подсистемы. Блок Subsystem содержит алгоритм Simscape, который вы смоделировали. От и блоки Goto в этой Подсистеме предоставляют тот же вход Sine Wave Подсистеме HDL.

Модели HDL Subsystem представление пространства состояний, которое вы сгенерировали из модели Simscape. Порты этой Подсистемы используют то же имя в качестве Конвертера PS Simulink и блоков Конвертера Simulink PS в вашей исходной модели Simscape. Если вы перешли в этой Подсистеме, вы видите несколько задержек, сумматоров, и Умножение матриц блоки, которые моделируют уравнения пространства состояний.

open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem/HDL Algorithm')

Чтобы моделировать модель HDL Implementation, введите эту команду:

sim('gmStateSpaceHDL_HalfWaveRectifier_HDL')

Откройте блок scope, чтобы просмотреть результаты.

Результаты симуляции от соответствий модели реализации HDL та из исходной модели объекта управления. Поэтому мы можем проверить, что имитационная модель объекта правильно преобразовывается в модель реализации HDL.

HDL-код сгенерирован для блока HDL Subsystem в этой модели.

Сгенерируйте модель HDL-кода и валидации

Модель HDL и установки параметров подсистемы являются сохраненным использованием этой команды:

hdlsaveparams('gmStateSpaceHDL_HalfWaveRectifier_HDL');
%% Set Model 'gmStateSpaceHDL_HalfWaveRectifier_HDL' HDL parameters
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'FloatingPointTargetConfiguration', hdlcoder.createFloatingPointTargetConfig('NativeFloatingPoint'));
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'MaskParameterAsGeneric', 'on');
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'Oversampling', 100);

% Set SubSystem HDL parameters
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem', 'FlattenHierarchy', 'on');

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

Для получения дополнительной информации см.:

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

Запустите эти команды, чтобы сохранить настройки генерации модели валидации на вашей модели Simulink:

HDLmodelname = 'gmStateSpaceHDL_HalfWaveRectifier_HDL';
hdlset_param(HDLmodelname, 'TargetDirectory', 'C:/Temp/hdlsrc');
hdlset_param(HDLmodelname, 'GenerateValidationModel', 'on');

Чтобы сгенерировать HDL-код, запустите эту команду:

makehdl('gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem');

Модель сгенерированного HDL-кода и валидации сохранена в директории C:/Temp/hdlsrc. Сгенерированный код сохранен как HDL_Subsystem_tc.vhd. Чтобы открыть модель валидации, щелкните по ссылке к gm_gmStateSpaceHDL_HalfWaveRectifier_HDL_vnl.slx в генерации кода, входит в систему Командное окно.

Откройте блок Compare при выводе Подсистемы HDL Subsystem_vnl модели валидации. Затем откройте блок Assert_Out1. Чтобы видеть результаты симуляции после генерации HDL-кода, откройте блок Scope Compare: Out1:

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

Опционально, можно развернуть HDL-код на Аппаратной платформе. Для получения дополнительной информации смотрите, Развертывают модели объекта управления Simscape на FPGA Speedgoat модули IO.

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

Функции

Похожие темы