В этом примере показано, как изменить модель Simscape™ завода, которая является непрерывной по времени и содержит нелинейные элементы для создания HDL-совместимой модели Simulink ®. Затем можно создать код HDL для этой модели Simulink.
Simscape HDL Workflow Advisor преобразует модель завода Simscape в модель реализации, совместимую с HDL, на основе которой создается код HDL. В некоторых случаях модель завода Simscape может быть несовместима с созданием модели реализации. В таких случаях сначала необходимо изменить модель завода Simscape, а затем запустить Advisor.
В этом примере показано, как изменить модель синхронного двигателя с постоянным магнитом для совместимости с Simscape HDL Workflow Advisor. Модель представляет собой непрерывное время и содержит множество нелинейных компонентов. Эту модель можно изменить на линейную модель с дискретным переключением по времени, а затем запустить Simscape HDL Workflow Advisor.
Модель синхронного двигателя с постоянным магнитом является физической системой в Simscape. Чтобы открыть модель, выполните следующую команду:
open_system('ee_pmsm_drive')
Сохраните эту модель как ee_pmsm_drive_original.slx.
open_system('ee_pmsm_drive_original') set_param('ee_pmsm_drive_original','SimulationCommand','Update')

Модель содержит синхронную машину с постоянным магнитом (PMSM) и инвертор размером, который можно использовать в типичном гибридном транспортном средстве. Инвертор соединен с аккумуляторной батареей транспортного средства. Чтобы увидеть, как работает модель, смоделируйте модель.
sim('ee_pmsm_drive_original') open_system('ee_pmsm_drive_original/Scope')

Эта модель представляет собой непрерывную систему времени. Чтобы использовать эту модель с Simscape HDL Workflow Advisor, преобразуйте модель в дискретную систему. Затем модель модифицируется для использования блоков, совместимых с рабочим процессом Simscape to HDL.
1. Настройте параметры решателя для генерации кода HDL с помощью блока конфигурации решателя (Simscape). В параметрах блока:
Выберите Использовать локальный решатель.
Использовать Backward Euler в качестве типа решателя.
Укажите время дискретной выборки, Ts.
2. Измените настройки решателя модели. На вкладке Моделирование (Modeling) щелкните Параметры модели (Model Settings). На панели решателя:
Задать для типа выбора решателя значение Fixed-Step.
Задать для решателя значение discrete (no continuous states).
Установить фиксированный размер шага (время основной выборки) в Ts.
В разделе Параметры задания и выборки времени снимите флажок Рассматривать каждую дискретную частоту как отдельную задачу.
3. Измените настройки отображения модели. На вкладке «Отладка» выберите «Информационные наложения» > «Образец времени» > «Цвета». Просмотрите легенду времени образца для блоков с временем образца, отличным от Tsили работать в непрерывном масштабе времени. Дважды щелкните блок Step (Шаг) и задайте для параметра Sample time значение Ts.
4. Для ускорения моделирования игнорируйте параметры нулевой последовательности PMSM. Дважды щелкните блок синхронного двигателя постоянного магнита и установите нулевую последовательность в Exclude.
Теперь модель представляет собой дискретную систему с фиксированным шагом. Смоделировать модель и сравнить сигналы потребности в крутящем моменте и крутящего момента двигателя в инспекторе данных моделирования. Сигналы отличаются больше, чем уровни допуска к концу моделирования, но находятся в допустимых пределах.

Для преобразования модели завода Simscape в модель реализации, совместимую с HDL, используется двухэтапный процесс:
Реализуйте модель Simulink, которая заменяет нелинейную часть алгоритма Simscape, используя эквивалентные блоки Simulink.
Измените эту модель, чтобы использовать блоки, совместимые с рабочим процессом Simscape to HDL.
1. Чтобы сделать модель завода Simscape HDL-совместимой, определите наличие нелинейных компонентов или блоков в модели:
simscape.findNonlinearBlocks('ee_pmsm_drive_original')
Found network that contains nonlinear equations in the following blocks:
{'ee_pmsm_drive_original/Permanent Magnet Synchronous Motor'}
The number of linear or switched linear networks in the model is 0.
The number of nonlinear networks in the model is 1.
ans =
1x1 cell array
{'ee_pmsm_drive_original/Permanent Magnet Synchronous Motor'}
Модель завода Simscape имеет нелинейный блок, который является блоком PMSM.
2. Блок PMSM, блок кодера, резистор Gmin и блок инерции двигателя и нагрузки заменяются блоками Simulink, выполняющими эквивалентный алгоритм.
Для реализации блока «Электрический интерфейс» используется параметр «Контролируемые источники тока».

