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

VHDL Wait-statements onder de knie: Wait On, Wait Until en gecombineerd gebruik

In onze vorige tutorial verkenden we de verschillen tussen signalen en variabelen in VHDL, met de nadruk dat signalen een bredere scope hebben dan variabelen, die beperkt zijn tot één proces. De volgende logische vraag is hoe meerdere processen te coördineren met signalen.

Naast de bekende wait; (oneindige pauze) en wait for (tijdgebaseerde pauze), biedt VHDL twee krachtige statements voor gebeurtenisgestuurde synchronisatie: Wait On en Wait Until. Deze kunnen ook gecombineerd worden met wait for om geavanceerde stroomcontroleregelingen te creëren.

Wait On

Het wait on-statement schort een proces op totdat een van de opgegeven signalen zijn waarde verandert.

wait on <signaalnaam1>, <signaalnaam2>, ...;

Wait Until

Het wait until-statement pauzeert de uitvoering totdat een opgegeven booleaanse conditie waar wordt.

wait until <conditie>;

Wait-statements combineren

Alle drie constructen kunnen samen gebruikt worden voor genuanceerde timing-gedrag:

wait on <signaalnaam1> until <conditie> for <tijdwaarde>;

Bijvoorbeeld, de volgende regel pauzeert 10 ns of totdat signaal1 verandert en signaal2 gelijk is aan signaal3:

wait on signaal1 until signaal2 = signaal3 for 10 ns;

Praktisch voorbeeld

Hieronder een complete testbench die demonstreert hoe wait on en wait until gebruikt kunnen worden voor inter-procescommunicatie.

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 console-output in ModelSim illustreert de gebeurtenisvolgorde:

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 werkt CountUp en CountDown gelijktijdig elke 10 ns bij. Omdat signaaltoewijzingen pas effect hebben na een wait-statement, worden beide tellers samen bijgewerkt bij elke simulatiestap.

Het tweede proces gebruikt wait on CountUp, CountDown;, wat opschort totdat een van de tellers verandert. Zoals getoond, triggert dit op 0 ns (de initiële update) en daarna bij elke wijziging van een van de signalen.

Het derde proces gebruikt wait until CountUp = CountDown;. Het wordt gewekt bij elke signaalwijziging, maar gaat alleen door als de gelijkheid geldt. Daardoor verschijnt het bericht "Jackpot!" slechts één keer – op 40 ns wanneer beide tellers 5 bereiken.

VHDL Wait-statements onder de knie: Wait On, Wait Until en gecombineerd gebruik

Kernpunten

  • Wait On pauzeert totdat een opgegeven signaal verandert.
  • Wait Until ontwaakt bij een signaalwijziging, maar gaat alleen door als een conditie evalueert naar waar.
  • Alle drie constructen – wait on, wait until en wait for – kunnen gecombineerd worden voor fijnmazige controle.

Ga verder naar de volgende tutorial voor diepere inzichten in VHDL-synchronisatie.

VHDL

  1. PIC18-microcontrollers: kenmerken, prestaties en hoe u ze gebruikt
  2. Referentieaanduidingen begrijpen: hoe PCB-montageverbindingen te labelen
  3. In-process procedures benutten voor schonere VHDL FSM-ontwerpen
  4. Impure functies in VHDL gebruiken: FSM-leesbaarheid en onderhoudbaarheid verbeteren
  5. VHDL-functies onder de knie krijgen: een praktische gids voor efficiënt ontwerp
  6. Procedures in VHDL gebruiken: je ontwerp vereenvoudigen met herbruikbare code
  7. Constants en generic maps in VHDL benutten voor flexibele modulontwerpen
  8. VHDL port map instantiation onder de knie krijgen: een praktische gids
  9. De Case-When-statement in VHDL onder de knie krijgen: efficiënte multiplexer-ontwerpen
  10. Signed en unsigned types in VHDL onder de knie krijgen: een praktische gids
  11. Gratis VHDL-simulator & editor setup: Een studentengids