Een proces maken met een gevoeligheidslijst in VHDL
Gebruik altijd een gevoeligheidslijst om processen in productiemodules te activeren. Gevoeligheidslijsten zijn parameters voor een proces waarin alle signalen worden vermeld waarvoor het proces gevoelig is. Als een van de signalen verandert, wordt het proces geactiveerd en wordt de code erin uitgevoerd.
We hebben al geleerd om de wait on
. te gebruiken en wait until
uitspraken om een proces wakker te maken wanneer een signaal verandert. Maar om eerlijk te zijn, is dit niet hoe ik de meeste van mijn processen schrijf.
Deze blogpost maakt deel uit van de serie Basic VHDL Tutorials.
Bij het schrijven van VHDL-code hangt de schrijfstijl af van het feit of de code bedoeld is om alleen in een simulator te worden uitgevoerd. Als ik simulatiecode schrijf, zoals we in deze tutorialserie hebben gedaan, dan altijd gebruik wait
verklaringen om de processen te beheersen. Als ik code schrijf waarvan ik van plan ben een fysieke implementatie te maken, zal ik nooit gebruik wait
verklaringen.
De syntaxis voor een proces met een gevoeligheidslijst is:process(<signal1>, <signal2>, ..) is
begin
<main logic here>
end process;
Een belangrijke eigenaardigheid met de gevoeligheidslijst is dat alle signalen die binnen het proces worden uitgelezen, moeten op de gevoeligheidslijst staan. De simulator zal u echter niet informeren als u geen signaal aan de gevoeligheidslijst toevoegt, omdat dit legaal is in de VHDL-taal. Het probleem is dat als u dit niet doet, de code zich anders zal gedragen wanneer deze wordt gesynthetiseerd en gebruikt in een fysieke implementatie.
In VHDL-2008 is het trefwoord all
mag gebruiken in plaats van elk signaal op te sommen. Helaas ondersteunen de meeste synthesesoftware deze nieuwere versie van de VHDL-taal niet.
Oefening
In deze video-tutorial leren we hoe we een proces kunnen maken met behulp van een gevoeligheidslijst in VHDL:
De laatste code die we in deze tutorial hebben gemaakt:
entity T09_SensitivityListTb is end entity; architecture sim of T09_SensitivityListTb 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 triggered using Wait On process is begin if CountUp = CountDown then report "Process A: Jackpot!"; end if; wait on CountUp, CountDown; end process; -- Equivalent process using a sensitivity list process(CountUp, CountDown) is begin if CountUp = CountDown then report "Process B: Jackpot!"; end if; end process; end architecture;
De uitvoer naar de simulatorconsole toen we op de run-knop in ModelSim drukten:
VSIM 2> run # ** Note: Process A: Jackpot # Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb # ** Note: Process B: Jackpot # Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb
Analyse
We kunnen aan de afdrukken zien dat de twee processen zich hetzelfde gedragen. Dat komt omdat een proces met een gevoeligheidslijst per definitie equivalent is aan een proces met wait on
aan het einde van het proces.
Processen met gevoeligheidslijsten worden normaal gesproken gebruikt in code die bedoeld is om te worden gesynthetiseerd. Een dergelijke code wordt gewoonlijk RTL-code (Register Transfer Level) genoemd. Dit is een conventie, maar er zijn goede redenen voor. Hoewel sommige wait on
en wait until
uitspraken kunnen worden gesynthetiseerd, het is moeilijk om te weten wat voor soort hardware het zal creëren.
Afhaalmaaltijden
- Een proces met een gevoeligheidslijst is gelijk aan een proces met
wait on
aan het einde - Alle signalen die binnen een proces worden gelezen, moeten op de gevoeligheidslijst staan
- Gebruik
wait
statements in simulatiecode en gevoeligheidslijsten in RTL-code
Ga naar de volgende tutorial »
VHDL
- Een lijst met strings maken in VHDL
- Hoe maak je een Tcl-gestuurde testbench voor een VHDL-codeslotmodule?
- Een PWM-controller maken in VHDL
- Hoe maak je een ringbuffer FIFO in VHDL
- Hoe maak je een zelfcontrolerende testbank aan
- Een gekoppelde lijst maken in VHDL
- Een procedure gebruiken in een proces in VHDL
- Een onzuivere functie gebruiken in VHDL
- Een functie gebruiken in VHDL
- Een eindige-toestandsmachine maken in VHDL
- Een procedure gebruiken in VHDL