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

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

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

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

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

  • int8int16int32int64

В 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 оператор должен использовать только:

  • uint8uint16uint32int8int16, или int32 типы данных

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

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

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

  • while

  • break

  • continue

  • return

  • parfor

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

  • isequal

  • bitrevorder