exponenta event banner

Введение в генерацию кода HDL Stateflow

Обзор

Диаграммы Stateflow ® предоставляют краткие описания сложного поведения системы с использованием иерархической теории конечных автоматов (FSM), обозначений блок-схем и диаграмм перехода состояний .

Диаграмма используется для моделирования конечного автомата или сложного алгоритма управления, предназначенного для реализации в качестве ASIC или FPGA. Когда модель соответствует требованиям к конструкции, создается код HDL (VHDL ® или Verilog ®), реализующий конструкцию, воплощенную в модели. Можно моделировать и синтезировать сгенерированный код HDL с помощью стандартных отраслевых инструментов, а затем сопоставлять проекты систем с FPGA и ASIC.

В целом, генерация кода VHDL или Verilog из модели, содержащей диаграмму, не сильно отличается от генерации кода HDL из других моделей. Генератор кодов HDL предназначен для

  • Поддержка максимально возможного подмножества семантики диаграммы, соответствующего HDL. Это широкое подмножество позволяет создавать код HDL из существующих моделей без значительных усилий по реконструкции.

  • Создание кода HDL с точностью до бита и с точностью до цикла, полностью совместимого с семантикой моделирования Stateflow.

Комментарии

Когда модель Simulink ® содержит диаграмму статусов, использующую комментарии, HDL Coder™ генерирует комментарии в коде HDL.

При создании кода Verilog из модели кодер HDL отображает комментарии в диаграмме Stateflow рядом с соответствующим объектом Stateflow.

Настраиваемые параметры

Можно использовать настраиваемый параметр в диаграмме статофлоу, предназначенной для создания кода HDL.

Дополнительные сведения см. в разделе Создание портов DUT для настраиваемых параметров.

Пример

Модель hdlcodercfir показывает, как генерировать код HDL для подсистемы, включающей диаграммы Stateflow.

Для открытия модели в командной строке введите:

hdlcodercfir

Ограничения

Кодер HDL не поддерживает блоки Stateflow, содержащие сообщения для генерации кода HDL.

Расположение диаграмм в модели

Диаграмма, предназначенная для генерации кода HDL, должна быть частью подсистемы Simulink. Если диаграмма, для которой требуется создать код, находится на корневом уровне модели, вставьте диаграмму в подсистему. Подключите соответствующие сигналы к входам и выходам подсистемы.

Типы данных

Генератор кода поддерживает подмножество типов данных MATLAB ® в диаграммах, которые включают:

  • Целое число со знаком и без знака

  • Фиксированная точка

  • Булев

  • Перечисление

Примечание

За исключением типов данных, назначенных портам, поддерживаются многомерные массивы этих типов. Типы данных порта должны быть скалярными или векторными.

При использовании одиночных и двойных типов данных кодер HDL создает реальные типы данных в коде HDL. Можно моделировать и проверять код с помощью сторонних симуляторов, таких как ModelSim ®.

Однако реальные типы не синтезируются на целевом устройстве FPGA. Генератор кода не поддерживает создание кода HDL для диаграммы статофлоу в Native Floating Point режим. Чтобы создать синтезируемый код HDL при использовании типов данных с плавающей запятой, разработайте алгоритм с помощью функциональных блоков MATLAB или других блоков Simulink, поддерживаемых с собственной плавающей запятой.

Инициализация диаграммы

Необходимо включить свойство диаграммы Execute (enter) Chart at Initialization. Эта опция выполняет функцию обновления диаграммы сразу после инициализации диаграммы. Опция необходима для HDL, поскольку выходы должны быть доступны в момент времени 0 (аппаратный сброс). Выполнение диаграммы при инициализации (Stateflow) описывает существующие ограничения для этого свойства.

Действие сброса не должно приводить к задержке комбинаторной логики. Поэтому не выполняйте арифметические действия при инициализации.

Можно выбрать или отключить параметр «Инициализировать выходные данные при каждом пробуждении диаграммы». Если он отключен, генерируемый код HDL включает дополнительный регистр для выходных значений конечного автомата.

