Операторите извършват операция върху един или повече операнди в израз. Един израз комбинира операнди с подходящи оператори, за да произведе желания функционален израз.
1. Аритметични оператори
За FPGA деленето и умножението са много скъпи и понякога не можем да синтезираме разделяне. Ако използваме Z или X за стойности, резултатът е неизвестен. Операциите третират стойностите като беззнакови.
Характер | Извършена операция | Пример |
+ | Добавете | b + c = 11 |
- | Изваждане | b - c = 9, -b = -10 |
/ | Разделям | b / a = 2 |
* | Умножете | a * b = 50 |
% | Модул | b % a = 0 |
2. Побитови оператори
Всеки бит се оперира, резултатът е размерът на най-големия операнд, а по-малкият операнд остава разширен с нули до размера на по-големия операнд.
Характер | Извършена операция | Пример |
~ | Обърнете всеки бит | ~a = 3'b010 |
и | И всеки бит | b & c = 3'b010 |
| | Или всеки бит | a | b = 3'b111 |
^ | Xor всеки бит | a ^ b = 3'b011 |
^~ или ~^ | Xnor всеки бит | a ^~ b = 3'b100 |
3. Редукционни оператори
Тези оператори намаляват векторите само до един бит. Ако има знаците z и x, резултатът може да бъде известна стойност.
Характер | Извършена операция | Пример |
и | И всички битове | &a = 1'b0, &d = 1'b0 |
~& | Nand всички битове | ~&a = 1'b1 |
| | Или всички битове | |a = 1'b1, |c = 1'bX |
~| | Нито всички битове | ~|a= 1'b0 |
^ | Xor всички битове | ^a = 1'b1 |
^~ или ~^ | Xnor всички битове | ~^a = 1'b0 |
4. Релационни оператори
Тези оператори сравняват операндите и водят до 1-битова скаларна булева стойност. Операторите за равенство и неравенство могат да се използват за неизвестни или високи стойности на импеданс (z или x), а ако двата операнда са неизвестни, резултатът е 1.
Характер | Извършена операция | Пример |
> | По-велик от | a > b = 1'b0 |
< | По-малък от | а |
>= | По-голямо или равно | a >= d = 1'bX |
<=< td> | По-малък или равен | а<= e='1'bX</td'> => | =<>
== | Равенство | a == b = 1'b0 |
!= | Неравенство | a != b = 1'b1 |
=== | Равенство между главни и малки букви | e === e = 1'b1 |
!=== | Неравенство на случаите | и !== d = 1'b1 |
5. Логически оператори
Тези оператори сравняват операндите и водят до 1-битова скаларна булева стойност.
Характер | Извършена операция | Пример |
! | Не е вярно | !(a && b) = 1'b1 |
&& | И двата израза са верни | a && b = 1'b0 |
|| | Единият или и двата израза са верни | и || b = 1'b1 |
6. Оператори на смяна
Тези оператори изместват операндите надясно или наляво, размерът се поддържа постоянен, изместените битове се губят и векторът се запълва с нули.
char към низ в java
Характер | Извършена операция | Пример |
>> | Shift надясно | b >> 1 резултата 4?b010X |
<< | Преместване наляво | a << 2 резултата 4?b1000 |
7. Оператори за присвояване
Има три оператора за присвояване, всеки от които изпълнява различни задачи и се използват с различни типове данни:
- възлагане (непрекъснато възлагане)
- <= (non-blocking assignment)< li>
- = (присвояване на блокиране) =>
8. Други оператори
Това са оператори, използвани за тестване на условия и за създаване на вектори.
Характер | Извършена операция | Пример |
?: | Тестване на условията | тестово състояние ? ако е вярно, направете това или ако не, направете това |
{} | Свързване | c = {a,b} = 8'101010x0 |
{{}} | Репликиране | {3{2'b10}}= 6'b101010 |
9. Приоритет на операторите
Редът в таблицата показва коя операция се извършва първа. Първият е с най-висок приоритет. () може да се използва за отмяна на стойността по подразбиране.
Приоритет на операторите |
---|
+, -, !, ~ (унарни) |
+,- (двоичен) |
<> |
,= |
==, != |
и |
^, ^~ или ~^ |
| |
&& |
|| |
?: |