Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Verilog

Verilog-Aufgaben

Das Platzieren von Werten auf Netzen und Variablen wird als Zuweisungen bezeichnet. Es gibt drei Grundformen:

Gesetzliche LHS-Werte

Eine Zuweisung besteht aus zwei Teilen – rechts (rechts) und links (links) mit einem Gleichheitszeichen (=) oder einem Kleiner-als-gleich-Zeichen (<=) dazwischen.

Zuweisungstyp Linke Seite
Verfahrensweise
  • Variablen (Vektor/Skalar)
  • Bit-Auswahl oder Teil-Auswahl einer Vektorreg-, Integer- oder Zeitvariablen
  • Erinnerungswort
  • Verkettung eines der oben genannten Elemente
Kontinuierlich
  • Netz (Vektor/Skalar)
  • Bitauswahl oder Teilauswahl eines Vektornetzes
  • Verkettung von Bit-Selects und Part-Selects
Prozedural Kontinuierlich
  • Netz oder Variable (Vektor/Skalar)
  • Bitauswahl oder Teilauswahl eines Vektornetzes

Die RHS kann jeden Ausdruck enthalten, der zu einem Endwert ausgewertet wird, während die LHS ein Netz oder eine Variable angibt, der der Wert in RHS zugewiesen wird.

  
  
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

  

Verfahrensauftrag

Prozedurale Zuweisungen treten in Prozeduren wie always, initial, task und functions auf und werden verwendet, um Variablen Werte zuzuweisen. Die Variable behält den Wert bis zur nächsten Zuweisung an dieselbe Variable.

Der Wert wird auf die Variable gesetzt, wenn die Simulation diese Anweisung irgendwann während der Simulationszeit ausführt. Dies kann durch die Verwendung von Kontrollflussanweisungen wie if-else-if, case-Anweisung und Schleifenmechanismen nach Belieben gesteuert und modifiziert werden.

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

  

Zuweisung der Variablendeklaration

Ein Anfangswert kann einer Variablen zum Zeitpunkt ihrer Deklaration zugewiesen werden, wie nachstehend gezeigt. Die Zuweisung hat keine Dauer und hält den Wert, bis die nächste Zuweisung an dieselbe Variable erfolgt. Beachten Sie, dass Zuweisungen von Variablendeklarationen an ein Array nicht zulässig sind.

  
  
	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;

  

Wenn die Variable während der Deklaration und zum Zeitpunkt 0 in einem Anfangsblock wie unten gezeigt initialisiert wird, ist die Reihenfolge der Auswertung nicht garantiert und kann daher entweder 8'h05 oder 8'hee haben.

  
  
	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

  

Verfahrensblöcke und Zuweisungen werden in einem späteren Abschnitt ausführlicher behandelt.

Kontinuierliche Zuweisung

Klicken Sie hier für ein Schritt-für-Schritt-Simulationsbeispiel !

Dies wird verwendet, um Skalar- und Vektornetzen Werte zuzuweisen, und geschieht immer dann, wenn sich die RHS ändert. Es bietet eine Möglichkeit, kombinatorische Logik zu modellieren, ohne eine Verbindung von Gattern zu spezifizieren, und erleichtert es, das Netz mit logischen Ausdrücken zu steuern.

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

  

Immer wenn b oder c seinen Wert ändert, wird der gesamte Ausdruck in RHS ausgewertet und a wird mit dem neuen Wert aktualisiert.

Nettodeklarationszuweisung

Dies ermöglicht es uns, eine kontinuierliche Zuweisung auf dieselbe Anweisung zu setzen, die das Netz deklariert. Beachten Sie, dass, da ein Netz nur einmal deklariert werden kann, nur eine Deklarationszuweisung für ein Netz möglich ist.

  
  
	wire  penable = 1;

  

Prozedurale kontinuierliche Zuweisung

Dies sind prozedurale Anweisungen, die es ermöglichen, Ausdrücke kontinuierlich Netzen oder Variablen zuzuweisen, und es gibt zwei Typen.

Zuweisung aufheben

Dies überschreibt alle prozeduralen Zuweisungen an eine Variable und wird deaktiviert, indem dasselbe Signal mit deassign verwendet wird . Der Wert der Variablen bleibt gleich, bis die Variable durch eine prozedurale oder prozedurale kontinuierliche Zuweisung einen neuen Wert erhält. Die linke Seite eines assign Die Anweisung kann kein Bit-Select, Part-Select oder eine Array-Referenz sein, kann aber eine Variable oder eine Verkettung von Variablen sein.

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

  

Freigabe erzwingen

Diese ähneln dem assign - deassign Anweisungen, sondern können auch auf Netze und Variablen angewendet werden. Die LHS kann eine Bitauswahl eines Netzes, eine Teilauswahl eines Netzes, eine Variable oder ein Netz sein, kann aber nicht die Referenz auf ein Array und eine Bit/Teilauswahl einer Variablen sein. Die force Anweisung überschreibt alle anderen Zuweisungen an die Variable, bis sie mit release freigegeben wird Schlüsselwort.

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

  

Verilog

  1. Verilog-Tutorial
  2. Verilog-Verkettung
  3. Verilog-Funktionen
  4. Verilog-Aufgabe
  5. Verilog-Taktgenerator
  6. Verilog Math-Funktionen
  7. Verilog-Zeitformat
  8. Verilog-Zeitskalenumfang
  9. Verilog-Datei-IO-Operationen
  10. Verilog Hallo Welt