Импортированный код

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

  • Не вызывайте функции MATLAB, кроме min или max.

  • Не используйте системные объекты MATLAB в блоке диаграммы.

  • Не используйте данные рабочей области MATLAB.

  • Не вызывайте математические функции C. HDL не имеет аналога математической библиотеки C.

  • Если свойство Enable C-bit operations отключено, не используйте оператор возведения в степень (^). Оператор возведения в степень реализован с помощью функции C Math Library pow.

  • Не включать пользовательский код. Информация, введенная на панели Цель моделирования (Simulation Target) > Пользовательский код (Custom Code) в диалоговом окне Параметры конфигурации (Configuration Parameters), игнорируется.

  • Не обменивайтесь данными (через блоки памяти хранилища данных) между диаграммами. Кодер HDL не сопоставляет такие глобальные данные с HDL, поскольку HDL не поддерживает глобальные данные.

Вектор настраиваемых параметров

Вектор настраиваемых параметров в качестве типов данных для блоков диаграммы не поддерживается.

События ввода и вывода

Кодер HDL поддерживает использование входных и выходных событий с диаграммами Stateflow с учетом следующих ограничений:

  • Можно определить и использовать только одно входное событие для каждой диаграммы Stateflow. (Количество выходных событий, которые можно использовать, не ограничено.)

  • Кодер не поддерживает генерацию кода HDL для диаграмм, которые имеют одно входное событие и которые также имеют ненулевые начальные значения на выходных портах диаграммы.

  • Все события ввода и вывода должны инициироваться краем.

Дополнительные сведения о событиях ввода и вывода см. в разделах Активация диаграммы Stateflow путем отправки событий ввода (Stateflow) и Активация блока Simulink путем отправки событий вывода (Stateflow).

Сообщения

Сообщения потока состояния не поддерживаются для создания кода HDL.

Петли

Кроме for петли, не используйте в явном виде петли в диаграмме, предназначенной для генерации кода HDL. Соблюдать следующие ограничения for контуры:

  • Тип данных переменной счетчика цикла должен быть int32.

  • Кодер HDL поддерживает только замкнутые контуры.

for пример цикла, sf_for, показывает образец конструкции для for цикл с использованием графической функции.

Другие ограничения

HDL Coder накладывает дополнительные ограничения на использование классических функций диаграммы. Эти ограничения существуют, поскольку HDL не поддерживает некоторые функции языков последовательного программирования общего назначения.

  • Не определяйте локальные события в диаграмме, на основе которых создается код HDL.

    Не используйте следующие неявные события:

    • enter

    • exit

    • change

    Можно использовать следующие неявные события:

    • wakeup

    • tick

    Можно использовать временную логику, если базовые события ограничены этими типами неявных событий.

  • Не используйте рекурсию с помощью графических функций. Кодер HDL в настоящее время не поддерживает рекурсию.

  • Избегайте неструктурированного кода. Хотя диаграммы позволяют использовать неструктурированный код (с помощью блок-схем перехода и графических функций), это приводит к goto операторы и операторы возврата нескольких функций. HDL также не поддерживает goto операторы или операторы возврата нескольких функций. Поэтому не используйте неструктурированные блок-схемы.

  • Если не выбран параметр «Инициализировать выходные данные при каждом пробуждении диаграммы», не считывайте данные с портов вывода.

  • Не используйте объекты памяти хранилища данных.

  • Не использовать указатель (&) или косвенное (*) операторов. См. раздел Операции с указателями и адресами (Stateflow).

  • Если диаграмма получает ошибку переполнения во время выполнения во время моделирования, можно отключить проверку ошибок диапазона данных и сгенерировать код HDL для диаграммы. Однако в таких случаях некоторые результаты, полученные из сгенерированного кода ЛПВП, могут не быть битово верными результатам моделирования. Рекомендуется включить проверку переполнения и исключить условия переполнения из модели во время моделирования.

См. также

(поток состояний) | (поток состояний) | (поток состояний)

Связанные примеры

Подробнее