Operators voeren een bewerking uit op een of meer operanden binnen een expressie. Een expressie combineert operanden met geschikte operatoren om de gewenste functionele expressie te produceren.
1. Rekenkundige operatoren
Voor de FPGA zijn delen en vermenigvuldigen erg duur, en soms kunnen we deling niet synthetiseren. Als we Z of X voor waarden gebruiken, is het resultaat onbekend. De bewerkingen behandelen de waarden als niet-ondertekend.
Karakter | Operatie uitgevoerd | Voorbeeld |
+ | Toevoegen | b+c=11 |
- | Aftrekken | b - c = 9, -b = -10 |
/ | Verdeling | b / een = 2 |
* | Vermenigvuldigen | een * b = 50 |
% | Module | b% a = 0 |
2. Bitwise-operatoren
Elke bit wordt bewerkt, het resultaat is de grootte van de grootste operand, en de kleinere operand wordt uitgebreid met nullen tot de grootte van de grotere operand.
Karakter | Operatie uitgevoerd | Voorbeeld |
~ | Keer elk bit om | ~a = 3'b010 |
& | En elk stukje | b & c = 3'b010 |
| | Of elk stukje | een | b = 3'b111 |
^ | Xor elk bit | a ^ b = 3'b011 |
^~ of ~^ | Xnor elk stukje | a ^~ b = 3'b100 |
3. Reductie-operatoren
Deze operatoren reduceren de vectoren tot slechts één bit. Als er de tekens z en x aanwezig zijn, kan het resultaat een bekende waarde zijn.
Karakter | Operatie uitgevoerd | Voorbeeld |
& | En allemaal stukjes | &a = 1'b0, &d = 1'b0 |
~& | Nand alle stukjes | ~&a = 1'b1 |
| | Of allemaal stukjes | |a = 1'b1, |c = 1'bX |
~| | Ook niet alle stukjes | ~|a= 1'b0 |
^ | Xor alle bits | ^a = 1'b1 |
^~ of ~^ | Xnor alle bits | ~^a = 1'b0 |
4. Relationele operators
Deze operatoren vergelijken operanden en resulteren in een 1-bit scalaire Booleaanse waarde. De operatoren voor gevalsgelijkheid en ongelijkheid kunnen worden gebruikt voor onbekende of hoge impedantiewaarden (z of x), en als de twee operanden onbekend zijn, is het resultaat een 1.
Karakter | Operatie uitgevoerd | Voorbeeld |
> | Groter dan | a > b = 1'b0 |
< | Kleiner dan | A |
>= | Groter dan of gelijk aan | a >= d = 1'bX |
<=< td> | Kleiner dan of gelijk | A<= e='1'bX</td'> => | =<>
== | Gelijkwaardigheid | a == b = 1'b0 |
!= | Ongelijkheid | a != b = 1'b1 |
=== | Gelijkheid van gevallen | e === e = 1'b1 |
!=== | Ongelijkheid van gevallen | en !== d = 1'b1 |
5. Logische operatoren
Deze operatoren vergelijken operanden en resulteren in een 1-bit scalaire Booleaanse waarde.
Karakter | Operatie uitgevoerd | Voorbeeld |
! | Niet waar | !(a && b) = 1'b1 |
&& | Beide uitdrukkingen zijn waar | a && b = 1'b0 |
|| | Eén of beide uitdrukkingen zijn waar | en || b = 1'b1 |
6. Shiftoperatoren
Deze operatoren verschuiven operanden naar rechts of links, de grootte wordt constant gehouden, verschoven bits gaan verloren en de vector wordt gevuld met nullen.
objectief Java
Karakter | Operatie uitgevoerd | Voorbeeld |
>> | Schakel naar rechts | b >> 1 resultaten 4?b010X |
<< | Schakel naar links | a << 2 resultaten 4?b1000 |
7. Toewijzingsoperatoren
Er zijn drie toewijzingsoperatoren, die elk verschillende taken uitvoeren en worden gebruikt met verschillende gegevenstypen:
- toewijzen (doorlopende toewijzing)
- <= (non-blocking assignment)< li>
- = (blokkeertoewijzing) =>
8. Andere exploitanten
Dit zijn operators die worden gebruikt voor conditietesten en om vectoren te creëren.
Karakter | Operatie uitgevoerd | Voorbeeld |
?: | Voorwaarden testen | testcond. ? indien waar, doe dit of indien niet, doe dit |
{} | Samenvoegen | c = {a,b} = 8'101010x0 |
{{}} | Repliceren | {3{2'b10}}= 6'b101010 |
9. Voorrang van operators
De volgorde van de tabel geeft aan welke bewerking als eerste wordt uitgevoerd. De eerste heeft de hoogste prioriteit. De () kan worden gebruikt om de standaardwaarde te overschrijven.
Voorrang van operators |
---|
+, -, !, ~ (Unair) |
+,- (Binair) |
<> |
,= |
==, != |
& |
^, ^~ of ~^ |
| |
&& |
|| |
?: |