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

For-lussen in VHDL: Een praktische gids

In de vorige tutorial verkenden we hoe een oneindige lus te maken met het loop-statement en eruit te stappen met exit. Maar wat als we de lus een specifiek aantal keer willen laten draaien? De For-lus is de meest directe oplossing.

Een For-lus itereert over een vast bereik van gehele getallen of opsomde items. De huidige iteratiewaarde is automatisch beschikbaar binnen de lus via een impliciet gedeclareerde constante.

Dit artikel is onderdeel van de serie Basistutorials VHDL.

Syntaxis

for <constante> in <bereik> loop
  -- lus body
end loop;

Hierbij is <constante> een door de gebruiker gedefinieerde naam voor de lusteller, en <bereik> kan een integer-bereik zijn (oplopend of aflopend) of een verzameling opsomde waarden.

Integer-bereiken

  • Oplopend bereik: 0 to 9 – itereert 0,1,2,…,9.
  • Aflopend bereik: 9 downto 0 – itereert 9,8,7,…,0.
  • Enkele waarde: 0 to 0 – itereert alleen 0.
  • Leeg bereik: 0 to -1 – lus-body wordt nooit uitgevoerd.

Voorbeeldcode

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;

Simulatie-output (ModelSim)

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

De For-lus voerde precies tien iteraties uit, en printte de tellerwaarde op simulatiatijd 0. Omdat er geen wait in de lus zit, voltooit de hele lus onmiddellijk. De laatste wait; zet het proces in een oneindige pauze, wat gebruikelijk is in testbenches.

We toonden ook twee essentiële string-bewerkingen:

  • integer'image(i) – converteert een integer naar een string.
  • & – concateneert twee strings.

Belangrijkste punten

  • For-lussen kunnen itereren over zowel oplopende (to) als aflopende (downto) bereiken.
  • Integers worden omgezet naar strings met integer'image().
  • String-concatenatie gebruikt de &-operator.

Ga verder naar de volgende tutorial voor diepere VHDL-concepten.

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