Когда вы генерируете 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 Core Generation, структуры поддерживаются в теле алгоритма проекта, но не поддерживаются в качестве входов для функции проекта верхнего уровня. |
| Перечисления | enumeration | Значения перечисления должны быть монотонно увеличены. Если ваш целевой язык Verilog®все имена представителей перечисления должны быть уникальными в проекте. Перечисления в портах DUT верхнего уровня не поддерживаются следующими рабочими процессами или методами верификации:
|
Глобальные переменные не поддерживаются для генерации HDL-кода.
Примечание
HDL-код, сгенерированный для больших векторных и матричных входов в арифметические операции, может привести к неэффективному коду. Код для этих операторов не конвейерируется автоматически.
Арифметические операторы
| Операция | Синтаксис оператора | Эквивалентная функция | Ограничения |
|---|---|---|---|
| Двоичное сложение | A+B | plus(A,B) | Ни один из Aни B может быть типом данных logical. |
| Матричное умножение | A*B | mtimes(A,B) | HDL-код, сгенерированный для матричных арифметических операций, не конвейеризован, и может привести к неэффективному коду. |
| Массивное умножение | A.*B | times(A,B)
| Ни один из Aни B может быть типом данных logical. |
| Матричная степень | A^B
| mpower(A,B) |
HDL-код, сгенерированный для матричных арифметических операций, не конвейеризован, и может привести к неэффективному коду. |
| Массивная степень | 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 Coder поддерживает следующие операторы и конструкции потока управления с ограничениями.
| Оператор потока управления | Ограничения |
|---|---|
| Не используйте Не используйте HDL Coder не поддерживает нескалярные выражения в условиях |
if | Не используйте HDL Coder не поддерживает нескалярные выражения в условиях |
switch | Условное выражение в
Если несколько |
Следующие операторы потока управления не поддерживаются:
while
break
continue
return
parfor
Избегайте использования следующих векторных функций, так как они могут генерировать циклы, содержащие break операторы:
isequal
bitrevorder