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

Verilog-Datentypen

Die primäre Absicht von Datentypen in der Verilog-Sprache besteht darin, Datenspeicherelemente wie Bits in einem Flip-Flop und Übertragungselemente wie Drähte darzustellen, die Logikgatter und sequentielle Strukturen verbinden.

Welche Werte haben Variablen?

Fast alle Datentypen können nur einen der vier verschiedenen Werte haben, wie unten angegeben, mit Ausnahme von real und event Datentypen.

0 repräsentiert eine logische Null oder eine falsche Bedingung
1 repräsentiert eine logische Eins oder eine wahre Bedingung
x stellt einen unbekannten logischen Wert dar (kann Null oder Eins sein)
z repräsentiert einen hochohmigen Zustand

Das folgende Bild zeigt, wie diese Werte in Zeitdiagrammen und Simulationswellenformen dargestellt werden. Die meisten Simulatoren verwenden diese Konvention, wobei rot steht für X und Orange in der Mitte steht für hochohmig oder Z .

Was bedeutet der Verilog-Wertsatz?

Da Verilog im Wesentlichen zur Beschreibung von Hardwareelementen wie Flip-Flops und kombinatorischer Logik wie NAND und NOR verwendet wird, muss es das in Hardware gefundene Wertesystem modellieren. Eine logische Eins würde die Spannungsversorgung Vdd darstellen die je nach Herstellungstechnologieknoten irgendwo zwischen 0,8 V und mehr als 3 V liegen kann. Eine logische Null würde Masse darstellen und damit einen Wert von 0V.

X oder x bedeutet, dass der Wert zu diesem Zeitpunkt einfach unbekannt ist und entweder 0 oder 1 sein kann. Dies ist ganz anders als bei X wird in boolescher Logik behandelt, wo es "egal" bedeutet.

Wie bei jedem unvollständigen Stromkreis hat der Draht, der mit nichts verbunden ist, an diesem Knoten eine hohe Impedanz und wird durch Z dargestellt oder z . Selbst in Verilog führt jeder nicht angeschlossene Draht zu einer hohen Impedanz.

Netze und Variablen

Netze und Variablen sind die beiden Hauptgruppen von Datentypen, die unterschiedliche Hardwarestrukturen darstellen und sich in der Art und Weise unterscheiden, wie sie zugewiesen werden und Werte behalten.

Netze

Netze werden verwendet, um zwischen Hardwareeinheiten wie Logikgattern zu verbinden und speichern daher keinen eigenen Wert. In der unten gezeigten Abbildung wird ein Netz namens net_11 verwendet, um den Ausgang des UND-Gatters mit dem ersten Eingang des Flipflops namens data_0 zu verbinden. In ähnlicher Weise werden die beiden Eingänge des UND-Gatters mit den Netzen net_45 und net_67 verbunden.

Es gibt verschiedene Arten von Netzen mit jeweils unterschiedlichen Eigenschaften, aber das beliebteste und am weitesten verbreitete Netz in digitalen Designs ist vom Typ wire . Ein wire ist ein Verilog-Datentyp, der zum Verbinden von Elementen und zum Verbinden von Netzen verwendet wird, die von einem einzelnen Gate oder einer kontinuierlichen Zuweisung gesteuert werden. Die wire ähnelt dem elektrischen Draht, der verwendet wird, um zwei Komponenten auf einem Steckbrett zu verbinden.

Wenn mehrere Netze benötigt werden, können sie zu einem einzigen wire gebündelt werden . In der unten gezeigten Abbildung haben wir eine 4-Bit-Leitung, die 4 separate Werte auf jeder der Leitungen senden kann. Solche Entitäten mit einer Breite von mehr als 1 werden als Vektoren bezeichnet, wie wir im nächsten Artikel sehen werden.

  
  
wire [3:0] 	n0; 		// 4-bit wire -> this is a vector

  

Es ist illegal, einen Namen, der bereits durch ein Netz, einen Parameter oder eine Variable deklariert wurde, neu zu deklarieren, wie im folgenden Code gezeigt.

  
  
module design;
	wire    abc;
	wire 	a;
	wire 	b;
	wire 	c;
	
	wire    abc;   // Error: Identifier "abc" previously declared
	
	assign abc = a & b | c;
endmodule

  

Variablen

Eine Variable hingegen ist eine Abstraktion eines Datenspeicherelements und kann Werte enthalten. Ein Flipflop ist ein gutes Beispiel für ein Speicherelement.

