В этом примере показано, как сгенерировать HDL-код для модели полуволнового выпрямителя, которая использует блоки Simcape™. Используйте Simscape HDL Workflow Advisor, чтобы сгенерировать модель реализации. Затем можно сгенерировать 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. На входах и выходного портов модель имеет блоки Simulink-PS Converter и PS-Simulink Converter. Настройки решателя настроены на совместимость с Simscape HDL Workflow Advisor. Если вы открываете диалоговое окно Параметров блоков для блока Solver Configuration, выбирается Use local решателя и Backward Euler
задается как тип Solver. Смотрите Запуск с оборудованием Simscape - в Цикл Рабочего процесса.
Чтобы увидеть функциональность, симулируйте модель и затем откройте блок Scope.
sim('HalfWaveRectifier_HDL') open_system('HalfWaveRectifier_HDL/Scope')
Чтобы сгенерировать модель реализации HDL, из которой вы генерируете код, используйте Simscape HDL Workflow Advisor. Чтобы открыть Advisor, запустите эту команду:
sschdladvisor('HalfWaveRectifier_HDL')
### Running Simscape HDL Workflow Advisor for <a href="matlab:(HalfWaveRectifier_HDL)">HalfWaveRectifier_HDL</a>
Эта команда обновляет кэш советника модели и открывает Simscape HDL Workflow Advisor. Чтобы узнать больше о Simscape HDL Workflow Advisor и различных задачах, щелкните правой кнопкой мыши эту папку или задачу и выберите Что это? Смотрите также Simscape HDL Workflow Advisor Tasks.
Чтобы запустить рабочий процесс и сравнить функциональность модели реализации HDL с исходным алгоритмом Simscape, выберите шаг Генерация модели реализации, а затем установите флажок Сгенерировать логику валидации для модели реализации. Используйте логический допуск валидации 0.001
. Щелкните правой кнопкой мыши шаг Сгенерировать модель реализации и выберите Выполнить до выбранной задачи.
Advisor генерирует модель реализации HDL и модель валидации в пространстве состояний. Модель реализации имеет то же имя что и исходная модель Simscape и использует префикс gmStateSpaceHDL_
. Модель валидации пространства состояний имеет то же имя что и модель реализации и использует постфикс _vnl
.
В задаче Генерация модели реализации щелкните ссылку, чтобы открыть модель реализации. Модель содержит Simscape_system
подсистема, содержащая HDL Subsystem
блок. The 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. Если вы перемещаетесь внутри этой подсистемы, вы видите несколько задержек, сумматоров и блоков Matrix Multiply, которые моделируют уравнения пространства состояний.
open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL/Simscape_system/HDL Subsystem/HDL Algorithm')
Чтобы симулировать модель реализации HDL, введите команды tese. Откройте блок 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 может оказаться несовместимым для генерации модели реализации с помощью Simscape HDL Workflow Advisor. В таких случаях выполнение определенных задач в Advisor может привести к ошибке задачи. Чтобы узнать, как сделать его совместимым с 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. Верхний график представляет вывод сгенерированной модели, а средний график представляет выход модели реализации. Боттон- график вычисляет различие между выходами обеих моделей. Когда выходы совпадают, ошибка равняется нулю.