Stateflow® графики предоставляют краткие описания поведения сложной системы при помощи иерархической теории конечного автомата (FSM), обозначения блок-схемы и диаграмм переходов состояний.
Вы используете график, чтобы смоделировать конечный автомат или комплексный алгоритм управления, предназначенный для реализации как ASIC или FPGA. Когда модель соответствует конструктивным требованиям, вы затем генерируете HDL-код (VHDL® или Verilog®) это реализует проект, воплощенный в модели. Можно симулировать и синтезировать сгенерированный HDL-код при помощи инструментов промышленного стандарта, и затем сопоставить разработки системы в FPGAs и ASICs. Для получения дополнительной информации о том, как сгенерировать HDL-код для конечных автоматов, смотрите, Генерируют HDL для Конечных автоматов Мура и Мучнистого.
Генерация кода VHDL или Verilog из модели, содержащей график, не отличается значительно от генерации HDL-кода из других моделей. Генератор HDL-кода спроектирован к:
Поддержите самое большое подмножество семантики графика, сопоставимой с HDL-кодом. Это широкое подмножество означает, что можно сгенерировать HDL-код из существующих моделей без значительной модернизации.
Сгенерируйте битно-истинный, точный циклом HDL-код, который полностью совместим с семантикой симуляции Stateflow.
Используя hdlcodercfir модель, пример показывает, как сгенерировать HDL-код для подсистемы, которая включает диаграммы Stateflow.
Открыть модель, в командной строке, введите:
hdlcodercfir
Включение свойства Execute (enter) Chart at Initialization выполняет функцию графика обновления сразу после инициализации графика. Можно сохранить свойство диаграммы Execute (enter) Chart at Initialization отключенный. Это свойство может значительно изменить поведение Chart Stateflow и сгенерированный HDL-код. Выполнение Графика при Инициализации (Stateflow) описывает эффект этого свойства на Chart Stateflow.
Вы не можете выполнить арифметику в действиях инициализации, потому что сброшенные действия не могут обработать задержку комбинаторной логики.
Можно выбрать или очистить Initialize Outputs Every Time Chart Wakes Up. Если вы очищаете его, сгенерированный HDL-код включает дополнительный регистр для выходных значений конечного автомата.
Можно использовать настраиваемый параметр в Chart Stateflow, предназначенном для генерации HDL-кода.
Для получения дополнительной информации смотрите, Генерируют Порты DUT для Настраиваемых параметров.
Когда ваш Simulink® модель содержит Chart Stateflow, который использует комментарии, HDL Coder™ генерирует комментарии в HDL-коде.
Когда вы генерируете код Verilog из модели, HDL Coder отображает комментарии в Chart Stateflow, встроенном около соответствующего объекта Stateflow.
HDL Coder не поддерживает блоки Stateflow, которые содержат сообщения для генерации HDL-кода.
График, предназначенный для генерации HDL-кода, должен быть частью Подсистемы Simulink. Если график, для которого вы хотите сгенерировать код, на корневом уровне вашей модели, встройте график в подсистему. Соедините соответствующие сигналы с вводами и выводами подсистемы.
Генератор кода поддерживает подмножество MATLAB® типы данных в графиках, которые включают:
Целое число со знаком и беззнаковое целое
Фиксированная точка
Boolean
Перечисление
Примечание
За исключением типов данных, присвоенных портам, поддерживаются многомерные массивы этих типов. Типы данных порта должны быть или скаляром или вектором.
Если вы используете один и двойные типы данных, HDL Coder генерирует типы данных real в HDL-коде. Можно симулировать и проверить код при помощи сторонних средств моделирования, таких как ModelSim®.
Действительные типы не являются синтезируемыми на целевом устройстве FPGA. Генератор кода не поддерживает генерацию HDL-кода для Chart Stateflow в Native Floating Point
режим. Чтобы сгенерировать синтезируемый HDL-код, когда вы будете использовать типы данных с плавающей точкой, разработайте алгоритм при помощи блоков MATLAB function или других блоков Simulink, Поддержанных с Собственным компонентом, С плавающей точкой.
График, предназначенный для генерации HDL-кода, должен быть совершенно автономным. Эти ограничения применяются:
Не вызывайте функции MATLAB кроме min
или max
.
Не используйте Системные объекты MATLAB в блоке Chart.
Не используйте данные о рабочем пространстве MATLAB.
Не вызывайте математические функции C. HDL не имеет дубликата к математической библиотеке C.
Если свойство Enable C-bit operations отключено, не используйте оператор возведения в степень (^
). Оператор возведения в степень реализован с Математической Библиотечной функцией C pow
.
Не включайте пользовательский код. Информация ввела в Simulation Target>, панель Custom Code в диалоговом окне Configuration Parameters проигнорирована.
Не осуществляйте обмен данными (через Блоки памяти Хранилища данных) между графиками. HDL Coder не сопоставляет такие глобальные данные с HDL, потому что HDL не поддерживает глобальные данные.
Вектор из Настраиваемых параметров как типы данных для блоков Chart не поддерживается.
HDL Coder поддерживает использование событий ввода и вывода с диаграммами Stateflow согласно этим ограничениям:
Можно задать и использовать только одно входное событие на диаграмму Stateflow. Нет никакого ограничения на количество выходных событий, которые можно использовать.
Кодер не поддерживает генерацию HDL-кода для графиков, которые имеют одно входное событие, и которые также имеют ненулевые начальные значения на выходных портах графика.
Все события ввода и вывода должны быть запускаемыми фронтом.
Для получения дальнейшей информации на событиях ввода и вывода, смотрите, Активируют диаграмму Stateflow путем Отправки Входных Событий (Stateflow) и Активируют блок Simulink путем Отправки Выходных Событий (Stateflow).
Сообщения Stateflow не поддерживаются для генерации HDL-кода.
Кроме for
циклы, явным образом не используйте циклы в графике, предназначенном для генерации HDL-кода. Наблюдайте следующие ограничения на for
циклы:
Типом данных переменной счетчика цикла должен быть int32
.
HDL Coder поддерживает только постоянно ограниченные циклы.
for
пример цикла, sf_for
, показывает шаблон разработки для for
цикл, который использует графическую функцию.
HDL Coder вводит дополнительные ограничения для использования классических функций графика. Эти ограничения существуют, потому что HDL не поддерживает некоторые функции языков последовательного программирования общего назначения.
Не задавайте локальные события в графике, из которого сгенерирован HDL-код.
Не используйте эти неявные события:
enter
exit
change
Можно использовать эти неявные события:
wakeup
tick
Если основные события ограничиваются этими типами неявных событий, можно использовать временную логику.
Не используйте рекурсию через графические функции. HDL Coder не поддерживает рекурсию.
Избегайте неструктурированного кода. Несмотря на то, что графики позволяют неструктурированный код через блок-схемы перехода и графические функции, это использование результаты в goto
операторы и несколько функциональных операторов возврата. HDL не поддерживает также goto
операторы или несколько функциональных операторов возврата. Поэтому не используйте неструктурированные блок-схемы.
Если вы не выбрали опцию графика Initialize Outputs Every Time Chart Wakes Up, не читайте из выходных портов.
Не используйте объекты Памяти Хранилища данных.
Не используйте указатель (&
) или косвенность (*
) операторы. Смотрите Операции Указателя и Адреса (Stateflow).
Если график получает ошибку переполнения во время выполнения в процессе моделирования, возможно отключить проверку ошибок области значений данных и сгенерировать HDL-код для графика. В таких случаях некоторые результаты, полученные из сгенерированного HDL-кода, не могут быть битно-верны для результатов симуляции. Методические рекомендации должны включить проверку переполнения и устранить условия переполнения из модели в процессе моделирования.
State Transition Table (Stateflow) | Truth Table (Stateflow) | Sequence Viewer (Stateflow)