Когда вы генерируете 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