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

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

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

sim('HalfWaveRectifier_HDL')

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

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

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

sschdladvisor('HalfWaveRectifier_HDL')

Эта команда обновляет кэш советника модели и открывает 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-код на Аппаратной платформе. Для получения дополнительной информации смотрите, Развертывают модели объекта управления Simscape в FPGA Speedgoat модули IO.

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

Функции

Похожие темы