Operatörer utför en operation på en eller flera operander i ett uttryck. Ett uttryck kombinerar operander med lämpliga operatorer för att producera det önskade funktionella uttrycket.
1. Aritmetiska operatorer
För FPGA är division och multiplikation mycket dyra, och ibland kan vi inte syntetisera division. Om vi använder Z eller X för värden är resultatet okänt. Operationerna behandlar värdena som osignerade.
Karaktär | Operation utförd | Exempel |
+ | Lägg till | b + c = 11 |
- | Subtrac | b - c = 9, -b = -10 |
/ | Dela upp | b/a = 2 |
* | Multiplicera | a * b = 50 |
% | Modul | b % a = 0 |
2. Bitvisa operatörer
Varje bit opereras, resultatet är storleken på den största operanden, och den mindre operanden lämnas förlängd med nollor till den större operandens storlek.
Karaktär | Operation utförd | Exempel |
~ | Invertera varje bit | ~a = 3'b010 |
& | Och varje bit | b & c = 3'b010 |
| | Eller varje bit | en | b = 3'b111 |
^ | Xor varje bit | a ^ b = 3'b011 |
^~ eller ~^ | Xnor varje bit | a ^~ b = 3'b100 |
3. Reduktionsoperatörer
Dessa operatorer reducerar vektorerna till endast en bit. Om det finns tecknen z och x kan resultatet bli ett känt värde.
Karaktär | Operation utförd | Exempel |
& | Och alla bitar | &a = 1'b0, &d = 1'b0 |
~& | Och alla bitar | ~&a = 1'b1 |
| | Eller alla bitar | |a = 1'bl, |c = 1'bX |
~| | Inte heller alla bitar | ~|a= 1'b0 |
^ | Xor alla bitar | ^a = 1'b1 |
^~ eller ~^ | Xnor alla bitar | ~^a = 1'b0 |
4. Relationella operatörer
Dessa operatorer jämför operander och resulterar i ett 1-bitars skalärt booleskt värde. Operatörerna för falllikhet och ojämlikhet kan användas för okända eller höga impedansvärden (z eller x), och om de två operanderna är okända blir resultatet en 1.
Karaktär | Operation utförd | Exempel |
> | Större än | a > b = 1'b0 |
< | Mindre än | a |
>= | Större än eller lika med | a >= d = 1'bX |
<=< td> | Mindre än eller lika | a<= e='1'bX</td'> => | =<>
== | Jämlikhet | a == b = 1'b0 |
!= | Olikhet | a != b = 1'b1 |
=== | Jämställdhet | e === e = 1'b1 |
!=== | Ojämlikhet i fall | och !== d = 1'b1 |
5. Logiska operatörer
Dessa operatorer jämför operander och resulterar i ett 1-bitars skalärt booleskt värde.
Karaktär | Operation utförd | Exempel |
! | Inte sant | !(a && b) = 1'b1 |
&& | Båda uttrycken är sanna | a && b = 1'b0 |
|| | Ett eller båda uttrycken är sanna | och || b = 1'b1 |
6. Växlingsoperatörer
Dessa operatorer skiftar operander åt höger eller vänster, storleken hålls konstant, skiftade bitar går förlorade och vektorn fylls med nollor.
java-sträng till boolesk
Karaktär | Operation utförd | Exempel |
>> | Växla åt höger | b >> 1 resultat 4?b010X |
<< | Växla åt vänster | a << 2 resultat 4?b1000 |
7. Uppdragsoperatörer
Det finns tre uppdragsoperatörer, som var och en utför olika uppgifter och används med olika datatyper:
- tilldela (löpande tilldelning)
- <= (non-blocking assignment)< li>
- = (blockerande tilldelning) =>
8. Andra operatörer
Dessa är operatorer som används för tillståndstestning och för att skapa vektorer.
Karaktär | Operation utförd | Exempel |
?: | Villkorstestning | provkondition. ? om det är sant gör det här eller om inte gör det här |
{} | Sammanfoga | c = {a,b} = 8'101010x0 |
{{}} | Återskapa | {3{2'b10}}= 6'b101010 |
9. Operatörernas företräde
Tabellordningen talar om vilken operation som görs först. Den första har högsta prioritet. () kan användas för att åsidosätta standardinställningen.
Operatörernas företräde |
---|
+, -, !, ~ (unär) |
+,- (binär) |
<> |
,= |
==, != |
& |
^, ^~ eller ~^ |
| |
&& |
|| |
?: |