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

Обзор

Графики 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-код должен внутренне указать выходные значения.

Примечание

Активные данные состояния не поддерживаются в графиках, которые используют классическую или Мучнистую семантику, когда свойство диаграммы Initialize outputs every time chart wakes up включено. Для получения дополнительной информации смотрите Действие Состояния монитора Через Активные Данные состояния (Stateflow).

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

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

Смотрите также

(Stateflow) | (Stateflow) | (Stateflow)

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

Больше о

Для просмотра документации необходимо авторизоваться на сайте