При создании кода HDL из алгоритма MATLAB ® используйте типы данных, операторы и управляющие операторы потока, поддерживаемые Coder™ HDL.
Кодер HDL не поддерживает массивы ячеек и Inf типы данных. В этой таблице показано поддерживаемое подмножество типов данных MATLAB.
| Типы | Поддерживаемые типы данных | Ограничения |
|---|---|---|
| Целое число |
| В Simulink ® порты функциональных блоков MATLAB должны использовать числовые типыsfix64 или ufix64 для 64-разрядных данных. |
| Реальный |
| Код HDL, сгенерированный с помощью double или single типы данных в коде MATLAB могут использоваться для моделирования, но не синтезируются. При использовании этих типов данных в модели Simulink можно создать синтезируемый код. Дополнительные сведения см. в разделе:
|
| Характер | char | – |
| Логичный |
| – |
| Фиксированная точка |
| Числа фиксированных точек с наклоном (не равным 1,0) и смещением (не равным 0,0) не поддерживаются. Максимальный размер слова для чисел с фиксированной точкой составляет 128 бит. |
| Векторы |
| Максимальное допустимое число векторных элементов равно 2 ^ 32. Перед подстрочным индексом переменная должна быть полностью определена. |
| Матрицы |
| Матрицы поддерживаются в теле алгоритма конструирования, но не поддерживаются в качестве входных данных для функции конструирования верхнего уровня. Не используйте матрицы в тестовом инструменте. |
| Структуры | struct | Массивы структур не поддерживаются. Для рабочих процессов FPGA «под ключ» и IP Core Generation структуры поддерживаются в теле алгоритма проектирования, но не поддерживаются в качестве входных данных для функции проектирования верхнего уровня. |
| Перечисления | enumeration | Значения перечисления должны монотонно увеличиваться. Если целевым языком является Verilog ®, все имена членов перечисления должны быть уникальными в конструкции. Перечисления на портах DUT верхнего уровня не поддерживаются следующими рабочими процессами или методами проверки:
|
Глобальные переменные не поддерживаются для генерации кода HDL.
Примечание
Код ЛПВП, генерируемый для больших векторных и матричных входов в арифметические операции, может привести к неэффективному коду. Код для этих операторов не переносится автоматически.
Арифметические операторы
| Операция | Синтаксис оператора | Эквивалентная функция | Ограничения |
|---|---|---|---|
| Двоичное сложение | A+B | plus(A,B) | Ни один A ни B может быть типом данных logical. |
| Умножение матрицы | A*B | mtimes(A,B) | Код ЛПВП, генерируемый для матричных арифметических операций, не является конвейерным и может привести к неэффективному коду. |
| Умножение в массиве | A.*B | times(A,B)
| Ни один A ни B может быть типом данных logical. |
| Мощность матрицы | A^B
| mpower(A,B) |
Код ЛПВП, генерируемый для матричных арифметических операций, не является конвейерным и может привести к неэффективному коду. |
| Мощность массива | A.^B | power(A,B) | A и B должен быть скалярным и B должно быть целым числом. |
| Сложный транспонирование | A'
| ctranspose(A) | – |
| Транспонирование матрицы | A.'
| transpose(A) | |
| Матричный конкат | [A B] | Ничего | – |
| Индекс матрицы | A(r c) | Ничего | Перед использованием переменной необходимо полностью определить ее. |
Логические операторы
| Операция | Синтаксис оператора | Эквивалент функции M | Примечания |
|---|---|---|---|
| Логический и | A&B | and(A,B) | – |
| Логический или | A|B | or(A,B) | – |
| Логический Xor | A xor B | xor(A,B) | – |
| Логическое и (короткое замыкание) | A&&B | Н/Д | Используйте логические операторы короткого замыкания в условиях. |
| Логический или (короткое замыкание) | A||B | Н/Д | Используйте логические операторы короткого замыкания в условиях. |
| Дополнение элемента | ~A | not(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 поддерживает следующие операторы и конструкции потока управления с ограничениями.
| Инструкция по потоку управления | Ограничения |
|---|---|
| Не использовать Не используйте Кодер HDL не поддерживает нескалярные выражения в условиях |
if | Не используйте Кодер HDL не поддерживает нескалярные выражения в условиях |
switch | Условное выражение в
Если несколько |
Следующие операторы потока управления не поддерживаются:
while
break
continue
return
parfor
Избегайте использования следующих векторных функций, поскольку они могут создавать циклы, содержащие break утверждения:
isequal
bitrevorder