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

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

Модель выпрямителя Halfwave

Чтобы открыть модель выпрямителя на полуволне, в командной строке 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 Workflow Advisor Simscape

Чтобы сгенерировать модель реализации 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.

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

В задаче Генерация модели реализации щелкните ссылку, чтобы открыть модель реализации. Модель содержит 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

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

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

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

В некоторых случаях алгоритм Simscape может оказаться несовместимым для генерации модели реализации с помощью Simscape HDL Workflow Advisor. В таких случаях выполнение определенных задач в Advisor может привести к ошибке задачи. Чтобы узнать, как сделать его совместимым с 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. Верхний график представляет вывод сгенерированной модели, а средний график представляет выход модели реализации. Боттон- график вычисляет различие между выходами обеих моделей. Когда выходы совпадают, ошибка равняется нулю.

См. также

Функции

Похожие темы