hoe conditionele statements te gebruiken in VHDL: If-Then-Elsif-Else

in de vorige tutorial gebruikten we een conditionele expressie met het wacht tot statement. De uitdrukking zorgde ervoor dat het proces alleen werd geactiveerd wanneer de twee teller signalen gelijk waren. Maar wat als we wilden dat het programma in een proces om verschillende acties te nemen op basis van verschillende input?

de IF-Then-Elsif-Else statements kunnen gebruikt worden om branches aan te maken in ons programma. Afhankelijk van de waarde van een variabele, of de uitkomst van een expressie, kan het programma verschillende paden nemen.

deze blogpost maakt deel uit van de basisreeks VHDL-Tutorials.

de basissyntaxis is:

if <condition> then
elsif <condition> then
else
end if;

elsif en else zijn facultatief en elsif mag meerdere keren worden gebruikt. De <condition> kan een Booleaanse true of false zijn, of een uitdrukking die resulteert in true of false.

Example expression which is true if MyCounter is kleiner dan 10:

MyCounter < 10

relationele operatoren:

= gelijk
/= niet gelijk
< minder dan
<= minder dan of gelijk
> groter dan
>= groter dan of gelijk

Logische operatoren:

geen true als false
a en b true als a en b waar zijn
a of b true als a of b waar zijn
een nand b true als a of b is onwaar
a noch b true als a en b zijn onjuist
a xor b true als precies één van de a-of b-ware
een xnor b true als a en b gelijk zijn

Oefening

In deze video tutorial we zullen leren hoe je If-Then-Elsif-Else statements in VHDL kunt gebruiken:

de uiteindelijke code die we in deze tutorial hebben aangemaakt:

entity T08_IfTb isend entity;architecture sim of T08_IfTb is signal CountUp : integer := 0; signal CountDown : integer := 10;begin process is begin CountUp <= CountUp + 1; CountDown <= CountDown - 1; wait for 10 ns; end process; process is begin if CountUp > CountDown then report "CountUp is larger"; elsif CountUp < CountDown then report "CountDown is larger"; else report "They are equal"; end if; wait on CountUp, CountDown; end process;end architecture;

de uitvoer naar de simulator console toen we op de knop Uitvoeren in ModelSim:

VSIM 2> run# ** Note: CountDown is larger# Time: 0 ns Iteration: 0 Instance: /t08_iftb# ** Note: CountDown is larger# Time: 0 ns Iteration: 1 Instance: /t08_iftb# ** Note: CountDown is larger# Time: 10 ns Iteration: 1 Instance: /t08_iftb# ** Note: CountDown is larger# Time: 20 ns Iteration: 1 Instance: /t08_iftb# ** Note: CountDown is larger# Time: 30 ns Iteration: 1 Instance: /t08_iftb# ** Note: They are equal# Time: 40 ns Iteration: 1 Instance: /t08_iftb# ** Note: Countup is larger# Time: 50 ns Iteration: 1 Instance: /t08_iftb# ** Note: Countup is larger# Time: 60 ns Iteration: 1 Instance: /t08_iftb...

analyse

we gaven CountDown een beginwaarde van 10, en CountUp een waarde van 0. Het eerste proces verandert beide teller waarden op exact hetzelfde moment, elke 10 ns. Wanneer dit gebeurt, wordt het tweede proces geactiveerd omdat het programma altijd zal wachten op de wait on CountUp, CountDown; regel. Het programma zal daar altijd wachten omdat de If-Then-Elsif-Else en de rapportverklaringen nul simulatietijd verbruiken.

het If-Then-Elsif-Else commando zorgt ervoor dat het programma een van de drie branches neemt die we gemaakt hebben. De twee eerste vertakkingen hebben betrekking op de gevallen waarin de twee tellers verschillende waarden hebben. We hadden de single else kunnen laten vallen, en elsif CountUp = CountDown then kunnen gebruiken wat hetzelfde resultaat zou hebben gehad. Maar het is een goede ontwerppraktijk om alle takken te bestrijken, en de else – clausule heeft betrekking op alle opzettelijke en onvoorziene gevallen.

zoals we kunnen zien aan de afdruk, neemt het tweede proces een van de drie branches elke keer dat de tellers veranderen.

krijg exclusieve toegang tot oefeningen en Antwoorden!

Afhaalmaaltijd

  • If-Then kan alleen of in combinatie met Elsif en Else worden gebruikt.
  • expressies kunnen relationele en logische vergelijkingen en wiskundige berekeningen bevatten

Ga naar de volgende les “