Сгенерируйте оптимизированную модель реализации HDL от Simscape

В этом примере показано, как можно сгенерировать оптимизированную модель реализации HDL для Simscape™ венская модель выпрямителя при помощи оптимизации, такой как отображение RAM и разделение ресурсов.

Почему оптимизируют модель реализации HDL

Для моделей Simscape, которые имеют много переключающихся элементов, представление пространства состояний содержит большое количество настроек. HDL Workflow Advisor Simscape симулирует модель Simscape, чтобы вычислить количество соответствующих настроек. Определенные модели Simscape могут иметь большое количество настроек, которые релевантны. Сгенерированная модель реализации HDL для такого большого проекта может использовать значительно большое количество ресурсов. Синтезирование сгенерированного кода может заставить проект занимать большую сумму ресурсов на устройстве FPGA. В некоторых случаях проект не может соответствовать на целевом устройстве FPGA. Чтобы сохранить resoures и сделать подгонку проекта на FPGA, HDL Workflow Advisor Simscape использует оптимизацию HDL Coder™, такую как конвейеризация тактовой частоты, разделение ресурсов и отображение RAM.

Венская модель выпрямителя

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

open_system('sschdlexViennaRectifierExample')

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

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

Control подсистема реализует стратегию управления с обратной связью для Vienna rectifier подсистема при помощи векторной пробелом модуляции. Во времени симуляции 0.1s, венский выпрямитель занят. Во времена 0.4s и 0.6s, загрузка подходит на стороне DC.

Vienna rectifier подсистема состоит из трехфазных участков. Каждый участок имеет один выключатель питания и шесть мощных диодов. Смотрите Венское Управление Выпрямителем (Simscape Electrical).

open_system('ViennaRectifier_HDL/Vienna rectifier')

Симулируйте модель. Просмотрите результаты симуляции путем двойного клика по блокам Scope в Scopes подсистема.

sim('ViennaRectifier_HDL')
open_system('ViennaRectifier_HDL/Scopes/Scope')

Сгенерируйте модель реализации HDL и подтвердите HDL Algrithm

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

sschdladvisor('ViennaRectifier_HDL')
### Running Simscape HDL Workflow Advisor for <a href="matlab:(ViennaRectifier_HDL)">ViennaRectifier_HDL</a>

Чтобы запустить рабочий процесс, щелкните правой кнопкой по задаче модели реализации Generate и выберите Run to Selected Task. После передач задачи вы видите ссылку на модель реализации HDL. Чтобы видеть количество настроек, выберите задачу уравнений Извлечения. На задаче вы видите, что симуляция модели достигает 558 режимы. Такое большое количество режимов может увеличить потребление ресурсов проекта на FPGA.

Чтобы открыть модель реализации HDL, введите эти команды:

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

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

open_system('gmStateSpaceHDL_ViennaRectifier_HDL/HDL Subsystem/HDL Algorithm')

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

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

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

sim('gmStateSpaceHDL_ViennaRectifier_HDL_vnl')

Сопоставьте параметры пространства состояний в модели реализации к RAM

Модель реализации HDL использует single типы данных и содержат большие блоки Задержки, которые являются в обратной связи в HDL Algorithm подсистема. Чтобы вместить большие задержки и сделать проект запущенным на более быстрой тактовой частоте на целевом FPGA, модель использует конвейеризацию тактовой частоты в сочетании с большим значением Сверхдискретизации фактора.

hdlsaveparams('gmStateSpaceHDL_ViennaRectifier_HDL')

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

В Сгенерировать задаче модели реализации параметры пространства состояний Карты к установке RAM используют значение по умолчанию Auto. Эта установка сопоставляет большие параметры пространства состояний в модели реализации HDL к RAM, когда количество режимов превышает пороговое значение 200. Когда венская модель выпрямителя использует большое количество режимов, параметры пространства состояний сопоставлены с RAM. Путем отображения с RAM вы сохраняете ресурсы интерполяционной таблицы на FPGA. Чтобы включить отображение RAM, параметр UseRAM включен на блоках подсистемы маскированных, которые выполняют обновление состояния и вычисляют выход.

Чтобы сопоставить параметры с RAM независимо от порога, установите параметры пространства состояний Карты на RAM к on.

Видеть эффект отображения RAM на венской модели выпрямителя:

1. Проверьте установку параметра UseRAM путем выполнения hdlget_param функция на Multiply Input и Multiply State блоки.

Multiplysubsys1 = 'gmStateSpaceHDL_ViennaRectifier_HDL/HDL Subsystem/HDL Algorithm/State Update';
Multiplysubsys2 = 'gmStateSpaceHDL_ViennaRectifier_HDL/HDL Subsystem/HDL Algorithm/Output';
UseRAM1 = hdlget_param([Multiplysubsys1 '/Multiply Input'], 'UseRAM')
UseRAM2 = hdlget_param([Multiplysubsys1 '/Multiply State'], 'UseRAM')
UseRAM1 =

    'on'


UseRAM2 =

    'on'

2. Включите генерацию отчета использования ресурса.

hdlset_param('gmStateSpaceHDL_ViennaRectifier_HDL', 'ResourceReport', 'on')

3. Сгенерируйте HDL-код для модели реализации.

makehdl('gmStateSpaceHDL_ViennaRectifier_HDL/HDL Subsystem');

Когда вы генерируете код, HDL Coder открывает отчет Генерации кода. Высокоуровневый Отчет Ресурса показывает 136 RAM используются.

Разделение ресурсов блоков расчета обновления и Выхода состояния

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

В модели реализации HDL можно совместно использовать блоки подсистемы маскированные, которые выполняют обновления состояния и вычисляют выход.

Совместно использовать эти подсистемы для венского выпрямителя и генерировать HDL-код:

1. Задайте SharingFactor 2 на Умножать Входе и Умножьте подсистемы состояния.

hdlset_param([Multiplysubsys1 '/Multiply Input'],'SharingFactor', 2)
hdlset_param([Multiplysubsys1 '/Multiply State'],'SharingFactor', 2)
hdlset_param([Multiplysubsys2 '/Multiply Input'],'SharingFactor', 2)
hdlset_param([Multiplysubsys2 '/Multiply State'],'SharingFactor', 2)

2. Включите генерацию отчета оптимизации

hdlset_param('gmStateSpaceHDL_ViennaRectifier_HDL', 'OptimizationReport', 'on')

3. Сгенерируйте HDL-код для блока Subsystem HDL в модели реализации.

makehdl('gmStateSpaceHDL_ViennaRectifier_HDL/HDL Subsystem');

Когда вы генерируете код, HDL Coder открывает отчет Генерации кода. Чтобы видеть состояние оптимизации разделения ресурсов, кликните по разделу Streaming и Sharing отчета. Эта группа совместного использования показывает скалярные произведения, что оптимизация совместно использовала. Когда вы нажимаете High-level Resource Report, вы видите, что потребление сумматоров, множителей и регистров уменьшилось.

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

Функции

Похожие темы