Loop- en Exit-constructs in VHDL: Een praktische gids
In de vorige tutorial behandelden we timing-vertragingen met het wait for-statement en verkenden we proceslussen. Nu richten we ons op een kern-VHDL-construct waarmee je code eenmaal uitvoert en daarna een blok herhaalt tot een specifieke voorwaarde is vervuld: het loop-statement.
Hoewel een proces oneindig kan draaien, heb je vaak een gecontroleerde lus nodig die netjes kan worden afgebroken. Het loop-statement in VHDL is de eenvormste vorm van zo'n construct, en het eindigt alleen wanneer een exit wordt tegengekomen.
Syntaxis van een simpele lus
loop
-- statements
end loop;
Elke exit breekt direct uit de innerste lus waarin het zich bevindt, en kan in elk lustype voorkomen.
Oefening
Deze tutorial demonstreert hoe een basis lus te bouwen en deze na één iteratie te verlaten.
Voorbeeldcode
entity T03_LoopTb is end entity;
architecture sim of T03_LoopTb is
begin
process is
begin
report "Hallo!";
loop
report "Kiekeboe!";
exit; -- Breek na eerste iteratie af
end loop;
report "Vaarwel!";
wait; -- Schort het proces oneindig op
end process;
end architecture;
Simulatie-output (ModelSim)
VSIM 2> run # ** Note: Hallo! # Time: 0 ns Iteration: 0 Instance: /t03_looptb # ** Note: Kiekeboe! # Time: 0 ns Iteration: 0 Instance: /t03_looptb # ** Note: Vaarwel! # Time: 0 ns Iteration: 0 Instance: /t03_looptb
De console toont dat alle berichten op tijdstip 0 ns voorkomen, wat bevestigt dat statements behalve wait geen simulatiatijd consumeren. Het exit-statement stopt de lus na één iteratie, waarna het proces de finale wait raakt en idle blijft.
Analyse
Door de timestamps te inspecteren, zie je de exacte uitvoeringsvolgorde: report "Hallo!" → report "Kiekeboe!" → exit → report "Vaarwel!". Dit voorbeeld demonstreert hoe loop en exit gebruikt kunnen worden voor stroomcontrole zonder complexe toestandsmachines.
Belangrijkste punten
- loop creëert een oneindige lus die draait tot
exitaangeroepen wordt. - exit beëindigt onmiddellijk de huidige lus, ongeacht nestingsniveau.
VHDL
- PIC18-microcontrollers: kenmerken, prestaties en hoe u ze gebruikt
- Referentieaanduidingen begrijpen: hoe PCB-montageverbindingen te labelen
- In-process procedures benutten voor schonere VHDL FSM-ontwerpen
- Impure functies in VHDL gebruiken: FSM-leesbaarheid en onderhoudbaarheid verbeteren
- VHDL-functies onder de knie krijgen: een praktische gids voor efficiënt ontwerp
- Procedures in VHDL gebruiken: je ontwerp vereenvoudigen met herbruikbare code
- Een betrouwbare timer in VHDL bouwen: klokcycli tellen tot uren
- Constants en generic maps in VHDL benutten voor flexibele modulontwerpen
- VHDL port map instantiation onder de knie krijgen: een praktische gids
- De Case-When-statement in VHDL onder de knie krijgen: efficiënte multiplexer-ontwerpen
- Gratis VHDL-simulator & editor setup: Een studentengids