Интерфейс с PMSM изолирован от реализации. Для реализации PMSM с использованием блоков Simulink используются электрические и механические уравнения. В блоках «Преобразование парка» и «Обратное преобразование парка» удалите блоки «Синус» и «Косинус».

В ee_pmsm_drive_singleSL модели показано, как изменить исходную модель ee_pmsm_drive_original и подготовить модель к готовности с помощью Simscape HDL Workflow Advisor.
1. Чтобы изменить модель Simscape для совместимости с генерацией модели реализации HDL, определите часть алгоритма Simscape, которую необходимо запустить на FPGA. В этом примере можно запустить трехфазный инвертор, электрический интерфейс, ШИМ и синхронный двигатель постоянного магнита (Simulink) на FPGA.
2. После идентификации блоков, запускаемых на FPGA, блоки помещаются в подсистему верхнего уровня. Эта подсистема является DUT (Design Under Test) и содержит блоки, запускаемые в FPGA после генерации модели реализации HDL. После запуска Simscape HDL Workflow Advisor эта подсистема заменяется алгоритмом HDL. Эта часть модели Simscape должна выполняться с самой высокой частотой выборки. Блоки Rate Transition добавляются для увеличения объема проекта.
3. Чтобы сохранить использование ресурсов на целевом оборудовании, добавляются блоки преобразования типов данных, чтобы преобразовать модель для использования single типы данных.
Модель ee_pmsm_drive_singleSL показывает, как эти блоки помещаются в подсистему Subsystem1 верхнего уровня, которая является DUT. Блоки внутри подсистемы работают с более высокой скоростью.
load_system('ee_pmsm_drive_singleSL') set_param('ee_pmsm_drive_singleSL','SimulationCommand','update') open_system('ee_pmsm_drive_singleSL/Subsystem1')

В модели ee_pmsm_drive_singleSL трехфазный инвертор и электрический интерфейс помещаются в подсистему Simscape Inverter and Interface.
open_system('ee_pmsm_drive_singleSL/Subsystem1/Simscape Inverter and Interface')

В предыдущем разделе описываются изменения, которые были применены к маскированной подсистеме, синхронному двигателю с постоянным магнитом (Simulink).
1. Блок Integrator with Wrapped State (дискретный или непрерывный) несовместим с формированием кода HDL. Этот блок был заменен на DTI-подсистему упакованного состояния.
PMSMSubsystem = 'ee_pmsm_drive_singleSL/Subsystem1/Permanent Magnet Synchronous Motor (Simulink)'; open_system(PMSMSubsystem, 'force')

open_system([PMSMSubsystem, '/Wrapped State DTI'])

2. Для уменьшения площади зоны FPGA для:
Добавляются блоки Park Transform, Clarke Transform и Clarke to Park Angle Transform.
Добавляются блок обратного паркового преобразования, блоки обратного паркового преобразования и обратного кларкового преобразования.
open_system([PMSMSubsystem, '/Park Transform'])

open_system([PMSMSubsystem, '/Inverse Park Transform'])

