Инструкции по генерации HDL-кода с использованием диаграмм Stateflow

Эти инструкции иллюстрируют рекомендуемые настройки при использовании Stateflow® графики в вашей модели. Блок Chart Stateflow доступен в библиотеке Stateflow блоков. При помощи диаграмм Stateflow можно смоделировать задержки в Simulink® модель.

Каждое руководство имеет уровень серьезности, который указывает на уровень податливостей. Для получения дополнительной информации см. HDL-руководства по моделированию уровней серьезности.

Выберите тип конечного компьютера на основе требований реализации 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 графики ограничивают гибкость в определении переходов состояний.

Задайте настройки строения блоков диаграммы Stateflow

Идентификатор руководства

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.

Вставьте безусловное состояние перехода для оператора Else в HDL-код

Идентификатор руководства

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.

Настройки типа данных и литье в диаграмме Stateflow для генерации HDL-кода

Идентификатор руководства

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

Когда вы используете абсолютную временную логику в блоках 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'.

См. также

Функции

Похожие темы