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

While-lussen in VHDL: Dynamische iteratiecontrole

Opbouwend op onze eerdere verkenning van for-lussen, duikt deze tutorial in de while-lus – een krachtig construct waarmee je iteratie kunt controleren op basis van dynamische voorwaarden in plaats van een vooraf bepaald bereik.

De while-lus voert zijn body herhaaldelijk uit zolang de gespecificeerde conditie true blijft. Dit maakt het ideaal voor scenario's waar het aantal iteraties afhangt van runtime-data of complexe logica.

Dit bericht is onderdeel van de serie Basistutorials VHDL.

Syntaxis

while <conditie> loop
  -- lus body
end loop;

De <conditie> moet evalueren naar een booleaanse waarde. Het kan een eenvoudige vergelijking of een meer uitgebreide expressie zijn. De conditie wordt voor elke pas gecontroleerd, zodat de lus alleen doorgaat zolang het true blijft.

Voorbeelden van condities

  • i < 10 – waar zolang i kleiner is dan 10.
  • i /= 10 – waar zolang i niet gelijk is aan 10.
  • i >= 0 and i < 2**8 – waar voor waarden van 0 tot 255.

Relationele operatoren

=gelijk
/=ongelijk
<kleiner dan
<=kleiner dan of gelijk
>groter dan
>=groter dan of gelijk

Logische operatoren

not awaar als a onwaar is
a and bwaar als a en b waar zijn
a or bwaar als a of b waar is
a nand bwaar als a of b onwaar is
a nor bwaar als a en b onwaar zijn
a xor bwaar als precies een van a of b waar is
a xnor bwaar als a en b gelijk zijn

Oefening

Bekijk de videotutorial hieronder om te zien hoe een variabele een while-lus in de praktijk kan sturen:

Voorbeeldcode

entity T05_WhileLoopTb is end entity;
architecture sim of T05_WhileLoopTb is
begin
  process is
    variable i : integer := 0;
  begin
    while i < 10 loop
      report "i=" & integer'image(i);
      i := i + 2;
    end loop;
    wait;
  end process;
end architecture;

Simulator-output

VSIM 2> run
# ** Note: i=0
# Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb
# ** Note: i=2
# Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb
# ** Note: i=4
# Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb
# ** Note: i=6
# Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb
# ** Note: i=8
# Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb

Analyse

We initialiseren i op 0 en gebruiken i < 10 als luswacht. Omdat de lus i met 2 verhoogt per cyclus, is de laatste geprintte waarde 8. Bij de volgende pas evalueert de conditie naar false (10 is niet kleiner dan 10), en de lus stopt. Het daaropvolgende wait; schort het proces oneindig op, een gebruikelijk patroon voor testbenches.

While-lussen in VHDL: Dynamische iteratiecontrole

Belangrijkste punten

  • De while-lus draait zolang de conditie true blijft.
  • De conditie wordt voor elke iteratie geëvalueerd.
  • Variabelen kunnen binnen een proces gedeclareerd en binnen de lus bijgewerkt worden.

Doe de Basic VHDL Quiz – deel 1 of ga verder naar de volgende tutorial.

VHDL

  1. Freesmes Slijper Technieken Beheersen: Een Praktische Gids
  2. Hoe molybdeen de moderne industrie vormt: toepassingen, voordelen en leveringsdynamiek
  3. Dynamische string-lijsten in VHDL: Best Practices & Voorbeeld
  4. Een VHDL-testbench netjes beëindigen: methoden en best practices
  5. Een PWM-controller implementeren in VHDL: Ontwerp, Simulatie en FPGA-demo
  6. Willekeurige getallen genereren in VHDL: Van Uniform naar OSVVM
  7. In-process procedures benutten voor schonere VHDL FSM-ontwerpen
  8. Impure functies in VHDL gebruiken: FSM-leesbaarheid en onderhoudbaarheid verbeteren
  9. VHDL-functies onder de knie krijgen: een praktische gids voor efficiënt ontwerp
  10. Een eindige-toestandsmachine in VHDL ontwerpen: een praktisch verkeerslichtvoorbeeld
  11. Procedures in VHDL gebruiken: je ontwerp vereenvoudigen met herbruikbare code