Эти инструкции иллюстрируют рекомендуемые настройки при использовании Stateflow® графики в вашей модели. Блок Chart Stateflow доступен в библиотеке 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.
Идентификатор руководства
2.9.3
Серьезность
Рекомендуется
Описание
Когда вы используете графики Stateflow ® для генерации HDL-кода, вставьте безусловные состояния в график. HDL-код, сгенерированный для такого графика, содержит ветвь else с оператором if. Наличие ветви else мешает сторонней программе выводить защелку при развертывании 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
реализует простое условие, которое выводит выходные 1 на основе in1.
open_system('hdlcoder_chart_ifnelsecond/dut_chart/onlyif_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
содержит оператор else для безусловного переходного состояния. Этот код рекомендуется для развертывания на целевом устройстве FPGA.
Идентификатор руководства
2.9.4
Серьезность
Информативный
Описание
Когда вы явным образом не задаете тип данных состояния и выходных переменных в диаграмме Stateflow, которая имеет MATLAB
как язык действий, тип данных становится двойным. Если этим переменным графики назначены переменные с различными типами данных, может возникнуть несоответствие типов данных, что может привести к ошибкам симуляции.
Чтобы избежать ошибок симуляции, явным образом инициализируйте тип данных переменных 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')
The 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')
Когда вы используете абсолютную временную логику в блоках Stateflow Chart (Stateflow) в вашей модели для генерации HDL-кода, используйте эти настройки.
Для частоты дискретизации графика:
Если вы используете секунды (сек), то шаг расчета должно быть целым числом 65535 или ниже, или десятичным числом между 65,535 и 0,001 с не более чем тремя десятичными знаками.
Если вы используете миллисекунды (msec), шаг расчета должно быть десятичным числом между 65,535 и 0,001 с не более чем тремя десятичными знаками или десятичным числом между 0.065535 и 0.000001 с не более чем шестью десятичными знаками.
Если Вы используете микросекунды (usec), шаг расчета должен быть десятичным числом между 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'
.