Эти инструкции иллюстрируют рекомендуемые настройки при использовании графиков Stateflow® в вашей модели. Блок Stateflow Chart доступен в библиотеке блоков Stateflow. При помощи диаграмм Stateflow можно смоделировать задержки модели Simulink®.
Каждая инструкция имеет уровень серьезности, который указывает на уровень требований податливости. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию HDL.
2.9.1
Строго рекомендуемый
HDL Coder™ поддерживает генерацию кода для диаграмм Stateflow Мура и Мучнистого. Не используйте блоки MATLAB Function, чтобы смоделировать любой Mealy
или Moore
конечный автомат.
Задавать, хотите ли вы Mealy
или Moore
конечный автомат, в свойствах Chart (Stateflow), задает State Machine Type. Не используйте Classic
потому что это влияет на удобочитаемость сгенерированного HDL-кода. Выберите State Machine Type в зависимости от того, как вы хотите, чтобы семантика Stateflow сопоставила с аппаратной реализацией. Смотрите Аппаратную Реализацию Семантики Stateflow.
Когда вы используете Mealy
графики, выходные параметры зависят от текущего состояния и входных параметров. При помощи Mealy
графики, можно более легко задать изменения состояния, который делает эти графики более гибкими, чтобы использовать. Сгенерированный HDL-код от Mealy
графики могут быть менее читаемыми.
Для Moore
графики, выходные параметры зависят только от текущего состояния. Сгенерированный HDL-код от Moore
графики более читаемы. Moore
графики ограничивают гибкость в определении изменений состояния.
2.9.2
Строго рекомендуемый
Когда вы будете использовать диаграмму Stateflow (Stateflow) блоки в вашей модели для генерации HDL-кода, используйте эти рекомендуемые настройки:
Для Action Language используйте MATLAB
Для Update method используйте Discrete
или Inherited
. Не используйте Continuous
.
График Мура
Если вы отключаете Initialize Outputs Every Time Chart Wakes Up, сгенерированный HDL-код включает дополнительные регистры выходных значений конечного автомата.
Отключите Support Variable-Size Arrays
Диаграмма Мили
Включите Execute (Enter) Chart at Initialization
Если вы отключаете Initialize Outputs Every Time Chart Wakes Up, сгенерированный HDL-код включает дополнительные регистры выходных значений конечного автомата.
Отключите Enable Super Step Semantics
Отключите Support Variable-Size Arrays
Чтобы убедиться, что эти настройки заданы для Chart Stateflow, можно осуществить Проверку проверки на настройки диаграммы Stateflow.
ID инструкции
2.9.3
Серьезность
Рекомендуемый
Описание
Когда вы используете графики Stateflow® для генерации HDL-кода, вставляете безусловные состояния в график. HDL-код, сгенерированный для такого графика еще, содержит ветвь с оператором if. Присутствие еще ветвь препятствует тому, чтобы сторонняя программа вывела фиксатор, когда вы развертываете HDL-код. Например, откройте модель hdlcoder_chart_ifnelsecond
.
open_system('hdlcoder_chart_ifnelsecond') set_param('hdlcoder_chart_ifnelsecond', 'SimulationCommand', 'Update') open_system('hdlcoder_chart_ifnelsecond/dut_chart')
Модель содержит два Stateflow Графики Мура. График onlyif_chart
реализует простое условие что выходные параметры out1 на основе in1.
open_system('hdlcoder_chart_ifnelsecond/dut_chart/onlyif_chart')
Блок Chart ifnelse_chart
совпадает с onlyif_chart
и имеет безусловное переходное состояние.
open_system('hdlcoder_chart_ifnelsecond/dut_chart/ifnelse_chart')
Чтобы сгенерировать HDL-код для DUT, запустите эту команду:
makehdl('hdlcoder_chart_ifnelsecond/dut_chart')
HDL-код сгенерирован для onlyif_chart
еще не содержит условие. Не развертывайте этот код в целевое устройство, потому что инструменты синтеза могут вывести фиксатор.
HDL-код сгенерирован для ifnelse_chart
еще содержит оператор для безусловного переходного состояния. Этот код рекомендуется для развертывания на целевом устройстве FPGA.
ID инструкции
2.9.4
Серьезность
Информативный
Описание
Когда вы явным образом не задаете тип данных переменных состояния и выходных переменных в диаграмме Stateflow, которая имеет MATLAB
как Язык Действия, тип данных становится двойным. Если переменные, которые имеют различные типы данных, присвоены этим переменным Chart, неверный тип данных может произойти, который может привести к ошибкам симуляции.
Чтобы избежать ошибок симуляции, явным образом инициализируйте тип данных переменных Chart при помощи объектов fi или задайте их тип данных в Model Explorer. При выполнении присвоений на переменные различных типов можно выполнить преобразование типа данных и инициализацию при помощи объектов fi.
Когда это необходимо, чтобы изменить fi тип данных, необходимо задать размеры слова и дробные длины для типов. Для частых преобразований типа данных можно вместо этого бросить тип к fi типам данных при помощи индекса (:). В этом случае можно заменить преобразования типа данных на бросок индексом (:) в Model Explorer. Значение источника замены затем преобразовано в тип в ту из целевой переменной замены.
Примечание: Для присвоений на промежуточные переменные, вы не должны бросать тип данных.
Для примера, который показывает методы инициализации другого типа данных, откройте модель hdlcoder_chart_datatype_casting
.
open_system('hdlcoder_chart_datatype_casting') set_param('hdlcoder_chart_datatype_casting', 'SimulationCommand', 'Update')
DUT
подсистема содержит график Мура, который показывает как выходные переменные out1
и out2
и внутренняя переменная var1
заданы. out1
тип явным образом задан при помощи объекта fi и out2
и var1
типы заданы в Model Explorer.
open_system('hdlcoder_chart_datatype_casting/DUT/Chart')
Сгенерировать HDL-код для DUT
подсистема, запустите makehdl
функция.
makehdl('hdlcoder_chart_datatype_casting/DUT')
Когда вы будете использовать абсолютное время временная логика в вашем Chart Stateflow (Stateflow) блоки в вашей модели для генерации HDL-кода, используйте эти настройки.
Для частоты дискретизации графика:
Если вы используете секунды (секунда), то шаг расчета должен быть целым числом 65535 или ниже, или десятичное число между 65,535 и 0.001 больше чем без трех десятичных разрядов.
Если вы используете миллисекунды (msec), шаг расчета должен быть десятичным числом между 65,535 и 0.001 больше чем без трех десятичных разрядов или десятичного числа между 0,065535 и 0.000001 больше чем без шести десятичных разрядов.
Если вы используете микросекунды (мкс), шаг расчета должен быть десятичным числом между 0,065535 и 0.000001 больше чем без шести десятичных разрядов или десятичного числа между 0,000065535 и 0.000000001 больше чем без девяти десятичных разрядов.
Если шаг расчета является целым числом ниже 2^16, то используйте 'sec'
.
Если 1000 * шаг расчета является целым числом ниже 2^16, то используйте 'sec'
или 'msec'
.
Если 1000000 * шаг расчета является целым числом ниже 2^16, то используйте 'msec'
или 'usec'
.
Если 1000000000 * шаг расчета является целым числом ниже 2^16, то используйте 'usec'
.