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

Обзор

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

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

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

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

  • Сгенерируйте bit-true, точную по циклу 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 генерирует реальные типы данных в HDL-коде. Можно симулировать и проверить код с помощью сторонних симуляторов, таких как ModelSim®.

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

Инициализация графика

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

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

Можно выбрать или отключить Initialize Outputs Every Time Chart Wakes Up. Если вы отключаете его, сгенерированный HDL-код включает дополнительный регистр для выходных значений конечного автомата.

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

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

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

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

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

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

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

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

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

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

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

Входные и выходные события

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

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

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

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

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

Сообщения

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

Циклы

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

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

  • HDL Coder поддерживает только постоянные циклы.

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

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

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

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

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

    • enter

    • exit

    • change

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

    • wakeup

    • tick

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

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

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

  • Если вы не выбрали опцию < reservedrangesplaceholder0 > графика, не считывайте с выходных портов.

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

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

  • Если график получает ошибку переполнения во время выполнения во время симуляции, можно отключить проверку ошибки области значений данных и сгенерировать HDL-код для графика. Однако в таких случаях некоторые результаты, полученные из сгенерированного HDL-кода, могут не быть bit-true к результатам симуляции. Рекомендуемая практика состоит в том, чтобы включить проверку переполнения и исключить условия переполнения из модели во время симуляции.

См. также

(Stateflow) | (Stateflow) | (Stateflow)

Похожие примеры

Подробнее о