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

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

  1. Een lijst met strings maken in VHDL
  2. Hoe maak je een Tcl-gestuurde testbench voor een VHDL-codeslotmodule?
  3. Een PWM-controller maken in VHDL
  4. Hoe maak je een ringbuffer FIFO in VHDL
  5. Hoe maak je een zelfcontrolerende testbank aan
  6. Een gekoppelde lijst maken in VHDL
  7. Een procedure gebruiken in een proces in VHDL
  8. Een onzuivere functie gebruiken in VHDL
  9. Een functie gebruiken in VHDL
  10. Een eindige-toestandsmachine maken in VHDL
  11. Een procedure gebruiken in VHDL