logo

Operatori Verilog

Gli operatori eseguono un'operazione su uno o più operandi all'interno di un'espressione. Un'espressione combina gli operandi con gli operatori appropriati per produrre l'espressione funzionale desiderata.

1. Operatori aritmetici

Per l'FPGA, la divisione e la moltiplicazione sono molto costose e talvolta non è possibile sintetizzare la divisione. Se usiamo Z o X per i valori, il risultato è sconosciuto. Le operazioni trattano i valori come senza segno.

Carattere Operazione eseguita Esempio
+ Aggiungere b + c = 11
- Sottrac b - c = 9, -b=-10
/ Dividere b/a = 2
* Moltiplicare a*b = 50
% Modulo b%a = 0

2. Operatori bit a bit

Ogni bit viene gestito, il risultato è la dimensione dell'operando più grande e l'operando più piccolo viene lasciato esteso con zeri fino alla dimensione dell'operando più grande.

Carattere Operazione eseguita Esempio
~ Invertire ogni bit ~a = 3'b010
& E ogni pezzo b&c = 3'b010
| O ogni bit un | b = 3'b111
^ Xo ogni bit a^b = 3'b011
^~ o ~^ Xné ogni bit un ^~ b = 3'b100

3. Operatori di riduzione

Questi operatori riducono i vettori a un solo bit. Se sono presenti i caratteri z e x, il risultato può essere un valore noto.

Carattere Operazione eseguita Esempio
& E tutti i pezzi &a = 1'b0, &d = 1'b0
~& Nand tutti i bit ~&a = 1'b1
| O tutti i pezzi |a = 1'b1, |c = 1'bX
~| Né tutti i pezzi ~|a= 1'b0
^ Xo tutti i bit ^a = 1'b1
^~ o ~^ Xné tutti i bit ~^a = 1'b0

4. Operatori Relazionali

Questi operatori confrontano gli operandi e restituiscono un valore booleano scalare a 1 bit. Gli operatori di uguaglianza e disuguaglianza possono essere utilizzati per valori di impedenza sconosciuti o elevati (z o x) e se i due operandi sono sconosciuti, il risultato è 1.

Carattere Operazione eseguita Esempio
> Più grande di a > b = 1'b0
< Più piccolo di UN
>= Maggiore o uguale a >= d = 1'bX
<=< td> Minore o uguale UN<= e='1'bX</td'>
== Uguaglianza a == b = 1'b0
!= Disuguaglianza a!= b = 1'b1
=== Uguaglianza dei casi e === e = 1'b1
!=== Disuguaglianza dei casi e !== d = 1'b1

5. Operatori logici

Questi operatori confrontano gli operandi e restituiscono un valore booleano scalare a 1 bit.

Carattere Operazione eseguita Esempio
! Non vero !(a && b) = 1'b1
&& Entrambe le espressioni sono vere a&& b = 1'b0
|| Una o entrambe le espressioni sono vere e || b = 1'b1

6. Operatori di turno

Questi operatori spostano gli operandi a destra o a sinistra, la dimensione viene mantenuta costante, i bit spostati vengono persi e il vettore viene riempito di zeri.

Immagini icloud su Android
Carattere Operazione eseguita Esempio
>> Spostati a destra b >> 1 risultato 4?b010X
<< Spostati a sinistra a << 2 risultati 4?b1000

7. Operatori di Assegnazione

Esistono tre operatori di assegnazione, ognuno dei quali esegue attività diverse e vengono utilizzati con tipi di dati diversi:

  • assegnare (assegnazione continua)
  • <= (non-blocking assignment)< li>
  • = (assegnazione bloccante)

8. Altri Operatori

Si tratta di operatori utilizzati per i test delle condizioni e per creare vettori.

Carattere Operazione eseguita Esempio
?: Test delle condizioni cond. di prova ? se è vero, fai così, altrimenti fallo
{} Concatenare c = {a,b} = 8'101010x0
{{}} Replicare {3{2'b10}}= 6'b101010

9. Precedenza degli operatori

L'ordine della tabella indica quale operazione viene eseguita per prima. Il primo ha la massima priorità. Il carattere () può essere utilizzato per sovrascrivere l'impostazione predefinita.

Precedenza degli operatori
+, -, !, ~ (Unario)
+,- (Binario)
<>
,=
==, !=
&
^, ^~ o ~^
|
&&
||
?: