Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> VHDL

Wachten en wachten tot gebruiken in VHDL

In de vorige tutorial leerden we de belangrijkste verschillen tussen signalen en variabelen. We hebben geleerd dat signalen een breder bereik hebben dan variabelen, die alleen binnen één proces toegankelijk zijn. Dus hoe kunnen we signalen gebruiken voor communicatie tussen verschillende processen?

We hebben al geleerd om wait; . te gebruiken om oneindig te wachten, en wait for om een ​​bepaalde tijd te wachten. Er bestaan ​​nog twee soorten wachtinstructies in VHDL.

Deze blogpost maakt deel uit van de serie Basic VHDL Tutorials.

De instructie Wait On pauzeert het proces totdat een van de gespecificeerde signalen verandert:
wait on <signal_name1>, <signal_name2> ...;

De instructie Wait Until pauzeert totdat een gebeurtenis ervoor zorgt dat de voorwaarde waar wordt:
wait until <condition>;

Wachten op, wachten tot en wachten op kunnen zelfs worden gecombineerd:
wait on <signal_name1> until <condition> for <time_value>;

Dit voorbeeld pauzeert 10 nanoseconden, of tot signal1 wijzigingen en signal2 is gelijk aan signal3 :
wait on signal1 until signal2 = signal3 for 10 ns;

Oefening

In deze video-tutorial leren we hoe u de instructies Wachten en Wachten kunt gebruiken voor communicatie tussen processen in VHDL:

De laatste code die we in deze tutorial hebben gemaakt:

entity T07_WaitOnUntilTb is
end entity;

architecture sim of T07_WaitOnUntilTb 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

        wait on CountUp, CountDown;
        report "CountUp=" & integer'image(CountUp) &
            " CountDown=" & integer'image(CountDown);

    end process;

    process is
    begin

        wait until CountUp = CountDown;
        report "Jackpot!";

    end process;


end architecture;

De uitvoer naar de simulatorconsole toen we op de run-knop in ModelSim drukten:

VSIM 2> run
# ** Note: CountUp=1 CountDown=9
#    Time: 0 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=2 CountDown=8
#    Time: 10 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=3 CountDown=7
#    Time: 20 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=4 CountDown=6
#    Time: 30 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=5 CountDown=5
#    Time: 40 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: Jackpot!
#    Time: 40 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=6 CountDown=4
#    Time: 50 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=7 CountDown=3
#    Time: 60 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=8 CountDown=2
#    Time: 70 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=9 CountDown=1
#    Time: 80 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=10 CountDown=0
#    Time: 90 ns  Iteration: 1  Instance: /t07_waitonuntiltb
# ** Note: CountUp=11 CountDown=-1
#    Time: 100 ns  Iteration: 1  Instance: /t07_waitonuntiltb

Analyse

Het eerste proces verhoogt de CountUp teller en verlaagt de CountDown balie. Ze worden gelijktijdig bijgewerkt. Hoewel de signaaltoewijzingen van de twee signalen zich op verschillende lijnen in het proces bevinden, worden toegewezen signaalwaarden alleen effectief wanneer het programma een Wait-statement raakt. Het proces voert deze bewerking uit aan het begin van de simulatie en vervolgens elke 10 nanoseconden.

De eerste regel van het tweede proces is wait on CountUp, CountDown; . Het programma wacht op deze regel totdat een of beide signalen veranderen. Zoals we op de afdruk kunnen zien, gebeurt dit op 0 ns simulatietijd wanneer de tellers voor de eerste keer worden gewijzigd, en elke keer dat ze daarna veranderen.

De eerste regel van het derde proces is wait until CountUp = CountDown; . Het programma wordt elke keer wakker als een van de twee signalen verandert, net als bij het eerste proces. Maar het zal alleen doorgaan als de uitdrukking evalueert tot true , anders gaat hij weer slapen. Zoals we kunnen zien op de afdruk, "Jackpot!" wordt slechts één keer afgedrukt, bij 40 ns wanneer beide tellers dezelfde waarde hebben.

Afhaalmaaltijden

  • Wacht op zal wachten tot een van de signalen verandert
  • Wacht tot wordt geactiveerd als een van de signalen verandert, maar gaat alleen verder als de uitdrukking true is
  • Wacht op, wacht tot en wacht op kunnen worden gecombineerd

Ga naar de volgende tutorial »


VHDL

  1. Een procedure gebruiken in een proces in VHDL
  2. Een onzuivere functie gebruiken in VHDL
  3. Een functie gebruiken in VHDL
  4. Een procedure gebruiken in VHDL
  5. Constanten en generieke kaart gebruiken in VHDL
  6. Hoe Port Map-instantiatie te gebruiken in VHDL
  7. Een Case-When-statement gebruiken in VHDL
  8. Ondertekend en niet-ondertekend gebruiken in VHDL
  9. Hoe een VHDL-simulator en -editor gratis te installeren
  10. PIC18 Microcontroller:wat het is en hoe het te gebruiken?
  11. Wat is een referentie-aanduiding en hoe gebruiken we deze bij assemblage?