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