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

Verilog is een hardwarebeschrijvingstaal en ontwerpers hoeven hun RTL-ontwerpen niet te simuleren om ze om te zetten in logische poorten. Dus wat is de noodzaak om te simuleren?

Simulatie is een techniek waarbij op verschillende tijdstippen verschillende inputstimulansen op het ontwerp worden toegepast om te controleren of de RTL-code zich op de beoogde manier gedraagt. In wezen is simulatie een goed gevolgde techniek om de robuustheid van het ontwerp te verifiëren. Het is ook vergelijkbaar met hoe een gefabriceerde chip in de echte wereld zal worden gebruikt en hoe deze reageert op verschillende inputs.

Het bovenstaande ontwerp vertegenwoordigt bijvoorbeeld een positieve flankdetector met ingangsklok en signaal die met periodieke tussenpozen worden geëvalueerd om de uitgang pe te vinden zoals getoond. Simulatie stelt ons in staat om het timingdiagram van gerelateerde signalen te bekijken om te begrijpen hoe de ontwerpbeschrijving in Verilog zich daadwerkelijk gedraagt.

Er zijn verschillende EDA-bedrijven die simulatoren ontwikkelen in staat om de uitgangen voor verschillende ingangen voor het ontwerp uit te zoeken. Verilog wordt gedefinieerd in termen van een discrete gebeurtenis uitvoeringsmodel en verschillende simulators zijn vrij om verschillende algoritmen te gebruiken om de gebruiker een consistente set resultaten te bieden. De Verilog-code is verdeeld in meerdere processen en threads en kan in de loop van een simulatie op verschillende tijdstippen worden geëvalueerd, waarop later wordt ingegaan.

Voorbeeld

De testbench genaamd tb is een container voor een ontwerpmodule. In dit voorbeeld hebben we echter geen ontwerpinstanties gebruikt. Er zijn twee variabelen of signalen waaraan op bepaalde tijden bepaalde waarden kunnen worden toegekend. clk vertegenwoordigt een klok die binnen de testbench wordt gegenereerd. Dit wordt gedaan door de always verklaring door de waarde van de klok af te wisselen na elke 5ns. De initial blok bevat een reeks instructies die verschillende waarden aan beide signalen op verschillende tijdstippen toewijzen.

  
  
module tb;
  reg clk;
  reg sig;
 
  // Clock generation 
  // Process starts at time 0ns and loops after every 5ns
  always #5 clk = ~clk;   
 
  // Initial block : Process starts at time 0ns
  initial begin            
    // This system task will print out the signal values everytime they change
    $monitor("Time = %0t clk = %0d sig = %0d", $time, clk, sig);
    
    // Also called stimulus, we simply assign different values to the variables
    // after some simulation "delay"
    sig = 0;
    #5 clk = 0;        // Assign clk to 0 at time 5ns
    #15  sig = 1;      // Assign sig to 1 at time 20ns (#5 + #15)
    #20  sig = 0;      // Assign sig to 0 at time 40ns (#5 + #15 + #20)
    #15  sig = 1;      // Assign sig to 1 at time 55ns (#5 + #15 + #20 + #15)
    #10  sig = 0;      // Assign sig to 0 at time 65ns (#5 + #15 + #20 + #15 + #10)
    #20 $finish;       // Finish simulation at time 85ns
  end
endmodule

  

De simulator levert de volgende output na uitvoering van de bovenstaande testbench.

Simulatielogboek
ncsim> run
Time = 0 clk = x sig = 0
Time = 5 clk = 0 sig = 0
Time = 10 clk = 1 sig = 0
Time = 15 clk = 0 sig = 0
Time = 20 clk = 1 sig = 1
Time = 25 clk = 0 sig = 1
Time = 30 clk = 1 sig = 1
Time = 35 clk = 0 sig = 1
Time = 40 clk = 1 sig = 0
Time = 45 clk = 0 sig = 0
Time = 50 clk = 1 sig = 0
Time = 55 clk = 0 sig = 1
Time = 60 clk = 1 sig = 1
Time = 65 clk = 0 sig = 0
Time = 70 clk = 1 sig = 0
Time = 75 clk = 0 sig = 0
Time = 80 clk = 1 sig = 0
Simulation complete via $finish(1) at time 85 NS + 0

