Арифметические выражения
Арифметические выражения можно использовать для определения оцениваемых функций в операторах Define, констант в операторах Constant, значений параметров в операторах Parameters и в качестве ограничителей диапазонов шин. Например,
Диапазон, определенный с помощью арифметического выражения:
SUBDESIGN foo
(
a[4..2+1-3+8] : INPUT;
)
Константа, определенная с помощью арифметического выражения:
CONSTANT foo = 1 + 2 DIV 3 + LOG2(256);
Оцениваемая функция, определенная с помощью арифметического выражения:
DEFINE MIN(a,b) = ((a < b) ? a : b);
Арифметические операторы и компараторы используются в этих выражениях для выполнения основных арифметических и сравнительных операций с числами в них. В арифметических выражениях используются следующие операторы и компараторы:
Оператор/ компаратор: | Пример: | Описание: | Приоритет: | ||||
+ (унарный) | +1 | положительный | 1 | ||||
- (унарный) | -1 | отрицательный | 1 | ||||
! | !a | NOT | 1 | ||||
^ | a ^ 2 | степень | 1 | ||||
MOD | 4 MOD 2 | модуль | 2 | ||||
DIV | 4 DIV 2 | деление | 2 | ||||
* | a * 2 | умножение | 2 | ||||
LOG2 | LOG2(4-3) | логарифм по основанию 2 | 2 | ||||
+ | 1+1 | сложение | 3 | ||||
- | 1-1 | вычитание | 3 | ||||
== (числовой) | 5 == 5 | числовое равенство | 4 | ||||
== (строковый) | "a" == "b" | строковое равенство | 4 | ||||
!= | 5 != 4 | не равно | 4 | ||||
> | 5 > 4 | больше чем | 4 | ||||
>= | 5 >= 5 | больше чем или равно | 4 | ||||
< | a < b+2 | меньше чем | 4 | ||||
<= | a <= b+2 | меньше чем или равно | 4 | ||||
& | a & b | AND | 5 | ||||
AND | a AND b | ||||||
!& | 1 !& 0 | NAND | 5 | ||||
NAND | 1 NAND 0 | ||||||
$ | 1 $ 1 | XOR | 6 | ||||
XOR | 1 XOR 1 | ||||||
!$ | 1 !$ 1 | XNOR | 6 | ||||
XNOR | 1 XNOR 1 | ||||||
# | a # b | OR | 7 | ||||
OR | a OR b | ||||||
!# | a !# b | NOR | 7 | ||||
NOR | a NOR b | ||||||
? | (5<4) ? 3:4 | тернарный | 8 |
Ко всем арифметическим выражениям применяются следующие правила:
1. Арифметические выражения должны давать не отрицательные числа.
2. Когда результат LOG2 не целый, он автоматически округляется до следующего целого. Например, LOG2(257) = 9.
Арифметические операторы, поддерживаемые в арифметических выражениях, являются надмножеством арифметических операторов, поддерживаемых в булевых выражениях, которые описываются в 1.3.9.2.