Operatory wykonują operację na jednym lub większej liczbie operandów w wyrażeniu. Wyrażenie łączy operandy z odpowiednimi operatorami w celu utworzenia pożądanego wyrażenia funkcjonalnego.
1. Operatory arytmetyczne
W przypadku FPGA dzielenie i mnożenie są bardzo kosztowne i czasami nie możemy zsyntetyzować podziału. Jeśli jako wartości użyjemy Z lub X, wynik jest nieznany. Operacje traktują wartości jako bez znaku.
Postać | Operacja wykonana | Przykład |
+ | Dodać | b + do = 11 |
- | Odejmij | b - c = 9, -b=-10 |
/ | Dzielić | b/a = 2 |
* | Zwielokrotniać | a * b = 50 |
% | Moduł | b% a = 0 |
2. Operatory bitowe
Każdy bit jest operowany, wynikiem jest rozmiar największego operandu, a mniejszy operand jest rozszerzany o zera do rozmiaru większego operandu.
Postać | Operacja wykonana | Przykład |
~ | Odwróć każdy bit | ~a = 3'b010 |
& | I każdy kawałek | b i c = 3'b010 |
| | Lub każdy kawałek | | b = 3'b111 |
^ | Xor każdy bit | a ^ b = 3'b011 |
^~ lub ~^ | Xnor w każdym calu | a ^~ b = 3'b100 |
3. Operatory redukcji
Operatory te redukują wektory tylko do jednego bitu. Jeśli występują znaki z i x, wynikiem może być znana wartość.
Postać | Operacja wykonana | Przykład |
& | I wszystkie kawałki | &a = 1'b0, &d = 1'b0 |
~& | I wszystkie bity | ~&a = 1'b1 |
| | Albo wszystkie kawałki | |a = 1'b1, |c = 1'bX |
~| | Ani wszystkie kawałki | ~|a= 1'b0 |
^ | Xor wszystkie bity | ^a = 1'b1 |
^~ lub ~^ | Xnor wszystkie bity | ~^a = 1'b0 |
4. Operatory relacyjne
Operatory te porównują operandy i dają w wyniku 1-bitową skalarną wartość logiczną. Operatorów równości i nierówności można używać dla nieznanych lub wysokich wartości impedancji (z lub x), a jeśli oba operandy są nieznane, wynikiem jest 1.
Postać | Operacja wykonana | Przykład |
> | Lepszy niż | a > b = 1'b0 |
< | Mniejszy niż | A |
>= | Większe lub równe | a >= d = 1'bX |
<=< td> | Mniejszy lub równy | A<= e='1'bX</td'> => | =<>
== | Równość | a == b = 1'b0 |
!= | Nierówność | a != b = 1'b1 |
=== | Równość przypadków | e === e = 1'b1 |
!=== | Nierówność przypadków | i !== d = 1'b1 |
5. Operatory logiczne
Operatory te porównują operandy i dają w wyniku 1-bitową skalarną wartość logiczną.
Postać | Operacja wykonana | Przykład |
! | Nie prawda | !(a && b) = 1'b1 |
&& | Obydwa wyrażenia są prawdziwe | a && b = 1'b0 |
|| | Jedno lub oba wyrażenia są prawdziwe | i || b = 1'b1 |
6. Operatorzy zmian
Operatory te przesuwają operandy w prawo lub w lewo, rozmiar pozostaje stały, przesunięte bity są tracone, a wektor jest wypełniany zerami.
rok wynalezienia komputera
Postać | Operacja wykonana | Przykład |
>> | Przesuń w prawo | b >> 1 wyniki 4?b010X |
<< | Przesuń w lewo | a << 2 wyniki 4?b1000 |
7. Operatory przypisania
Istnieją trzy operatory przypisania, z których każdy wykonuje inne zadania i jest używany z różnymi typami danych:
- przypisać (przypisanie ciągłe)
- <= (non-blocking assignment)< li>
- = (przypisanie blokujące) =>
8. Inni Operatorzy
Są to operatory używane do testowania warunków i tworzenia wektorów.
Postać | Operacja wykonana | Przykład |
?: | Testowanie warunków | stan testowy ? jeśli to prawda, zrób to, a jeśli nie, zrób to |
{} | Powiązać | do = {a, b} = 8'101010x0 |
{{}} | Replika | {3{2'b10}}= 6'b101010 |
9. Pierwszeństwo operatorów
Kolejność tabeli określa, która operacja zostanie wykonana jako pierwsza. Pierwszy z nich ma najwyższy priorytet. Znaku () można użyć do zastąpienia wartości domyślnej.
Pierwszeństwo operatorów |
---|
+, -, !, ~ (jednoargumentowy) |
+,- (binarny) |
<> |
,= |
==, != |
& |
^, ^~ lub ~^ |
| |
&& |
|| |
?: |