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

Het plaatsen van waarden op netten en variabelen worden toewijzingen genoemd. Er zijn drie basisvormen:

  • Procedureel
  • Continu
  • Procedureel doorlopend

Juridische LHS-waarden

Een opdracht bestaat uit twee delen - rechterkant (RHS) en linkerkant (LHS) met een gelijk-symbool (=) of een minder dan-gelijk-symbool (<=) ertussen.

Opdrachttype Linkerkant
Procedureel
  • Variabelen (vector/scalair)
  • Bit-select of part-select van een vector reg, integer of tijdvariabele
  • Geheugenwoord
  • Aaneenschakeling van een van de bovenstaande
Continu
  • Netto (vector/scalair)
  • Bit-select of part-select van een vectornet
  • Aaneenschakeling van bit-selects en part-selects
Procedureel doorlopend
  • Netto of variabel (vector/scalair)
  • Bit-select of part-select van een vectornet

De RHS kan elke uitdrukking bevatten die resulteert in een uiteindelijke waarde, terwijl de LHS een net of een variabele aangeeft waaraan de waarde in RHS wordt toegewezen.

  
  
module tb;
	reg clk;
	wire a, b, c, d, e, f;
	reg  z, y;
	
	// clk is on the LHS and the not of clk forms RHS
	always #10 clk = ~clk;
	
	// y is the LHS and the constant 1 is RHS
	assign y = 1; 
	
	// f is the LHS, and the expression of a,b,d,e forms the RHS
	assign f = (a | b) ^ (d & e);

	always @ (posedge clk) begin
		// z is the LHS, and the expression of a,b,c,d forms the RHS
		z <= a + b + c + d;
	end
	
	initial begin
		// Variable names on the left form LHS while 0 is RHS
		a <= 0; b <= 0; c <= 0; d <= 0; e <= 0;
		clk <= 0;
	end
endmodule

  

Procedure Opdracht

Procedurele toewijzingen vinden plaats binnen procedures zoals altijd, initiaal, taak en functies en worden gebruikt om waarden op variabelen te plaatsen. De variabele behoudt de waarde tot de volgende toewijzing aan dezelfde variabele.

De waarde wordt op de variabele geplaatst wanneer de simulatie deze instructie op een bepaald moment tijdens de simulatietijd uitvoert. Dit kan worden gecontroleerd en aangepast zoals we willen door het gebruik van controlestroominstructies zoals if-else-if, case-statement en looping-mechanismen.

  
  
	reg [7:0]  data;
	integer    count;
	real       period;
	
	initial begin
		data = 8'h3e;
		period = 4.23;
		count = 0;
	end
	
	always @ (posedge clk) 
		count++;

  

Toewijzing variabele declaratie

Een initiële waarde kan op een variabele worden geplaatst op het moment van zijn declaratie, zoals hierna wordt getoond. De toewijzing heeft geen duur en houdt de waarde vast totdat de volgende toewijzing aan dezelfde variabele plaatsvindt. Merk op dat variabele declaratietoewijzingen aan een array niet zijn toegestaan.

  
  
	module my_block;
		reg [31:0] data = 32'hdead_cafe;
	
		initial begin
			#20  data = 32'h1234_5678;    // data will have dead_cafe from time 0 to time 20
			                              // At time 20, data will get 12345678
		end
	endmodule

  
  
  
	reg [3:0] a = 4'b4;
	
	// is equivalent to 
	
	reg [3:0] a;
	initial a = 4'b4;

  

Als de variabele wordt geïnitialiseerd tijdens de declaratie en op tijdstip 0 in een eerste blok zoals hieronder weergegeven, is de volgorde van evaluatie niet gegarandeerd en kan deze dus ofwel 8'h05 of 8'hee hebben.

  
  
	module my_block;
		reg [7:0]  addr = 8'h05;
		
		initial 
			addr = 8'hee;
	endmodule

  
  
  
	reg [3:0] array [3:0] = 0;           // illegal
	integer i = 0, j;                    // declares two integers i,j and i is assigned 0
	real r2 = 4.5, r3 = 8;               // declares two real numbers r2,r3 and are assigned 4.5, 8 resp.
	time startTime = 40;                 // declares time variable with initial value 40

  

Procedurele blokken en opdrachten zullen in een later gedeelte in meer detail worden behandeld.

Doorlopende opdracht

Klik hier voor een stap-voor-stap simulatie voorbeeld!

Dit wordt gebruikt om waarden toe te kennen aan scalaire en vectornetten en gebeurt wanneer er een verandering in de RHS is. Het biedt een manier om combinatorische logica te modelleren zonder een onderlinge verbinding van poorten te specificeren en maakt het gemakkelijker om het net te besturen met logische uitdrukkingen.

  
  
    // Example model of an AND gate
	wire  a, b, c;
	
	assign a = b & c;

  

Telkens wanneer b of c zijn waarde verandert, wordt de hele uitdrukking in RHS geëvalueerd en a wordt bijgewerkt met de nieuwe waarde.

Toewijzing nettoaangifte

Hierdoor kunnen we een continue toewijzing plaatsen op hetzelfde statement dat het net declareert. Merk op dat omdat een net maar één keer kan worden gedeclareerd, er slechts één declaratietoewijzing mogelijk is voor een net.

  
  
	wire  penable = 1;

  

Procedurele doorlopende opdracht

Dit zijn procedurele instructies waarmee expressies continu kunnen worden toegewezen aan netten of variabelen en zijn van twee typen.

  • assign ... deassign
  • force ... release

toewijzen ongedaan maken

Dit zal alle procedurele toewijzingen aan een variabele overschrijven en wordt gedeactiveerd door hetzelfde signaal te gebruiken met deassign . De waarde van de variabele blijft hetzelfde totdat de variabele een nieuwe waarde krijgt via een procedurele of procedurele continue toewijzing. De LHS van een assign statement kan geen bit-select, part-select of array-verwijzing zijn, maar kan een variabele of een aaneenschakeling van variabelen zijn.

  
  
	reg q;
	
	initial begin
		assign q = 0;
		#10 deassign q;
	end

  

gedwongen loslaten

Deze zijn vergelijkbaar met de assign - deassign statements, maar kunnen ook worden toegepast op netten en variabelen. De LHS kan een bitselectie van een net, een gedeeltelijke selectie van een net, een variabele of een net zijn, maar kan niet de verwijzing zijn naar een array en een bit/deelselectie van een variabele. De force verklaring zal alle andere toewijzingen aan de variabele overschrijven totdat deze wordt vrijgegeven met behulp van de release zoekwoord.

  
  
	reg o, a, b;
	
	initial begin
		force o = a & b;
		...
		release o;
	end

  

Verilog

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