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

Verilog-simulatie hangt af van hoe tijd wordt gedefinieerd, omdat de simulator moet weten wat een # 1 betekent in termen van tijd. De `timescale compiler-richtlijn specificeert de tijdseenheid en precisie voor de modules die erop volgen.

Syntaxis

  
  
`timescale <time_unit>/<time_precision>

// Example
`timescale 1ns/1ps
`timescale 10us/100ns
`timescale 10ns/1ns

  

De time_unit is de meting van vertragingen en simulatietijd terwijl de time_precision specificeert hoe vertragingswaarden worden afgerond voordat ze in simulatie worden gebruikt.

Gebruik de volgende tijdschaalconstructies om verschillende tijdseenheden in hetzelfde ontwerp te gebruiken. Onthoud dat vertragingsspecificaties in het ontwerp niet synthetisch kunnen worden gemaakt en niet kunnen worden omgezet in hardwarelogica.

  • `timescale voor basismeeteenheid en nauwkeurigheid van tijd
  • $printtimescale systeemtaak om tijdseenheid en precisie weer te geven
  • $time en $realtime systeemfuncties geven de huidige tijd terug en het standaard rapportageformaat kan worden gewijzigd met een andere systeemtaak $timeformat .
Karakter Eenheid
s seconden
ms milliseconden
ons microseconden
ns nanoseconden
ps picoseconden
fs femtoseconden

De gehele getallen in deze specificaties kunnen 1, 10 of 100 zijn en de tekenreeks die de eenheid aangeeft, kan elke waarde aannemen die in de bovenstaande tabel wordt vermeld.

Voorbeeld #1:1ns/1ns

  
  
// Declare the timescale where time_unit is 1ns
// and time_precision is also 1ns
`timescale 1ns/1ns

module tb;
	// To understand the effect of timescale, let us 
	// drive a signal with some values after some delay
  reg val;
  
  initial begin
  	// Initialize the signal to 0 at time 0 units
    val <= 0;
    
    // Advance by 1 time unit, display a message and toggle val
    #1 		$display ("T=%0t At time #1", $realtime);
    val <= 1;
    
    // Advance by 0.49 time unit and toggle val
    #0.49 	$display ("T=%0t At time #0.49", $realtime);
    val <= 0;
    
    // Advance by 0.50 time unit and toggle val
    #0.50 	$display ("T=%0t At time #0.50", $realtime);
    val <= 1;
    
    // Advance by 0.51 time unit and toggle val
    #0.51 	$display ("T=%0t At time #0.51", $realtime);
    val <= 0;

		// Let simulation run for another 5 time units and exit
    #5 $display ("T=%0t End of simulation", $realtime);
  end
endmodule

  

De eerste vertragingsinstructie gebruikt #1 waardoor de simulator precies 1 tijdseenheid wacht die is gespecificeerd als 1ns met `timescale richtlijn. De eseconde-vertragingsverklaring gebruikt 0,49, wat minder is dan een halve tijdseenheid. De tijdprecisie is echter gespecificeerd als 1ns en daarom kan de simulator niet kleiner worden dan 1 ns, waardoor het de gegeven vertragingsverklaring rondt en 0ns oplevert. Dus de tweede vertraging kan de simulatietijd niet verlengen.

De derde vertragingsopdracht gebruikt precies de helft van de tijdseenheid [hl]#0.5[/lh] en opnieuw rondt de simulator de waarde af om #1 te krijgen, wat een hele tijdseenheid vertegenwoordigt. Dit wordt dus afgedrukt bij T=2ns.

De vierde delay-instructie gebruikt een waarde die meer dan de helft van de tijdseenheid is en wordt ook afgerond, waardoor de display-instructie wordt afgedrukt op T=3ns.

Simulatielogboek
ncsim> run
T=1 At time #1
T=1 At time #0.49
T=2 At time #0.50
T=3 At time #0.51
T=8 End of simulation
ncsim: *W,RNQUIE: Simulation is complete.

De simulatie loopt voor 8ns zoals verwacht, maar merk op dat de golfvorm geen kleinere verdelingen heeft tussen elke nanoseconde. Dit komt omdat de precisie van tijd hetzelfde is als de tijdseenheid.

Voorbeeld #2:10ns/1ns

