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 Scheduling Semantiek

Verilog-ontwerp en testbench hebben meestal veel coderegels, bestaande uit always of initial blokken, doorlopende opdrachten en andere procedurele uitspraken die in de loop van een simulatie op verschillende tijdstippen actief worden.

Elke verandering in waarde van een signaal in het Verilog-model wordt beschouwd als een updategebeurtenis . En processen zoals always en assign blokken die gevoelig zijn voor deze update-gebeurtenissen worden geëvalueerd in een willekeurige volgorde en wordt een evaluatie-event genoemd . Aangezien deze gebeurtenissen op verschillende tijdstippen kunnen plaatsvinden, kunnen ze beter worden beheerd en verzekerd van de juiste volgorde van uitvoering door ze in te plannen in gebeurteniswachtrijen die zijn gerangschikt op simulatietijd.

  
  
module tb;
	reg a, b, c;
	wire d;
	
	// 'always' is a process that gets evaluated when either 'a' or 'b' is updated. 
	// When 'a' or 'b' changes in value it is called an 'update event'. When 'always'
	// block is triggered because of a change in 'a' or 'b' it is called an evaluation
	// event
	always @ (a or b) begin
		c = a & b;
	end
	
	// Here 'assign' is a process which is evaluated when either 'a' or 'b' or 'c'
	// gets updated
	assign d = a | b ^ c;
endmodule

  

Evenementwachtrij

Een simulatiestap kan in vier verschillende regio's worden gesegmenteerd. Een actieve gebeurteniswachtrij is slechts een reeks processen die op het huidige moment moeten worden uitgevoerd, wat ertoe kan leiden dat meer processen worden gepland in actieve of andere gebeurteniswachtrijen. Evenementen kunnen aan elk van de regio's worden toegevoegd, maar altijd worden verwijderd uit de actieve regio.

  • Actief gebeurtenissen vinden plaats op de huidige simulatietijd en kunnen in elke volgorde worden verwerkt.
  • Inactief gebeurtenissen vinden plaats op de huidige simulatietijd, maar worden verwerkt nadat alle actieve gebeurtenissen zijn verwerkt
  • Niet-blokkerende toewijzing gebeurtenissen die eerder werden geëvalueerd, worden toegewezen nadat alle actieve en inactieve gebeurtenissen zijn verwerkt.
  • Bewaken gebeurtenissen worden verwerkt nadat alle actieve, inactieve en niet-blokkerende opdrachten zijn uitgevoerd.

Wanneer alle gebeurtenissen in de actieve wachtrij voor de huidige tijdstap is uitgevoerd, gaat de simulator naar de volgende tijdstap en voert de actieve wachtrij uit.

  
  
module tb;
	reg x, y, z
	
	initial begin
		#1 	x = 1;
			y = 1;
		#1 	z = 0;
	end
endmodule

  

Simulatie begint op tijdstip 0, en de eerste instructie is gepland om te worden uitgevoerd wanneer de simulatietijd 1 tijdseenheid bereikt waarin x en y worden toegewezen aan 1. Dit is de actieve wachtrij voor de huidige tijd die 1 tijdseenheid is. Simulator plant vervolgens de volgende instructie na nog 1 tijdseenheid waarin z wordt toegewezen aan 0.

Wat maakt simulatie niet-deterministisch?

Er kunnen tijdens de simulatie race-omstandigheden zijn die uiteindelijk verschillende outputs opleveren voor hetzelfde ontwerp en dezelfde testbank. Een van de redenen voor niet-deterministisch gedrag is omdat actief gebeurtenissen kunnen uit de wachtrij worden verwijderd en in willekeurige volgorde worden verwerkt.


Verilog

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