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 Inter- en intratoewijzingsvertraging

Verilog-vertragingsinstructies kunnen vertragingen hebben die aan de linkerkant of aan de rechterkant van de toewijzingsoperator zijn gespecificeerd.

Vertragingen tussen opdrachten

  
  
	// Delay is specified on the left side
	#<delay> <LHS> = <RHS>

  

Een tussenopdracht vertragingsverklaring heeft een vertragingswaarde op de LHS van de toewijzingsoperator. Dit geeft aan dat de instructie zelf wordt uitgevoerd na de vertraging verloopt en is de meest gebruikte vorm van vertragingsregeling.

  
  
module tb;
  reg  a, b, c, q;
  
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    
    // Initialize all signals to 0 at time 0
    a <= 0;
    b <= 0;
    c <= 0;
    q <= 0;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign a and c to 1. Note that 'a' and 'c'
    // gets updated at the end of current timestep
    #5  a <= 1;
    	c <= 1;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign 'q' with whatever value RHS gets
    // evaluated to
    #5 q <= a & b | c;

    #20;
  end
  
endmodule

  

Merk op dat q 1 wordt op tijdstip 10 eenheden omdat de verklaring wordt geëvalueerd op 10 tijdseenheden en RHS, wat een combinatie is van a, b en c, wordt geëvalueerd tot 1.

Simulatielogboek
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

Vertragingen binnen een opdracht

  
  
	// Delay is specified on the right side
	<LHS> = #<delay> <RHS>

  

Een intra-opdracht vertraging is er een waarbij er een vertraging is op de RHS van de toewijzingsoperator. Dit geeft aan dat de verklaring wordt geëvalueerd en dat eerst de waarden van alle signalen op de RHS worden vastgelegd. Daarna wordt het pas na . aan het resulterende signaal toegewezen de vertraging verloopt.

  
  
module tb;
  reg  a, b, c, q;
  
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
  
	// Initialize all signals to 0 at time 0  
    a <= 0;
    b <= 0;
    c <= 0;
    q <= 0;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign a and c to 1. Note that 'a' and 'c'
    // gets updated at the end of current timestep
    #5  a <= 1;
    	c <= 1;

    // Intra-assignment delay: First execute the statement
    // then wait for 5 time units and then assign the evaluated
    // value to q
    q <= #5 a & b | c;
    
    #20;
  end
endmodule

  

Merk op dat de toewijzing aan q ontbreekt in het logboek!

Simulatielogboek
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
xmsim: *W,RNQUIE: Simulation is complete.

Dit komt omdat bij 5 tijdseenheden a en c worden toegewezen met behulp van niet-blokkerende instructies. En het gedrag van niet-blokkerende uitspraken is zodanig dat RHS wordt geëvalueerd, maar pas aan het einde van die tijdstap aan de variabele wordt toegewezen.

Dus de waarde van a en c wordt geëvalueerd tot 1, maar nog niet toegewezen wanneer de volgende niet-blokkerende instructie die van q wordt uitgevoerd. Dus wanneer RHS van q wordt geëvalueerd, hebben a en c nog steeds de oude waarde 0 en dus $monitor detecteert geen wijziging om de instructie weer te geven.

Laten we, om de verandering te observeren, de toewijzingsinstructies wijzigen in a en c van niet-blokkerend naar blokkerend.

  
  
	...
	
	// Non-blocking changed to blocking and rest of the
	// code remains the same
    #5  a = 1;
    	c = 1;
    
    q <= #5 a & b | c;
    
   	...

  
Simulatielogboek
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Inleiding tot Verilog
  2. Verilog-zelfstudie
  3. Verilog-syntaxis
  4. Verilog-aaneenschakeling
  5. Verilog-opdrachten
  6. Verilog blokkeren en niet-blokkeren
  7. Verilog-functies
  8. Verilog-taak
  9. Verilog-vertragingsregeling
  10. Verilog Gate-vertraging
  11. Verilog-klokgenerator