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

Verilog-Syntax meistern: Wichtige Regeln & Best Practices

Lexikalische Konventionen in Verilog ähneln C: Ein Strom von Tokens. Ein Token besteht aus einem oder mehreren Zeichen und kann Kommentare, Keywords, Zahlen, Strings oder Whitespace sein. Alle Zeilen müssen mit Semikolon ; enden.

Verilog ist case-sensitive: var_a und var_A sind unterschiedliche Bezeichner.

Kommentare

Zwei Arten:

  1. Einzeilig: Beginnt mit // – alles bis Zeilenende ist Kommentar.
  2. Mehrzeilig: Beginnt mit /*, endet mit */ – nicht verschachtelbar.

Einzeilige Kommentare können in mehrzeiligen verschachtelt werden.

// Einzeiliger Kommentar
integer a; // Variable a, alles rechts von // ist Kommentar
/* Mehrzeiliger Block-Kommentar */
/* Dies ist /* ein ungültig verschachtelter Block-Kommentar */ */
/* Aber // dieser hier ist okay */
// Auch okay
///////////// Immer noch okay

Whitespace

Whitespace (Spaces, Tabs, Newlines, Formfeeds) wird ignoriert, außer er trennt Tokens. Hilft bei Einrückung für Lesbarkeit.

module dut;
// 'module' ist Keyword, 'dut' Identifier
reg [8*6:1] name = "Hello!";
// Die 2 Spaces am Anfang werden ignoriert

In Strings werden Blanks/Tabs nicht ignoriert:

// Kein Space am Zeilenanfang, aber im String
reg [8*6:1] addr = "Earth ";
endmodule

Operatoren

Drei Typen: unär, binär, ternär/conditional.

x = ~y;        // ~ unär, y Operand
x = y | z;     // | binär, y und z Operanden
x = (y > 5) ? w : z; // ?: ternär, (y>5), w, z Operanden

Ist (y > 5) wahr, erhält x Wert von w, sonst z.

Zahlenformate

Standard: Dezimal. Für andere Basen (Binär, Oktal, Hex) gelten Regeln:

16        // Dezimal
0x10      // Hexadezimal
10000     // Binär
20        // Oktal

Sized Numbers (mit Breitenangabe)

Syntax: [size]'[base_format][number]

3'b010;       // 3 Bit, Binär, Wert 2
3'd2;         // 3 Bit, Dezimal, Wert 2
8'h70;        // 8 Bit, Hex 0x70 = Dezimal 112
9'h1FA;       // 9 Bit, Hex 0x1FA = Dezimal 506
4'hA = 4'd10 = 4'b1010 = 4'o12  // Dezimal 10 in 4 Formaten
8'd234 = 8'D234                 // Groß-/Kleinschreibung bei Base egal
32'hFACE_47B2; // Underscore _ für Lesbarkeit (16-Bit-Gruppen)
Großbuchstaben sind bei Hex-Zahlen erlaubt.
16'hcafe;  // Kleinbuchstaben OK
16'hCAFE;  // Großbuchstaben OK
32'h1D40_CAFE; // Underscore als Trenner OK

Unsized Numbers (ohne Breitenangabe)

Ohne base_format → Dezimal. Ohne size → Standardbreite (simulator-/maschinenabhängig, oft 32 Bit).

integer a = 5423;       // Dezimal 5423
integer a = 'h1AD7;     // 32 Bit: 32'h0000_1AD7

Negative Zahlen

Minuszeichen vor der Größe: -6'd3 (8-bit Two's Complement von 3). Minus zwischen Base und Number ist illegal: 8'd-4 → Fehler.

-6'd3;    // 8-bit negativ, Two's Complement von 3
-6'sd9;   // Für signed Arithmetik
8'd-4;    // Illegal!

Strings

Zeichenkette in doppelten Anführungszeichen " ". Nicht mehrzeilig. Jedes Zeichen = 1 Byte.

"Hello World!"        // 12 Zeichen → 12 Bytes
"x + z"               // 5 Zeichen
"How are you...?"     // Illegal: mehrzeilig

Identifiers (Bezeichner)

Namen für Variablen. Alphanumerisch [a-z][A-Z][0-9], Underscore _, Dollar $. Case-sensitive. Darf nicht mit Ziffer oder $ beginnen.

integer var_a;    // OK
integer $var_a;   // Ungültig: beginnt mit $
integer v$ar_a;   // OK: $ mittendrin
integer 2var;     // Ungültig: beginnt mit Ziffer
integer var23_g;  // OK
integer 23;       // Ungültig: nur Ziffern

Keywords

Reservierte Bezeichner für Sprachkonstrukte, in Kleinbuchstaben. Wichtige Keywords siehe Abbildung (nicht als Text verfügbar).

Verilog-Revisionen

Verilog hat mehrere Revisionen durchlaufen (1995–2001), siehe Abbildung.

Verilog

  1. Verilog meistern: Komplettes Tutorial für digitales Schaltungsdesign
  2. Verilog Concatenation meistern: Praktischer Leitfaden
  3. Verilog Assignments verstehen: Typen, Syntax und Best Practices
  4. Verilog Blocking vs. Non-Blocking: Wichtige Unterschiede erklärt
  5. Verilog Functions meistern für effizientes RTL-Design
  6. Verilog Tasks verstehen: Functions vs. Tasks, Syntax und Verwendung
  7. Verilog Clock Generator: Design & Implementierungsleitfaden
  8. Verilog Math Functions meistern für effizientes Hardware-Design
  9. Verilog $timeformat meistern: Präzision und Anzeigesteuerung
  10. Verilog Timescales an jedem Scope verstehen und ausgeben