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 For-Loop gebruiken in VHDL

In de vorige tutorial hebben we geleerd om een ​​oneindige lus te maken met behulp van de loop uitspraak. We hebben ook geleerd hoe je een lus kunt doorbreken met behulp van de exit uitspraak. Maar wat als we willen dat de lus een bepaald aantal keren wordt herhaald? De For-Loop is de gemakkelijkste manier om dit te bereiken.

Met de For-Loop kunt u een vast bereik van gehele getallen of opgesomde items herhalen. Het item dat bij de huidige iteratie hoort, is binnen de lus beschikbaar via een impliciet gedeclareerde constante.

Deze blogpost maakt deel uit van de serie Basic VHDL Tutorials.

De syntaxis van de For-Loop is:

for <c> in <r> loop
end loop;

De <c> is een willekeurige naam voor een constante die binnen de lus beschikbaar zal zijn. De <r> is een bereik van gehele getallen of opgesomde waarden waarover de lus zal herhalen. Een geheel getal kan zowel toenemend als afnemend zijn.

De VHDL-code voor een oplopend bereik inclusief alle 10 cijfers van 0 tot 9:

0 to 9

De VHDL-code voor een aflopend bereik inclusief alle 10 cijfers van 9 tot 0:

9 downto 0

De VHDL-code voor een bereik dat alleen het cijfer 0 bevat:

0 to 0

De VHDL-code voor een leeg bereik dat helemaal geen cijfers heeft:

0 to -1

Oefening

De laatste code die we in deze tutorial hebben gemaakt:

entity T04_ForLoopTb is
end entity;

architecture sim of T04_ForLoopTb is
begin

    process is
    begin

        for i in 1 to 10 loop
            report "i=" & integer'image(i);
        end loop;
        wait;
        
    end process;

end architecture;

De uitvoer naar de simulatorconsole toen we op de run-knop in ModelSim drukten:

VSIM 2> run
# ** Note: i=1
#    Time: 0 ns  Iteration: 0  Instance: /t04_forlooptb
# ** Note: i=2
#    Time: 0 ns  Iteration: 0  Instance: /t04_forlooptb
# ** Note: i=3
#    Time: 0 ns  Iteration: 0  Instance: /t04_forlooptb
# ** Note: i=4
#    Time: 0 ns  Iteration: 0  Instance: /t04_forlooptb
# ** Note: i=5
#    Time: 0 ns  Iteration: 0  Instance: /t04_forlooptb
# ** Note: i=6
#    Time: 0 ns  Iteration: 0  Instance: /t04_forlooptb
# ** Note: i=7
#    Time: 0 ns  Iteration: 0  Instance: /t04_forlooptb
# ** Note: i=8
#    Time: 0 ns  Iteration: 0  Instance: /t04_forlooptb
# ** Note: i=9
#    Time: 0 ns  Iteration: 0  Instance: /t04_forlooptb
# ** Note: i=10
#    Time: 0 ns  Iteration: 0  Instance: /t04_forlooptb

Analyse

Niet geheel onverwachts herhaalde onze For-Loop zich tien keer voordat hij stopte. De waarde van i wordt tien keer afgedrukt naar de simulatorconsole op simulatietijd 0. Er is geen wait-instructie in de lus, en daarom kost de lus geen tijd om te voltooien. Ten slotte gaat het programma in een oneindige pauze op de wait; .

We hebben geleerd hoe we een geheel getal naar een tekenreeks kunnen converteren met behulp van integer'image() , en we gebruikten de & teken om de twee strings samen te voegen.

Afhaalmaaltijden

  • De For-Loop kan herhalen over een oplopend of aflopend geheeltallig bereik
  • Een oplopend bereik wordt aangegeven met to , en een afnemend bereik met downto
  • Een geheel getal kan worden geconverteerd naar een tekenreeks met integer'image()
  • Twee strings kunnen worden samengevoegd met behulp van het tekenreeksaaneenschakeling &

Ga naar de volgende tutorial »


VHDL

  1. Hoe gebruiken we molybdeen?
  2. Een lijst met strings maken in VHDL
  3. Simulatie stoppen in een VHDL-testbench
  4. Een PWM-controller maken in VHDL
  5. Hoe willekeurige getallen te genereren in VHDL
  6. Een procedure gebruiken in een proces in VHDL
  7. Een onzuivere functie gebruiken in VHDL
  8. Een functie gebruiken in VHDL
  9. Een eindige-toestandsmachine maken in VHDL
  10. Een procedure gebruiken in VHDL
  11. Hoe een snijmolen te gebruiken