Verilog-Datentyp reg kann zum Modellieren von Hardwareregistern verwendet werden, da es Werte zwischen Zuweisungen enthalten kann. Beachten Sie, dass ein reg muss nicht immer ein Flip-Flop darstellen, da es auch zur Darstellung kombinatorischer Logik verwendet werden kann.

Im Bild links haben wir ein Flipflop, das 1 Bit speichern kann, und das Flipflop rechts kann 4 Bits speichern.

Andere Datentypen

Ganzzahl

Ein integer ist eine Allzweckvariable mit einer Breite von 32 Bit, die für andere Zwecke beim Modellieren von Hardware verwendet werden kann und ganzzahlige Werte speichert.

  
  
    integer     count;              // Count is an integer value > 0

  

Zeit

Ein time Die Variable ist vorzeichenlos, 64 Bit breit und kann zum Speichern von Simulationszeitgrößen für Debugging-Zwecke verwendet werden. Ein realtime Die Variable speichert die Zeit einfach als Fließkommazahl.

  
  
    time        end_time;           // end_time can be stored a time value like 50ns
    realtime    rtime;              // rtime = 40.25ps 

  

echt

Ein real Variable kann Fließkommawerte speichern und kann auf die gleiche Weise wie integer zugewiesen werden und reg .

  
  
    real        float;              // float = 12.344  - can store floating numbers

  

Beispiel

  
  
module testbench;
  integer  	int_a; 				// Integer variable
  real 		real_b; 			// Real variable
  time 		time_c; 			// Time variable
  
  initial begin
    int_a 	= 32'hcafe_1234; 	// Assign an integer value
    real_b 	= 0.1234567; 		// Assign a floating point value

    #20; 						// Advance simulation time by 20 units
    time_c 	= $time; 			// Assign current simulation time
    
    // Now print all variables using $display system task
    $display ("int_a 	= 0x%0h", int_a);
    $display ("real_b 	= %0.5f", real_b);
    $display ("time_c 	= %0t", time_c);
  end
endmodule

  
Simulationsprotokoll
ncsim> run
int_a 	= 0xcafe1234
real_b 	= 0.12346
time_c 	= 20
ncsim: *W,RNQUIE: Simulation is complete.

Verilog-Strings

Strings werden in reg gespeichert , und die Breite des reg Die Variable muss groß genug sein, um den String aufzunehmen. Jedes Zeichen in einer Zeichenfolge stellt einen ASCII-Wert dar und benötigt 1 Byte. Wenn die Größe der Variablen kleiner als die Zeichenfolge ist, schneidet Verilog die äußerst linken Bits der Zeichenfolge ab. Wenn die Variable größer als der String ist, fügt Verilog Nullen links vom String hinzu.

  
  
// "Hello World" requires 11 bytes

reg [8*11:1] str = "Hello World";         // Variable can store 11 bytes, str = "Hello World"
reg [8*5:1]  str = "Hello World";         // Variable stores only 5 bytes (rest is truncated), str = "World"
reg [8*20:1] str = "Hello World";         // Variable can store 20 bytes (rest is padded with zeros), str = "         Hello World"

  

Hier ist ein vollständiges Beispiel, das zeigt, wie die drei oben angegebenen Variablen simuliert werden können.

  
  
module testbench;
  reg [8*11:1] str1;
  reg [8*5:1]  str2;
  reg [8*20:1] str3;
  
  initial begin
    str1 = "Hello World";
    str2 = "Hello World";
    str3 = "Hello World";
    
    $display ("str1 = %s", str1);
    $display ("str2 = %s", str2);
    $display ("str3 = %s", str3);
  end
endmodule

  

Beachten Sie, dass str1 die richtige Größe hat, um alle 11 Bytes der Zeichenfolge "Hello World" zu speichern, und daher die gesamte Zeichenfolge gedruckt wird. Allerdings kann str2 nur 5 Bytes speichern und daher werden die oberen 6 Bytes abgeschnitten und am Ende wird nur "World" gespeichert. Die dritte Variable str3 ist größer als 11 Bytes und füllt Leerzeichen nach links auf, und daher wird der darin gespeicherte Wert zu "Hello World".

Simulationsprotokoll
ncsim> run
str1 = Hello World
str2 = World
str3 =          Hello World
ncsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. C#-Variablen und (primitive) Datentypen
  2. C++-Datentypen
  3. C-Datentypen
  4. Python-Datentypen
  5. Java-Datentypen (Primitiv)
  6. 5 verschiedene Arten von Rechenzentren [mit Beispielen]
  7. 8 verschiedene Arten von Cloud Computing im Jahr 2021
  8. 8 verschiedene Arten von Datenschutzverletzungen mit Beispielen
  9. Verilog-Tutorial
  10. Verilog-Verkettung