Когда вы генерируете HDL-код из своего алгоритма MATLAB®, используйте типы данных, операторы и операторы управления, которые поддерживает HDL Coder™.
HDL Coder не поддерживает типы данных Inf
и массивы ячеек. Эта таблица показывает поддерживаемое подмножество типов данных MATLAB.
Типы | Поддерживаемые типы данных | Ограничения |
---|---|---|
Целое число |
| В Simulink® порты блока MATLAB function должны использовать числовые типы sfix64 или ufix64 для 64-битных данных. |
Действительный |
| HDL-код, сгенерированный с double или типами данных single в вашем коде MATLAB, может использоваться для симуляции, но не синтезируемый. Можно сгенерировать синтезируемый код, когда вы используете эти типы данных в своей модели Simulink. Для получения дополнительной информации см.:
|
Символ | char | – |
Логический |
| – |
Фиксированная точка |
| Числа фиксированной точки с наклоном (не равный 1,0) и смещение (не равный 0,0) не поддержаны. Максимальный размер слова для чисел фиксированной точки составляет 128 битов. |
Векторы |
| Максимальное количество векторных позволенных элементов 2^32. Прежде чем переменная преобразовывается в нижний индекс, она должна быть полностью задана. |
Матрицы |
| Матрицы поддерживаются в теле алгоритма проекта, но не поддержаны как входные параметры к функции проекта верхнего уровня. Не используйте матрицы в испытательном стенде. |
Структуры | struct | Массивы структур не поддержаны. Для Тюремщика FPGA и рабочих процессов Генерации Ядра IP, структуры поддерживаются в теле алгоритма проекта, но не поддержаны как входные параметры к функции проекта верхнего уровня. |
Перечисления | enumeration | Перечислимые величины должны монотонно увеличиваться. Если вашим выходным языком является Verilog®, все имена элемента перечисления должны быть уникальными в рамках проекта. Перечисления в портах DUT верхнего уровня не поддержаны со следующими рабочими процессами или методами верификации:
|
Глобальные переменные не поддержаны для генерации 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) |
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&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 Coder поддерживает следующие операторы управления и построения с ограничениями.
Оператор управления | Ограничения |
---|---|
| Не используйте циклы Не используйте HDL Coder не поддерживает нескалярные выражения в условиях операторов |
if | Не используйте HDL Coder не поддерживает нескалярные выражения в условиях операторов |
switch | Условное выражение в операторе
Если несколько операторов |
Следующие операторы управления не поддержаны:
while
break
continue
return
parfor
Избегайте использования следующих вектор-функций, когда они могут сгенерировать циклы, содержащие операторы break
:
isequal
bitrevorder