Operatorii efectuează o operație pe unul sau mai mulți operanzi dintr-o expresie. O expresie combină operanzi cu operatori corespunzători pentru a produce expresia funcțională dorită.
1. Operatori aritmetici
Pentru FPGA, diviziunea și înmulțirea sunt foarte scumpe și uneori nu putem sintetiza diviziunea. Dacă folosim Z sau X pentru valori, rezultatul este necunoscut. Operațiile tratează valorile ca nesemnate.
Caracter | Operația efectuată | Exemplu |
+ | Adăuga | b + c = 11 |
- | Scăderea | b - c = 9, -b = -10 |
/ | Divide | b/a = 2 |
* | Multiplica | a * b = 50 |
% | Modulul | b % a = 0 |
2. Operatori pe biți
Fiecare bit este operat, rezultatul este dimensiunea celui mai mare operand, iar operandul mai mic este lăsat extins cu zerouri până la dimensiunea operandului mai mare.
Caracter | Operația efectuată | Exemplu |
~ | Inversați fiecare bit | ~a = 3'b010 |
& | Și fiecare bit | b & c = 3'b010 |
| | Sau fiecare bit | a | b = 3'b111 |
^ | X sau fiecare bit | a ^ b = 3'b011 |
^~ sau ~^ | Xnor fiecare bit | a ^~ b = 3'b100 |
3. Operatori de reducere
Acești operatori reduc vectorii la doar un bit. Dacă există caracterele z și x, rezultatul poate fi o valoare cunoscută.
Caracter | Operația efectuată | Exemplu |
& | Și toate bucățile | &a = 1'b0, &d = 1'b0 |
~& | Nu toate bucățile | ~&a = 1'b1 |
| | Sau toate bucățile | |a = 1'b1, |c = 1'bX |
~| | Nici toate bucățile | ~|a= 1'b0 |
^ | X sau toate biturile | ^a = 1'b1 |
^~ sau ~^ | Xnor toate biturile | ~^a = 1'b0 |
4. Operatori relaționali
Acești operatori compară operanzi și rezultă într-o valoare booleană scalară de 1 bit. Operatorii de egalitate și inegalitate de caz pot fi utilizați pentru valori necunoscute sau de impedanță mare (z sau x), iar dacă cei doi operanzi sunt necunoscuți, rezultatul este 1.
Caracter | Operația efectuată | Exemplu |
> | Mai mare ca | a > b = 1'b0 |
< | Mai mic ca | A |
>= | Mai mare sau egal | a >= d = 1'bX |
<=< td> | Mai mic sau egal | A<= e='1'bX</td'> => | =<>
== | Egalitatea | a == b = 1'b0 |
!= | Inegalitate | a != b = 1'b1 |
=== | Egalitatea de caz | e === e = 1'b1 |
!=== | Inegalitate de caz | şi !== d = 1'b1 |
5. Operatori logici
Acești operatori compară operanzi și rezultă într-o valoare booleană scalară de 1 bit.
Caracter | Operația efectuată | Exemplu |
! | Neadevarat | !(a && b) = 1'b1 |
&& | Ambele expresii adevărate | a && b = 1'b0 |
|| | Una sau ambele expresii adevărate | și || b = 1'b1 |
6. Operatori în schimburi
Acești operatori mută operanzii la dreapta sau la stânga, dimensiunea este menținută constantă, biții deplasați se pierd și vectorul este umplut cu zerouri.
manager de sarcini pentru linux
Caracter | Operația efectuată | Exemplu |
>> | Schimbați la dreapta | b >> 1 rezultate 4?b010X |
<< | Schimbați la stânga | a << 2 rezultate 4?b1000 |
7. Operatori de atribuire
Există trei operatori de atribuire, fiecare dintre care efectuează sarcini diferite și sunt utilizați cu diferite tipuri de date:
- atribui (atribuire continuă)
- <= (non-blocking assignment)< li>
- = (blocarea atribuirii) =>
8. Alți Operatori
Aceștia sunt operatori utilizați pentru testarea condițiilor și pentru a crea vectori.
Caracter | Operația efectuată | Exemplu |
?: | Testarea condițiilor | test cond. ? dacă este adevărat fă asta sau dacă nu fă asta |
{} | Înlănţui | c = {a,b} = 8'101010x0 |
{{}} | Replica | {3{2'b10}}= 6'b101010 |
9. Precedenta operatorilor
Ordinea tabelului spune ce operație se face prima. Prima are cea mai mare prioritate. () poate fi folosit pentru a înlocui valoarea implicită.
Prioritatea operatorilor |
---|
+, -, !, ~ (Unar) |
+,- (binar) |
<> |
,= |
==, != |
& |
^, ^~ sau ~^ |
| |
&& |
|| |
?: |