Wat is een simulatiegolfvorm?

Simulaties stellen ons in staat om ontwerp- en testbanksignalen te dumpen in een golfvorm die grafisch kan worden weergegeven om de functionaliteit van het RTL-ontwerp te analyseren en te debuggen. De hieronder getoonde golfvorm is verkregen van een EDA-tool en toont de voortgang van elk signaal met betrekking tot de tijd en is hetzelfde als het eerder getoonde timingdiagram.

Elke verandering in de waarde van een variabele of net wordt een update-gebeurtenis genoemd . En processen zijn gevoelig voor updategebeurtenissen zodanig dat deze processen worden geëvalueerd wanneer de update-gebeurtenis plaatsvindt en een evaluatie-event wordt genoemd . Vanwege de mogelijkheid dat meerdere processen willekeurig worden geëvalueerd, moet de volgorde van wijzigingen worden bijgehouden in iets dat een gebeurteniswachtrij wordt genoemd. .

Uiteraard zijn ze geordend op simulatietijd. Het plaatsen van een nieuwe gebeurtenis in de wachtrij heet planning . Simulatietijd wordt gebruikt om te verwijzen naar de tijdswaarde die door de simulator wordt bijgehouden om de werkelijke tijd te modelleren die nodig is voor het circuit dat wordt gesimuleerd. De tijdwaarden voor het bovenstaande voorbeeld worden weergegeven in nanoseconden ns in het timingdiagram.

  
  
module des;
	wire abc;
	wire a, b, c;
	
	assign abc = a & b | c;  // abc is updated via the assign statement (process) whenever a, b or c change -> update event
endmodule

  

Ververs Verilog en bekijk een voorbeeld!

Regio's in wachtrij voor gebeurtenissen

De Verilog-gebeurteniswachtrij is logisch verdeeld in vijf regio's en gebeurtenissen kunnen aan elk van deze worden toegevoegd. Het kan echter alleen uit de actieve regio worden verwijderd.

Evenementen Beschrijving
Actief Komt voor op de huidige simulatietijd en kan in elke volgorde worden verwerkt
Inactief Gebeurt op de huidige simulatietijd, maar wordt verwerkt nadat alle actieve gebeurtenissen zijn voltooid
Niet-blokkerend Geëvalueerd op een eerder tijdstip, maar toewijzing wordt gedaan in de huidige simulatietijd nadat actieve en inactieve gebeurtenissen zijn uitgevoerd
Monitor Verwerkt nadat alle actieve, inactieve en niet-blokkerende gebeurtenissen zijn voltooid
Toekomst Doe zich voor op een toekomstige simulatietijd

In een simulatiecyclus worden alle actieve gebeurtenissen verwerkt. De standaard garandeert een bepaalde planningsvolgorde, behalve in enkele gevallen en. Zo worden opdrachten binnen een begin-eindblok alleen uitgevoerd in de volgorde waarin ze voorkomen.

  
  
module tb;
	reg [3:0] a;
	reg [3:0] b;
	
	initial begin		// Statements are executed one after the other at appropriate simulation times
		a = 5;			// At time 0ns, a is assigned 5
		b = 2;			// In the same simulation step (time 0ns), b is assigned 2
		
		#10 a = 7;		// When simulation advances to 10ns, a is assigned 7
	end
endmodule

  

De gebeurteniswachtrij definieert die toewijzing aan b moet gebeuren na toewijzing aan a .


Verilog

  1. Verilog-zelfstudie
  2. Verilog-aaneenschakeling
  3. Verilog-opdrachten
  4. Verilog blokkeren en niet-blokkeren
  5. Verilog-functies
  6. Verilog-taak
  7. Verilog `ifdef voorwaardelijke compilatie'
  8. Verilog Scheduling Semantiek
  9. Verilog-klokgenerator
  10. Verilog-weergavetaken
  11. Verilog wiskundige functies