Operatori Verilog
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.
| 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 ~^ |
| | |
| && |
| || |
| ?: |