В этом примере показано, как сгенерировать 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, из которой вы генерируете код, используйте 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
.
В Сгенерировать задаче модели реализации щелкните по ссылке, чтобы открыть модель реализации. Модель содержит 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 с исходным алгоритмом Simscape, откройте и симулируйте модель валидации пространства состояний.
open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL_vnl') sim('gmStateSpaceHDL_HalfWaveRectifier_HDL_vnl')
Выход этой модели совпадает с исходной моделью Simscape. Симуляция не генерирует утверждения, который указывает, что выходные параметры соответствуют. Для более системной верификации смотрите, Подтверждают Модель Реализации HDL к Алгоритму Simscape.
В некоторых случаях ваш алгоритм Simscape не может быть совместимым для генерации модели реализации при помощи HDL Workflow Advisor Simscape. В таких случаях, запуская определенные задачи в Советнике может привести к задаче перестать работать. Чтобы изучить, как можно сделать его 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 график вычисляет разность между выходными параметрами обеих моделей. Когда выходные параметры соответствуют, ошибка является нулем.