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