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

Verilog-Syntax

Lexikalische Konventionen in Verilog ähneln C in dem Sinne, dass es einen Strom von Token enthält. Ein lexikalischer Token kann aus einem oder mehreren Zeichen bestehen und Token können Kommentare, Schlüsselwörter, Zahlen, Zeichenfolgen oder Leerzeichen sein. Alle Zeilen sollten mit einem Semikolon ; abgeschlossen werden .

Verilog ist Groß-/Kleinschreibung , also sind var_a und var_A unterschiedlich.

Kommentare

Es gibt zwei Möglichkeiten, Kommentare in Verilog zu schreiben.

  1. Eine einzelne Zeile Kommentar beginnt mit // und weist den Verilog-Compiler an, alles nach diesem Punkt bis zum Ende der Zeile als Kommentar zu behandeln.
  2. Eine mehrzeilige Kommentar beginnt mit /* und endet mit */ und kann nicht verschachtelt werden.

Einzeilige Kommentare können jedoch in einem mehrzeiligen Kommentar verschachtelt werden.

  
  
// This is a single line comment

integer a;   // Creates an int variable called a, and treats everything to the right of // as a comment

/*
This is a 
multiple-line or
block comment
*/

/* This is /*
an invalid nested 
block comment */
*/

/* However,
// this one is okay
*/

// This is also okay
///////////// Still okay

  

Leerzeichen

Leerraum ist ein Begriff, der verwendet wird, um die Zeichen für Leerzeichen, Tabulatoren, Zeilenumbrüche und Seitenvorschübe darzustellen, und wird normalerweise von Verilog ignoriert, außer wenn er Tokens trennt. Tatsächlich hilft dies bei der Einrückung von Code, um ihn leichter lesbar zu machen.

module dut;              // 'module' is a keyword, 
                         // 'dut' is an identifier
  reg [8*6:1] name = "Hello!";   // The 2 spaces in the beginning are ignored

Leerzeichen (Leerzeichen) und Tabulatoren (von der TAB-Taste) werden jedoch in Zeichenfolgen nicht ignoriert. Im Beispiel unten die Zeichenfolge Variable namens addr erhält den Wert "Erde", weil Leerzeichen in Strings beibehalten werden.

   // There is no space in the beginning of this line, 
   // but there's a space in the string
   reg [8*6:1] addr = "Earth ";     
endmodule 

Operatoren

Es gibt drei Arten von Operatoren:unär , binär , und ternär oder bedingt .

  
  
x = ~y;                // ~ is a unary operator, and y is the operand
x = y | z;             // | is a binary operator, where y and z are its operands
x = (y > 5) ? w : z;   // ?: is a ternary operator, and the expression (y>5), w and z are its operands

  

Wenn der Ausdruck (y> 5) wahr ist, dann Variable x erhält den Wert in w , sonst der Wert in z .

Zahlenformat

Wir sind am besten mit Zahlen vertraut, die als Dezimalzahlen dargestellt werden. Zahlen können aber auch binär dargestellt werden , oktal und hexadezimal . Standardmäßig behandeln Verilog-Simulatoren Zahlen als Dezimalzahlen. Um sie in einem anderen Radix darzustellen , müssen bestimmte Regeln eingehalten werden.

16          // Number 16 in decimal
0x10        // Number 16 in hexadecimal
10000       // Number 16 in binary
20          // Number 16 in octal

Größe

Zahlen mit Größenangaben werden wie unten gezeigt dargestellt, wobei Größe wird nur dezimal geschrieben, um die Anzahl der Bits in der Zahl anzugeben.

  
  
[size]'[base_format][number]

  

3'b010;     // size is 3, base format is binary ('b), and the number is 010 (indicates value 2 in binary)
3'd2;       // size is 3, base format is decimal ('d) and the number is 2 (specified in decimals)
8'h70;      // size is 8, base format is hexadecimal ('h) and the number is 0x70 (in hex) to represent decimal 112
9'h1FA;     // size is 9, base format is hexadecimal ('h) and the number is 0x1FA (in hex) to represent decimal 506

4'hA = 4'd10 = 4'b1010 = 4'o12	// Decimal 10 can be represented in any of the four formats
8'd234 = 8'D234                 // Legal to use either lower case or upper case for base format
32'hFACE_47B2;                  // Underscore (_) can be used to separate 16 bit numbers for readability

Großbuchstaben sind für die Zahlenangabe zulässig, wenn das Basisformat hexadezimal ist.

16'hcafe;         // lowercase letters Valid
16'hCAFE;         // uppercase letters Valid
32'h1D40_CAFE;    // underscore can be used as separator between 4 letters Valid

Undimensioniert

Zahlen ohne base_format Spezifikation sind standardmäßig Dezimalzahlen . Zahlen ohne Größe Spezifikation haben je nach Simulator- und Maschinentyp eine Standardanzahl von Bits.

  
  
integer a = 5423;       // base format is not specified, a gets a decimal value of 5423
integer a = 'h1AD7;     // size is not specified, because a is int (32 bits) value stored in a = 32'h0000_1AD7

  

Negativ

Negative Zahlen werden durch ein Minuszeichen - angegeben Zeichen vor der Größe einer Zahl. Es ist illegal, ein Minuszeichen zwischen base_format zu haben und Zahl .

-6'd3;            // 8-bit negative number stored as two's complement of 3
-6'sd9;           // For signed maths
8'd-4;            // Illegal

Strings

Eine Folge von Zeichen, eingeschlossen in doppelte Anführungszeichen " " heißt Saite. Es kann nicht in mehrere Zeilen aufgeteilt werden und jedes Zeichen in der Zeichenfolge benötigt 1 Byte, um gespeichert zu werden.

"Hello World!"        // String with 12 characters -> require 12 bytes
"x + z"               // String with 5 characters

"How are you
feeling today ?"      // Illegal for a string to be split into multiple lines

Identifikatoren

Identifikatoren sind Namen von Variablen, damit sie später referenziert werden können. Sie bestehen aus den alphanumerischen Zeichen [a-z][A-Z][0-9] , unterstreicht _ oder Dollarzeichen $ und Groß- und Kleinschreibung beachten. Sie dürfen nicht mit einer Ziffer oder einem Dollarzeichen beginnen.

integer var_a;        // Identifier contains alphabets and underscore -> Valid
integer $var_a;       // Identifier starts with $ -> Invalid
integer v$ar_a;       // Identifier contains alphabets and $ -> Valid
integer 2var;         // Identifier starts with a digit -> Invalid
integer var23_g;      // Identifier contains alphanumeric characters and underscore -> Valid
integer 23;           // Identifier contains only numbers -> Invalid

Schlüsselwörter

Schlüsselwörter sind spezielle Bezeichner, die zur Definition der Sprachkonstrukte reserviert sind und in Kleinbuchstaben geschrieben werden. Nachfolgend finden Sie eine Liste wichtiger Schlüsselwörter.

Verilog-Revisionen

Verilog wurde im Laufe der Jahre einigen Überarbeitungen unterzogen, und von 1995 bis 2001 wurden weitere Ergänzungen vorgenommen, die unten gezeigt werden.


Verilog

  1. Verilog-Tutorial
  2. Verilog-Verkettung
  3. Verilog-Aufgaben
  4. Verilog-Blockierung und Nicht-Blockierung
  5. Verilog-Funktionen
  6. Verilog-Aufgabe
  7. Verilog-Taktgenerator
  8. Verilog Math-Funktionen
  9. Verilog-Zeitformat
  10. Verilog-Zeitskalenumfang