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

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

Функции

Похожие темы