De enige wijziging die in dit voorbeeld is aangebracht in vergelijking met het vorige is dat de tijdschaal is gewijzigd van 1ns/1ns naar 10ns/1ns. Dus de tijdseenheid is 10ns en de precisie is 1ns.

  
  
// Declare the timescale where time_unit is 10ns
// and time_precision is 1ns
`timescale 10ns/1ns

// NOTE: Testbench is the same as in previous example
module tb;
	// To understand the effect of timescale, let us 
	// drive a signal with some values after some delay
  reg val;
  
  initial begin
  	// Initialize the signal to 0 at time 0 units
    val <= 0;
    
    // Advance by 1 time unit, display a message and toggle val
    #1 		$display ("T=%0t At time #1", $realtime);
    val <= 1;
    
    // Advance by 0.49 time unit and toggle val
    #0.49 	$display ("T=%0t At time #0.49", $realtime);
    val <= 0;
    
    // Advance by 0.50 time unit and toggle val
    #0.50 	$display ("T=%0t At time #0.50", $realtime);
    val <= 1;
    
    // Advance by 0.51 time unit and toggle val
    #0.51 	$display ("T=%0t At time #0.51", $realtime);
    val <= 0;

		// Let simulation run for another 5 time units and exit
    #5 $display ("T=%0t End of simulation", $realtime);
  end
endmodule

  

De werkelijke simulatietijd wordt verkregen door de opgegeven vertraging te vermenigvuldigen met # met de tijdseenheid en vervolgens wordt afgerond op basis van precisie. De eerste vertragingsverklaring levert dan 10ns op en de tweede 14,9 die wordt afgerond op 15ns.

De derde instructie voegt op dezelfde manier 5ns toe (0,5 * 10ns) en de totale tijd wordt 20ns. De vierde voegt nog eens 5ns toe (0,51 * 10) om de totale tijd op 25ns te brengen.

Simulatielogboek
ncsim> run
T=10 At time #1
T=15 At time #0.49
T=20 At time #0.50
T=25 At time #0.51
T=75 End of simulation
ncsim: *W,RNQUIE: Simulation is complete.

Merk op dat de basiseenheid in golfvorm in tientallen nanoseconden is met een precisie van 1ns.

Voorbeeld #3:1ns/1ps

De enige wijziging die in dit voorbeeld is aangebracht in vergelijking met het vorige is dat de tijdschaal is gewijzigd van 1ns/1ns naar 1ns/1ps. Dus de tijdseenheid is 1ns en de precisie is 1ps.

  
  
// Declare the timescale where time_unit is 1ns
// and time_precision is 1ps
`timescale 1ns/1ps

// NOTE: Testbench is the same as in previous example
module tb;
	// To understand the effect of timescale, let us 
	// drive a signal with some values after some delay
  reg val;
  
  initial begin
  	// Initialize the signal to 0 at time 0 units
    val <= 0;
    
    // Advance by 1 time unit, display a message and toggle val
    #1 		$display ("T=%0t At time #1", $realtime);
    val <= 1;
    
    // Advance by 0.49 time unit and toggle val
    #0.49 	$display ("T=%0t At time #0.49", $realtime);
    val <= 0;
    
    // Advance by 0.50 time unit and toggle val
    #0.50 	$display ("T=%0t At time #0.50", $realtime);
    val <= 1;
    
    // Advance by 0.51 time unit and toggle val
    #0.51 	$display ("T=%0t At time #0.51", $realtime);
    val <= 0;

		// Let simulation run for another 5 time units and exit
    #5 $display ("T=%0t End of simulation", $realtime);
  end
endmodule

  

Zie dat de tijdseenheden zijn geschaald om overeen te komen met de nieuwe precisiewaarde van 1ps. Merk ook op dat tijd wordt weergegeven in de kleinste resolutie, in dit geval picoseconden.

Simulatielogboek
ncsim> run
T=1000 At time #1
T=1490 At time #0.49
T=1990 At time #0.50
T=2500 At time #0.51
T=7500 End of simulation
ncsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Verilog-zelfstudie
  2. Verilog-aaneenschakeling
  3. Verilog-opdrachten
  4. Verilog blokkeren en niet-blokkeren
  5. Verilog-functies
  6. Verilog-taak
  7. Verilog Scheduling Semantiek
  8. Verilog-klokgenerator
  9. Verilog wiskundige functies
  10. Verilog Tijdnotatie
  11. Verilog Tijdschaalbereik