Поддерживаемые типы данных MATLAB, операторы и операторы управления

Когда вы генерируете HDL-код из своего алгоритма MATLAB®, используйте типы данных, операторы и операторы управления, которые поддерживает HDL Coder™.

Поддерживаемые типы данных

HDL Coder не поддерживает типы данных Inf и массивы ячеек. Эта таблица показывает поддерживаемое подмножество типов данных MATLAB.

ТипыПоддерживаемые типы данныхОграничения
Целое число
  • uint8, uint16, uint32, uint64

  • int8, int16, int32, int64

В Simulink® порты блока MATLAB function должны использовать числовые типы sfix64 или ufix64 для 64-битных данных.
Действительный
  • double

  • single

HDL-код, сгенерированный с double или типами данных single в вашем коде MATLAB, может использоваться для симуляции, но не синтезируемый. Можно сгенерировать синтезируемый код, когда вы используете эти типы данных в своей модели Simulink. Для получения дополнительной информации см.:
Символchar
Логический

logical

Фиксированная точка
  • Масштабируемый (только двоичная точка) числа фиксированной точки

  • Пользовательские целые числа (обнуляют двоичную точку),

Числа фиксированной точки с наклоном (не равный 1,0) и смещение (не равный 0,0) не поддержаны.

Максимальный размер слова для чисел фиксированной точки составляет 128 битов.

Векторы
  • неупорядоченный {N}

  • строка {1, N}

  • столбец {N, 1}

Максимальное количество векторных позволенных элементов 2^32.

Прежде чем переменная преобразовывается в нижний индекс, она должна быть полностью задана.

Матрицы

{N, M}

Матрицы поддерживаются в теле алгоритма проекта, но не поддержаны как входные параметры к функции проекта верхнего уровня.

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

Структурыstruct

Массивы структур не поддержаны.

Для Тюремщика FPGA и рабочих процессов Генерации Ядра IP, структуры поддерживаются в теле алгоритма проекта, но не поддержаны как входные параметры к функции проекта верхнего уровня.

Перечисленияenumeration

Перечислимые величины должны монотонно увеличиваться.

Если вашим выходным языком является Verilog®, все имена элемента перечисления должны быть уникальными в рамках проекта.

Перечисления в портах DUT верхнего уровня не поддержаны со следующими рабочими процессами или методами верификации:

  • Рабочий процесс Генерации Ядра IP

  • Рабочий процесс Тюремщика FPGA

  • FPGA в цикле

  • HDL Cosimulation

Глобальные переменные не поддержаны для генерации HDL-кода.

Поддерживаемые операторы

Примечание

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

Арифметические операторы

ОперацияСинтаксис оператораЭквивалентная функцияОграничения
Сложение в двоичной системе A+B plus(A,B) Ни A, ни B не могут быть типом данных logical.
Умножение матриц A*B mtimes(A,B)

HDL-код, сгенерированный для матричных арифметических операций, не является конвейерным и может привести к неэффективному коду.

Умножение Arraywise A.*B times(A,B) Ни A, ни B не могут быть типом данных logical.
Матричная степень A^B mpower(A,B)

A и B должны быть скаляром, и B должен быть целым числом.

HDL-код, сгенерированный для матричных арифметических операций, не является конвейерным и может привести к неэффективному коду.

Степень Arraywise A.^B power(A,B) A и B должны быть скаляром, и B должен быть целым числом.
Комплекс транспонирует A' ctranspose(A)
Матрица транспонирует A.' transpose(A)  
Матрица concat [A B] 'none'
Матричный индексA(r c) 'none'Прежде чем вы будете использовать переменную, необходимо полностью задать ее.

Логические операторы

ОперацияСинтаксис оператораM функциональный эквивалентПримечания
Логический и A&Band(A,B)
Логический или A|Bor(A,B)
Логический Xor A xor Bxor(A,B)
Логический И (срывающий) A&&B

Нет данных

Используйте срывающие логические операторы в условных выражениях.
Логический Или (срывающий) A||B

Нет данных

Используйте срывающие логические операторы в условных выражениях.
Дополнение элемента ~Anot(A)

Операторы отношения

ОтношениеСинтаксис оператораЭквивалентная функция
Меньше, чем A<B lt(A,B)
Меньше чем или равный A<=B le(A,B)
Больше, чем или равный A>=B ge(A,B)
Больше, чем A>B gt(A,B)
Равный A==B eq(A,B)
Не равный A~=B ne(A,B)

Операторы управления

HDL Coder поддерживает следующие операторы управления и построения с ограничениями.

Оператор управления Ограничения

for

Не используйте циклы for без статических границ.

Не используйте & и операторы | в условиях оператора for. Вместо этого используйте операторы || и &&.

HDL Coder не поддерживает нескалярные выражения в условиях операторов for. Вместо этого используйте all или функции any, чтобы свернуть логические векторы в скаляры.

if

Не используйте & и операторы | в условиях оператора if. Вместо этого используйте операторы || и &&.

HDL Coder не поддерживает нескалярные выражения в условиях операторов if. Вместо этого используйте all или функции any, чтобы свернуть логические векторы в скаляры.

switch

Условное выражение в операторе switch или case должно использовать только:

  • uint8, uint16, uint32, int8, int16 или типы данных int32

  • Скалярные данные

Если несколько операторов case делают присвоения на ту же переменную, числовой тип и спецификация fimath для той переменной должны быть тем же самым в каждом операторе case.

Следующие операторы управления не поддержаны:

  • while

  • break

  • continue

  • return

  • parfor

Избегайте использования следующих вектор-функций, когда они могут сгенерировать циклы, содержащие операторы break:

  • isequal

  • bitrevorder