3. Для блоков интегратора дискретного времени внутри этой подсистемы значение Sample time устанавливается равным -1, Значение усиления для Tsи метод Integrator для Accumulation:Forward Euler. Эти параметры блока можно просмотреть программным путем, выполнив эти команды.
blockDTI = find_system(PMSMSubsystem, 'LookUnderMasks', 'on', ... 'blocktype', 'DiscreteIntegrator'); for n = 1:numel(blockDTI) Integpath = blockDTI(n); Integname = get_param(Integpath, 'Name'); stime = num2str(get_param(blockDTI{n}, 'SampleTime')); gval = num2str(get_param(blockDTI{n}, 'gainval')); integmethod = num2str(get_param(blockDTI{n}, 'IntegratorMethod')); disp('----------------------------------------------------') disp(Integpath) disp(['Sample time: ', stime, ' Gain: ', gval, ... ' Integration method: ', integmethod]) end disp('----------------------------------------------------')
----------------------------------------------------
{'ee_pmsm_drive_singleSL/Subsystem1/Permanent Magnet...'}
Sample time: -1 Gain: Ts Integration method: Accumulation: Forward Euler
----------------------------------------------------
{'ee_pmsm_drive_singleSL/Subsystem1/Permanent Magnet...'}
Sample time: -1 Gain: Ts Integration method: Accumulation: Forward Euler
----------------------------------------------------
На верхний уровень модели:
Цифровой синхросигнал, имеющий время выборки Ts был добавлен и подключен к блоку отображения.
Блок Simscape трехфазного датчика тока заменяется подачей в контроллер трехфазных токов, поступающих от модели PMSM.
На этом рисунке показан верхний уровень модели с указанными выше изменениями.
open_system('ee_pmsm_drive_singleSL')

Чтобы открыть Simscape HDL Workflow Advisor, запустите sschdladvisor функция для модели:
sschdladvisor('ee_pmsm_drive_singleSL')
Чтобы создать модель реализации, в Simscape HDL Workflow Advisor оставьте параметры по умолчанию и запустите задачи. Чтобы открыть модель реализации, в задаче Создать модель реализации щелкните ссылку.

В этом примере модель внедрения была изменена для развертывания на платформах ввода-вывода Speedgoat FPGA. Модель сохраняется как gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL.
Для изменения конфигурации модели реализации с одной точностью для генерации кода HDL:
1. Запустить hdlsetup функция в модели.
hdlsetup('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL')
2. Настройка решателя модели Фиксированный размер шага (Fixed-step size) изменяется на Ts/5 поскольку число итераций решателя по умолчанию равно 5.
3. Блок Subsystem1 содержит блоки, выполняемые в FPGA. Подсистема преобразования и интерфейса Simscape заменяется блоком подсистемы HDL. Блок подсистемы HDL содержит алгоритм HDL, который содержит реализацию HDL алгоритма Simscape. Чтобы увидеть реализацию алгоритма HDL, откройте этот блок.
model_name = 'gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL'; dut_name = 'gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL/Subsystem1'; load_system(model_name) set_param(model_name,'SimulationCommand','Update') open_system([dut_name, '/HDL Subsystem'])

open_system([dut_name, '/HDL Subsystem/HDL Algorithm'])

4. Подсистема алгоритмов HDL имеет сигнал Valid Out. Подсистема синхронного двигателя постоянного магнита (Simulink) расположена внутри включенной подсистемы, а входной порт vs_LL подключен к сигналу Valid Out.
open_system(dut_name)

5. Переместите блок внутри подсистемы, первоначально содержавшей алгоритм Simscape, на верхний уровень модели.
На этом рисунке показан верхний уровень модели с указанными выше изменениями.
open_system(model_name)

Перед созданием кода HDL для сравнения выходных данных созданной модели после создания кода с измененной моделью завода Simscape укажите создание модели проверки.
hdlset_param(model_name, 'GenerateValidationModel', 'on');
Дополнительные сведения см. в разделах Сгенерированная модель и модель проверки.
Чтобы создать код HDL, выполните следующую команду:
makehdl('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL/HDL Subsystem')
По умолчанию кодер HDL генерирует код VHDL. Чтобы создать код Verilog, выполните следующую команду:
makehdl('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL/HDL Subsystem', 'TargetLanguage', 'Verilog')
Генератор кода сохраняет созданный код HDL и модель проверки в hdlsrc папка. Созданный код сохраняется как HDL_Subsystem_tc.vhd. Чтобы просмотреть сведения об использовании ресурсов в конструкции, просмотрите отчет о создании кода.
Чтобы открыть модель проверки после создания кода HDL, откройте модель gm_gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL_vnl.slx.
В модели внедрения HDL Subsystem1 содержит блоки, запускаемые в FPGA. Для развертывания алгоритма HDL на платах FPGA в целевых платформах Speedgoat можно запустить помощник по рабочим процессам HDL в этой подсистеме. Пример см. в разделе Аппаратная реализация модели Simscape на модулях ввода-вывода FPGA Speedgoat.