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

Hardwaregedrag kan niet worden geïmplementeerd zonder voorwaardelijke instructies en andere manieren om de stroom van logica te beheersen. Verilog heeft een reeks controlestroomblokken en mechanismen om hetzelfde te bereiken.

if-else-if

Deze voorwaardelijke verklaring wordt gebruikt om een ​​beslissing te nemen over het al dan niet uitvoeren van bepaalde uitspraken. Dit lijkt erg op de if-else-if statements in C. Als de expressie waar is, wordt het eerste statement uitgevoerd. Als de uitdrukking onwaar is en als een else deel bestaat, de else deel zal worden uitgevoerd.

Syntaxis
  
  
	// if statement without else part
	if (expression) 
		[statement]
	
	// if statment with an else part
	if (expression) 
		[statement]
	else 
		[statement]
	
	// if else for multiple statements should be
	// enclosed within "begin" and "end"
	if (expression) begin
		[multiple statements]
	end else begin
		[multiple statements]
	end
	
	// if-else-if statement
	if (expression)
		[statement]
	else if (expression)
		[statement]
	else 
		[statement]

  

De else een deel van een if-else is optioneel en kan verwarring veroorzaken als een else wordt weggelaten in een geneste if-reeks. Om deze verwarring te voorkomen, is het gemakkelijker om de else altijd met de vorige te associëren als een else ontbreekt. Een andere manier is om statements in te sluiten binnen een begin-end blok. De laatste else part behandelt geen van de bovenstaande of standaardgevallen waarbij aan geen van de andere voorwaarden werd voldaan.

Klik hier om meer te lezen over if-else-if

Lussen bieden een manier om één of meerdere instructies binnen een blok een of meerdere keren uit te voeren. Er zijn vier verschillende soorten looping-instructies in Verilog.

forever loop

Dit zal continu de instructies binnen het blok uitvoeren.

  
  
	forever 
		[statement]

	forever begin
		[multiple statements]
	end

  

Voorbeeld

  
  
module my_design;
	initial begin
		forever begin
			$display ("This will be printed forever, simulation can hang ...");
		end
	end
endmodule

  
Simulatielogboek
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.

herhaal lus

Hiermee worden instructies een vast aantal keren uitgevoerd. Als de uitdrukking resulteert in een X of Z, wordt deze als nul behandeld en helemaal niet uitgevoerd.

  
  
	repeat ([num_of_times]) begin
		[statements]
	end
	
	repeat ([num_of_times]) @ ([some_event]) begin
		[statements]
	end

  

Voorbeeld

  
  
module my_design;
	initial begin
		repeat(4) begin
			$display("This is a new iteration ...");
		end
	end
endmodule

  
Simulatielogboek
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.

terwijl-lus

Dit voert instructies uit zolang een expressie waar is en wordt afgesloten zodra de voorwaarde onwaar wordt. Als de voorwaarde vanaf het begin onwaar is, worden instructies helemaal niet uitgevoerd.

  
  
	while (expression) begin
		[statements]
	end

  

Voorbeeld

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

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

for-lus

  
  
	for ( initial_assignment; condition; increment_variable) begin
		[statements]
	end

  

Dit regelt uitspraken met behulp van een proces in drie stappen:

  • Initialiseer een lustellervariabele
  • Evalueer de uitdrukking, meestal met de lustellervariabele
  • Verhoog de lustellervariabele zodat op een later tijdstip de uitdrukking onwaar wordt en de lus wordt afgesloten.

Voorbeeld

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

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

Klik hier om meer te lezen over for loops.


Verilog

  1. C#-expressies, statements en blokken (met voorbeelden)
  2. Java-uitdrukkingen, verklaringen en blokken
  3. Verilog-zelfstudie
  4. Verilog-aaneenschakeling
  5. Verilog-opdrachten
  6. Verilog blokkeren en niet-blokkeren
  7. Verilog-besturingsblokken
  8. Verilog-functies
  9. Verilog-taak
  10. Verilog-vertragingsregeling
  11. Verilog-klokgenerator