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

В этом примере показано, как сгенерировать HDL-код для полуволновой модели выпрямителя, которая использует блоки Simcape™. Используйте HDL Workflow Advisor Simscape, чтобы сгенерировать модель реализации HDL. Можно затем сгенерировать HDL-код для модели реализации. Смотрите Начало работы с Оборудованием Simscape в Рабочем процессе цикла.

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

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

open_system('sschdlexHalfWaveRectifierExample')

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

open_system('HalfWaveRectifier_HDL')
set_param('HalfWaveRectifier_HDL', 'SimulationCommand', 'Update')

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

open_system('HalfWaveRectifier_HDL/Simscape_system')

Полупериодный выпрямитель состоит из резистора, который является линейным блоком и диодом, который является коммутируемым линейным блоком. Модель Simscape предварительно сконфигурирована для совместимости HDL. В интерфейсах порта ввода и вывода модель имеет блоки PS-Simulink Converter и Simulink-PS Converter. Настройки решателя сконфигурированы для совместимости с HDL Workflow Advisor Simscape. Если вы открываете диалоговое окно Block Parameters для блока Solver Configuration, Использование, локальный решатель выбран и Backward Euler задан как тип Решателя. Смотрите Начало работы с Оборудованием Simscape в Рабочем процессе цикла.

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

sim('HalfWaveRectifier_HDL')
open_system('HalfWaveRectifier_HDL/Scope')

Запустите 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>

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

Чтобы запустить рабочий процесс и сравнить функциональность модели реализации HDL с исходным алгоритмом Simscape, выберите шаг модели реализации Generate, и затем выберите логику валидации Generate для флажка модели реализации. Используйте допуск логики Валидации 0.001. Щелкните правой кнопкой по модели реализации Generate, продвигаются и выбирают Run to Selected Task.

Советник генерирует модель реализации HDL и модель валидации пространства состояний. Модель реализации имеет то же имя как исходная модель Simscape и использует префиксный gmStateSpaceHDL_. Модель валидации пространства состояний имеет то же имя как модель реализации и использует постфиксный _vnl.

Откройте и исследуйте модель реализации HDL

В Сгенерировать задаче модели реализации щелкните по ссылке, чтобы открыть модель реализации. Модель содержит Simscape_system подсистема, которая содержит HDL Subsystem блок. HDL Subsystem моделирует представление пространства состояний, которое вы сгенерировали из модели Simscape.

open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL')
open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL/Simscape_system')
set_param('gmStateSpaceHDL_HalfWaveRectifier_HDL','SimulationCommand','Update')

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

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

Чтобы симулировать модель HDL Implementation, введите эти команды. Откройте блок Scope, чтобы просмотреть результаты.

sim('gmStateSpaceHDL_HalfWaveRectifier_HDL')
open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL/Scope')

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

Подтвердите алгоритм HDL

Чтобы сравнить функциональность модели реализации HDL с исходным алгоритмом Simscape, откройте и симулируйте модель валидации пространства состояний.

open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL_vnl')
sim('gmStateSpaceHDL_HalfWaveRectifier_HDL_vnl')

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

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

Сгенерируйте модель 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', 'HDLSubsystem', 'gmStateSpaceHDL_HalfWaveRectifier_HDL/Simscape_system/HDL Subsystem');
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'MaskParameterAsGeneric', 'on');
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'Oversampling', 60);

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

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

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

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

Прежде чем вы сгенерируете 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. Главный график представляет выход сгенерированной модели, и средний график представляет выход модели реализации. botton график вычисляет разность между выходными параметрами обеих моделей. Когда выходные параметры соответствуют, ошибка является нулем.

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

Функции

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте