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 >> Verilog

Verilog controlestroom beheersen: IF-ELSE, Case, en meer

Hardwaregedrag kan niet geïmplementeerd worden zonder conditionele statements en andere manieren om de logica-stroom te controleren. Verilog beschikt over een set controlestroom-blokken en mechanismen om dit te bereiken.

if-else-if

Deze conditionele statement wordt gebruikt om een beslissing te maken over of bepaalde statements uitgevoerd moeten worden of niet. Dit lijkt veel op de if-else-if-statements in C. Als de expressie evalueert naar true, wordt het eerste statement uitgevoerd. Als de expressie false is en er een else-deel bestaat, wordt het else-deel uitgevoerd.

Syntax
// if-statement zonder else-deel
if (expressie) [statement]

// if-statement met een else-deel
if (expressie) [statement] else [statement]

// if-else voor meerdere statements moet
// omsloten worden door "begin" en "end"
if (expressie) begin
  [meerdere statements]
end else begin
  [meerdere statements]
end

// if-else-if statement
if (expressie) [statement]
else if (expressie) [statement]
else [statement]

Het else-deel van een if-else is optioneel en kan verwarring veroorzaken als een else weggelaten wordt in een geneste if-reeks. Om deze verwarring te vermijden, is het eenvoudiger om de else altijd te associëren met de vorige if die geen else heeft. Een andere manier is om statements in een begin-end-blok te plaatsen. Het laatste else-deel handelt het geen-van-de-bovenstaande of standaardgeval af waar geen van de andere condities voldaan was.

Klik hier voor meer over if-else-if

Lussen bieden een manier om één of meerdere statements binnen een blok één of meerdere keren uit te voeren. Er zijn vier verschillende typen lusstatements in Verilog.

forever-lus

Deze voert de statements binnen het blok continu uit.

forever [statement]
forever begin
  [meerdere statements]
end

Voorbeeld

module my_design;
  initial begin
    forever begin
      $display ("Dit wordt voor altijd geprint, simulatie kan vastlopen ...");
    end
  end
endmodule

Simulatie-log

ncsim> run
This will be printed forever, simulation can hang ...
This will be printed forever, simulation can hang ...
...
This will be printed forever, simulation can hang ...
This will be printed forever, simulation can hang ...
This will be printed forever, simulation can hang ...
This will be printed forever, simulation can hang ...
Result reached the maximum of 5000 lines. Killing process.

repeat-lus

Deze voert statements een vast aantal keren uit. Als de expressie evalueert naar X of Z, wordt het als nul behandeld en helemaal niet uitgevoerd.

repeat ([aantal_keer]) begin
  [statements]
end
repeat ([aantal_keer]) @ ([enkele_event]) begin
  [statements]
end

Voorbeeld

module my_design;
  initial begin
    repeat(4) begin
      $display("Dit is een nieuwe iteratie ...");
    end
  end
endmodule

Simulatie-log

ncsim> run
This is a new iteration ...
This is a new iteration ...
This is a new iteration ...
This is a new iteration ...
ncsim: *W,RNQUIE: Simulation is complete.

while-lus

Deze voert statements uit zolang een expressie true is en stopt zodra de conditie false wordt. Als de conditie vanaf het begin false is, worden de statements helemaal niet uitgevoerd.

while (expressie) begin
  [statements]
end

Voorbeeld

module my_design;
  integer i = 5;
  initial begin
    while (i > 0) begin
      $display ("Iteratie#%0d", i);
      i = i - 1;
    end
  end
endmodule

Simulatie-log

ncsim> run
Iteration#5
Iteration#4
Iteration#3
Iteration#2
Iteration#1
ncsim: *W,RNQUIE: Simulation is complete.

for-lus

for (initial_toewijzing; conditie; incrementeer_variabele) begin
  [statements]
end

Deze controleert statements met een drie-stappenproces:

  • Initialiseer een lus-tellervariabele
  • Evalueer de expressie, meestal met de lus-tellervariabele
  • Incrementeer de lus-tellervariabele zodat de expressie later false wordt en de lus stopt.

Voorbeeld

module my_design;
  integer i = 5;
  initial begin
    for (i = 0; i < 5; i = i + 1) begin
      $display ("Lus #%0d", i);
    end
  end
endmodule

Simulatie-log

ncsim> run
Loop #0
Loop #1
Loop #2
Loop #3
Loop #4
ncsim: *W,RNQUIE: Simulation is complete.

Klik hier voor meer over for-lussen.

Verilog

  1. C# Expressies, Statements & Blokken: Uitgebreide Gids met Praktische Voorbeelden
  2. Verilog beheersen: Complete tutorial voor digitale schakelingontwerp
  3. Verilog concatenatie beheersen: Een praktische gids
  4. Verilog-toewijzingen begrijpen: types, syntax en best practices
  5. Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
  6. Verilog controlestroom beheersen: IF-ELSE, Case, en meer
  7. Verilog-functies beheersen voor efficiënt RTL-ontwerp
  8. Verilog Tasks begrijpen: Functions vs Tasks, Syntax en Gebruik
  9. Verilog Delay Control begrijpen: Timing-technieken en best practices
  10. Verilog Clock Generator: Ontwerp & Implementatie Gids
  11. Java Expressies, Statements en Blokken begrijpen