Сгенерируйте 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. Изменяющиеся во времени блоки включают блоки, такие как Переменный Индуктор и Переменный конденсатор.

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

1. Создайте модель Simscape при помощи коммутируемых линейных блоков. Коммутируемые линейные блоки являются блоками, такими как диоды и переключатели. Эти блоки заданы линейным соотношением такой как V = IR, где R может переключиться между двумя или больше значениями в зависимости от состояния диодов или переключателей. Добавьте блоки Simulink-PS Converter во входных портах и блоки PS-Simulink Converter в выходных портах.

2. Сконфигурируйте опции решателя для генерации HDL-кода при помощи блока Solver 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 переключило линейные блоки, такие как Диоды и Резисторы, чтобы смоделировать проект. Модель имеет блоки Simulink-PS Converter во входном порту и блоки конвертера Simulink PS в выходных портах. Чтобы проверить, что вы сконфигурировали настройки решателя правильно, откройте блок Solver Configuration.

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

open_system('HalfWaveRectifier_HDL')

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

hdlsetup('HalfWaveRectifier_HDL')
### The configuration parameter values use the recommended settings for HDL code generation and does not need any modification as a part of hdlsetup. Please refer to <a href="matlab:helpview(fullfile(docroot, 'hdlcoder', 'helptargets.map'), 'msg_hdlsetup_function')">hdlsetup</a> document for best practices on model settings.

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

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

sim('HalfWaveRectifier_HDL')

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

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

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

sschdladvisor('HalfWaveRectifier_HDL')
### Running Simscape HDL Workflow Advisor for <a href="matlab:(HalfWaveRectifier_HDL)">HalfWaveRectifier_HDL</a>
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')
set_param('gmStateSpaceHDL_HalfWaveRectifier_HDL','SimulationCommand','Update')

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

Модели HDL Subsystem представление пространства состояний, которое вы сгенерировали из модели Simscape. Порты этой Подсистемы используют то же имя в качестве Simulink-PS Converter и блоков PS-Simulink Converter в вашей исходной модели 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' ...
, 'LatencyStrategy', 'MIN') ...
);
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'MaskParameterAsGeneric', 'on');
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'Oversampling', 60);

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

hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem/HDL Algorithm/Mode Selection/Generate Mode Vector', 'Architecture', 'MATLAB Datapath');

Модель использует один типы данных и генерирует 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-кода, откройте Compare: Out1 Блок Scope:

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

Оптимизируйте алгоритм HDL

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

Например, чтобы сохранить ресурсы на целевом устройстве FPGA, можно использовать оптимизацию разделения ресурсов. Разделение ресурсов является оптимизацией области, которая идентифицирует несколько функционально эквивалентных ресурсов и заменяет их на сингл. Данные мультиплексируются временем по совместно используемому ресурсу, чтобы выполнить те же операции. Смотрите Разделение ресурсов.

В модели реализации HDL можно совместно использовать блоки подсистемы маскированные, которые выполняют обновления состояния и вычисляют выход. Чтобы совместно использовать подсистемы, задайте SharingFactor на подсистемах.

Multiplyinputsubsys = 'gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem/HDL Algorithm/State Update';
Multiplystatesubsys = 'gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem/HDL Algorithm/Output';
open_system(Multiplyinputsubsys)

open_system(Multiplystatesubsys)

Совместно использовать эти подсистемы и генерировать HDL-код:

1. Задайте SharingFactor 2 на Умножать Входе и Умножьте подсистемы состояния.

hdlset_param([Multiplyinputsubsys '/Multiply Input'],'SharingFactor', 2)
hdlset_param([Multiplystatesubsys '/Multiply State'],'SharingFactor', 2)

2. Включите генерацию отчета использования ресурса и отчета оптимизации.

hdlset_param(HDLmodelname, 'resourcereport', 'on', 'optimizationreport', 'on')

3. Сгенерируйте HDL-код для блока Subsystem HDL в модели реализации.

makehdl('gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem');

Когда вы генерируете код, HDL Coder открывает отчет Генерации кода. Чтобы видеть состояние оптимизации разделения ресурсов, кликните по разделу Streaming и Sharing отчета.

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

Функции

Похожие темы