Эти рекомендации иллюстрируют рекомендуемые настройки при использовании диаграмм Stateflow ® в модели. Блок диаграммы Stateflow доступен в библиотеке блоков Stateflow. Используя диаграммы Stateflow, можно моделировать задержки в модели Simulink ®.
Каждое руководство имеет уровень серьезности, который указывает уровень соответствия требованиям. Дополнительные сведения см. в разделе Рекомендации по моделированию HDL Уровни серьезности.
2.9.1
Очень рекомендуем
HDL Coder™ поддерживает генерацию кода для диаграмм Mealy и Moore Stateflow. Не используйте функциональные блоки MATLAB для моделирования. Mealy или Moore конечные автоматы.
Чтобы указать, требуется ли Mealy или Moore конечный автомат в свойствах Chart (Stateflow) укажите тип конечного автомата. Не использовать Classic потому что это влияет на читаемость сгенерированного кода HDL. Выберите тип конечного автомата в зависимости от способа сопоставления семантики Stateflow с аппаратной реализацией. См. Аппаратная реализация семантики Stateflow.
При использовании Mealy графики, выходные данные зависят от текущего состояния и входных данных. С помощью Mealy диаграммы, вы можете легче определить переходы состояний, что делает эти диаграммы более гибкими для использования. Сгенерированный код HDL из Mealy диаграммы могут быть менее читаемыми.
Для Moore диаграммы, выходные данные зависят только от текущего состояния. Сгенерированный код HDL из Moore диаграммы более удобочитаемы. Moore диаграммы ограничивают гибкость при определении переходов состояний.
2.9.2
Очень рекомендуем
При использовании блоков Stateflow Chart (Stateflow) в модели для создания кода HDL используйте следующие рекомендуемые настройки:
Для языка действий используйте MATLAB
Для метода обновления используйте Discrete или Inherited. Не использовать Continuous.
Диаграмма Мура
Если отключить параметр «Инициализировать выходы при каждом пробуждении диаграммы», генерируемый код HDL включает дополнительные регистры выходных значений конечного автомата.
Отключить поддерживаемые массивы переменного размера
Диаграмма Мили
Включить выполнение (ввод) диаграммы при инициализации
Если отключить параметр «Инициализировать выходы при каждом пробуждении диаграммы», генерируемый код HDL включает дополнительные регистры выходных значений конечного автомата.
Отключить семантику Super Step
Отключить поддерживаемые массивы переменного размера
Чтобы убедиться, что эти параметры заданы для диаграммы 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')

Модель содержит две диаграммы Статефлоу Мура. Диаграмма onlyif_chart реализует простое условие, которое выводит out1 на основе 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 не содержит условия else. Не развертывайте этот код на целевом устройстве, поскольку средства синтеза могут выводить защелку.

Код HDL, сгенерированный для ifnelse_chart содержит оператор else для состояния безусловного перехода. Этот код рекомендуется для развертывания на целевом устройстве FPGA.

Идентификатор руководства
2.9.4
Серьезность
Информативный
Описание
Если явно не указать тип данных состояния и выходных переменных в диаграмме Stateflow, имеющей MATLAB в качестве языка действий тип данных становится двойным. Если этим переменным диаграммы назначены переменные с различными типами данных, может возникнуть несоответствие типов данных, что может привести к ошибкам моделирования.
Чтобы избежать ошибок моделирования, явно инициализируйте тип данных переменных диаграммы с помощью объектов fi или укажите их тип данных в обозревателе моделей. При выполнении присвоений переменным различных типов можно выполнить преобразование и инициализацию типа данных с помощью объектов fi.
При необходимости изменения типа данных fi необходимо указать длины слов и длины дробей для типов. Для частых преобразований типов данных можно привести тип к типам данных fi с помощью подстрочного индекса (:). В этом случае преобразования типов данных можно заменить приведением по индексу (:) в обозревателе моделей. Затем значение источника подстановки преобразуется в тип целевой переменной подстановки.
Примечание.Для назначений промежуточным переменным нет необходимости приводить тип данных.
Для примера, показывающего различные методы инициализации типов данных, откройте модель. 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 типы определяются в обозревателе моделей.
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 с не более чем тремя десятичными разрядами.
При использовании миллисекунд (мс) время выборки должно быть десятичным в диапазоне от 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'.