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

Conditionele logica in VHDL: If-Then-Elsif-Else uitgelegd

In de vorige tutorial gebruikten we een conditionele expressie met het Wait Until-statement om een proces te activeren alleen wanneer twee tellersignalen overeenkwamen. Maar wat als het programma verschillende acties moet ondernemen op basis van variërende invoeren?

Het If-Then-Elsif-Else-construct laat ons de logica vertakken. Afhankelijk van de waarde van een variabele of het resultaat van een expressie, kan het programma verschillende paden volgen.

Dit artikel is onderdeel van de serie Basistutorials VHDL.

Basissyntaxis

De canonieke vorm is:

if <conditie> then
elsif <conditie> then
else
end if;

De elsif- en else-delen zijn optioneel, en elsif mag meerdere keren voorkomen. Een <conditie> mag een booleaanse letterlijke waarde zijn of een expressie die evalueert naar true of false.

Voorbeeld: MijnTeller < 10 is waar wanneer MijnTeller kleiner is dan tien.

Relationele operatoren

=gelijk
/=ongelijk
<kleiner dan
<=kleiner dan of gelijk
>groter dan
>=groter dan of gelijk

Logische operatoren

not awaar als a onwaar is
a and bwaar als a en b waar zijn
a or bwaar als a of b waar is
a nand bwaar als a of b onwaar is
a nor bwaar als a en b onwaar zijn
a xor bwaar als precies een van a of b waar is
a xnor bwaar als a en b gelijk zijn

Oefening

Hieronder staat een compleet VHDL-voorbeeld dat het If-Then-Elsif-Else-construct in actie demonstreert.

Eindcode:

entity T08_IfTb is end entity;
architecture sim of T08_IfTb 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 is
  begin
    if CountUp > CountDown then
      report "CountUp is groter";
    elsif CountUp < CountDown then
      report "CountDown is groter";
    else
      report "Ze zijn gelijk";
    end if;
    wait on CountUp, CountDown;
  end process;
end architecture;

Simulator-console-output bij uitvoering in ModelSim:

VSIM 2> run
# ** Note: CountDown is groter
# Time: 0 ns Iteration: 0 Instance: /t08_iftb
# ** Note: CountDown is groter
# Time: 0 ns Iteration: 1 Instance: /t08_iftb
# ** Note: CountDown is groter
# Time: 10 ns Iteration: 1 Instance: /t08_iftb
# ** Note: CountDown is groter
# Time: 20 ns Iteration: 1 Instance: /t08_iftb
# ** Note: CountDown is groter
# Time: 30 ns Iteration: 1 Instance: /t08_iftb
# ** Note: Ze zijn gelijk
# Time: 40 ns Iteration: 1 Instance: /t08_iftb
# ** Note: CountUp is groter
# Time: 50 ns Iteration: 1 Instance: /t08_iftb
# ** Note: CountUp is groter
# Time: 60 ns Iteration: 1 Instance: /t08_iftb ...

Analyse

We initialiseerden CountDown op 10 en CountUp op 0. Beide tellers worden gelijktijdig elke 10 ns bijgewerkt in het eerste proces. Het tweede proces wacht op deze signalen, dus het triggerd telkens wanneer ze veranderen. Het If-Then-Elsif-Else-blok selecteert dan een van drie takken: CountUp > CountDown, CountUp < CountDown, of CountUp = CountDown. Hoewel een expliciete else niet verplicht is, is het opnemen ervan een best practice om alle randgevallen af te vangen.

De console-trace bevestigt dat het tweede proces de conditie na elke update evalueert en het passende bericht print.

Conditionele logica in VHDL: If-Then-Elsif-Else uitgelegd

Kernpunten

  • Gebruik If-Then alleen of combineer met Elsif en Else om alle mogelijke scenario's te dekken.
  • Condities kunnen relationele, logische en rekenkundige expressies bevatten.

Ga verder naar de volgende tutorial »

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