logo

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.

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