feltételes utasítások használata a VHDL-ben: If-Then-Elsif-Else
az előző oktatóanyagban feltételes kifejezést használtunk a Wait Until utasítással. A kifejezés biztosította, hogy a folyamat csak akkor vált ki, amikor a két ellenjel egyenlő. De mi lenne, ha azt akarnánk, hogy a program egy folyamatban különböző műveleteket hajtson végre különböző bemenetek alapján?
az If-Then-Elsif-Else utasításokkal ágakat hozhatunk létre a programunkban. A változó értékétől vagy egy kifejezés eredményétől függően a program különböző útvonalakat vehet fel.
ez a blogbejegyzés része az alapvető VHDL oktatóanyagok sorozat.
az alapvető szintaxis:
if <condition> then
elsif <condition> then
else
end if;
a elsif és a else opcionális, és a elsif többször is használható. A <condition> lehet logikai true vagy false, vagy lehet egy kifejezés, amely értékeli truevagy false.
példa kifejezés, amely true ha MyCounter kisebb, mint 10:
MyCounter < 10
relációs operátorok:
| = | egyenlő |
| /= | nem egyenlő |
| < | kevesebb, mint |
| <= | kisebb vagy egyenlő |
| > | nagyobb, mint |
| >= | nagyobb vagy egyenlő |
logikai operátorok:
| nem | igaz, ha a hamis |
| A és b | igaz, ha a és b igaz |
| a vagy b | igaz, ha a vagy b igaz |
| a nand b | igaz, ha a vagy b hamis |
| a nor b | igaz, ha a és b hamis |
| a xor B | igaz, ha pontosan egy a vagy b igaz |
| a xnor B | igaz, ha a és b egyenlő |
gyakorlat
ebben a videóban bemutató megtanuljuk, hogyan kell használni az If-Then-Elsif-Else utasításokat a VHDL – ben:
a végső kódot, amelyet ebben az oktatóanyagban hoztunk létre:
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;
a szimulátor konzol kimenete, amikor megnyomtuk a Futtatás gombot a ModelSim-ben:
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...
elemzés
a CountDown kezdeti értékét 10-nek, CountUp 0-nak adtuk. Az első folyamat mindkét számláló értékét pontosan ugyanabban az időben változtatja meg, minden 10 ns. Amikor ez megtörténik, a második folyamat elindul, mert a program mindig a wait on CountUp, CountDown; sorban vár. A program mindig ott vár, mert az If-Then-Elsif-Else és a report utasítások nulla szimulációs időt fogyasztanak.
az If-Then-Elsif-Else utasítás hatására a program az általunk létrehozott három ág egyikét veszi fel. A két első ág azokat az eseteket fedi le, amikor a két számláló értéke eltérő. Elhagyhattuk volna a else kislemezt, és használhattuk volna a elsif CountUp = CountDown then – t, ami ugyanazt az eredményt hozta volna. De jó tervezési gyakorlat, hogy minden ágra kiterjed, és a else záradék kiterjed minden szándékos és előre nem látható esetre.
amint a nyomtatásból láthatjuk, a második folyamat a három ág egyikét veszi igénybe minden alkalommal, amikor a számlálók megváltoznak.

elvihető
- If-Then alkalmazható önmagában vagy Elsif-el és mással kombinálva.
- a kifejezések relációs és logikai összehasonlításokat és matematikai számításokat tartalmazhatnak
ugrás a következő oktatóanyagra “