Menu

Verilog Kommentare: Einzeilig, mehrzeilig und Dokumentations-Stil

Wie du einzeilige und mehrzeilige Kommentare in Verilog schreibst, plus die Dokumentations-Muster, die Digital-Designer nutzen, um Module mit dem Wachstum lesbar zu halten.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Die zwei Formen

Verilog unterstützt genau zwei Kommentar-Syntaxen, beide aus C übernommen:

Das ist die ganze Syntax. Es gibt kein # wie in Python, kein -- wie in VHDL, keinen Lisp-Stil. Nur // und /* ... */.

Wann was nehmen

// ist das, wozu du fast immer greifst. Kürzer, kann nicht versehentlich unbeendet bleiben und passt natürlich zur Art, wie du Verilog schreibst (eine Deklaration pro Zeile, Kommentar in derselben oder benachbarten Zeile):

output reg [7:0] data,  // Byte, das wir auf tx_serial hinausschieben
output reg       valid, // high, während Daten übertragen werden
input  wire      ready  // nachgelagerter Konsument ist bereit

/* ... */ ist hauptsächlich für zwei Dinge gedacht: große Header-Blöcke oben in einer Datei und temporäres Deaktivieren eines Codestücks beim Debuggen. Der Deaktivierungs-Fall ist gefährlich - lies weiter.

Die "Keine Verschachtelung"-Falle

Block-Kommentare verschachteln sich nicht. Wenn du einen Bereich auskommentieren willst, der bereits einen Block-Kommentar enthält, schließt das erste */ den äußeren Block, nicht den inneren:

/* äußerer
   /* innerer */    // <-- dieses */ schließt den äußeren Kommentar
   weiterhin aktiv im Quelltext, was den Parser angeht
*/

Ergebnis: ein Syntaxfehler an einer unerwarteten Stelle, in einer Zeile, die korrekt aussieht.

Wenn du einen Bereich deaktivieren willst, bevorzuge:

  1. Jede Zeile mit // präfixen. Die meisten Editoren tun das per Tastendruck.

  2. Eine Präprozessor-Schutzdirektive nutzen:

    `ifdef DISABLED
        // Code, der nicht kompilieren soll
    `endif
    

Das zweite Muster ist auch der Weg, mehrere Build-Konfigurationen in einer Datei zu halten.

Synthese-Pragmas: Kommentare, die keine sind

Hersteller-Tools nutzen speziell formatierte Kommentare als Out-of-Band-Anweisungen. Der Simulator ignoriert sie weiterhin, aber das Synthese-Tool liest sie:

// synthesis translate_off
initial begin
    $display("simulationsspezifisches Setup");
end
// synthesis translate_on

Die zwei Pragmas sagen dem Synthese-Tool "überspringe alles zwischen diesen Markern". Die genauen Schreibweisen variieren je Hersteller (synthesis, synopsys, pragma, xilinx usw.) - prüfe die Tool-Docs. Wichtig zu wissen: Kommentare in Verilog sind manchmal tragend.

Header-Block-Konventionen

Langlebige Verilog-Dateien starten fast immer mit einem Header-Block. Das genaue Format ist Team-Policy, ein typisches Beispiel:

// -----------------------------------------------------------------------------
// Module      : uart_tx
// Description : 8-N-1 UART-Sender. Nimmt ein Byte auf `data`, wenn `valid`
//               aktiviert ist, und schiebt es auf `serial_out` hinaus.
//               `baud_tick` muss einmal pro Baud-Periode pulsen.
// Ports       : clk        - Systemtakt
//               reset_n    - active-low synchroner Reset
//               baud_tick  - 1-Zyklus-Puls in jedem Baud-Intervall
//               data       - zu sendendes Byte
//               valid      - aktiviert, um eine Übertragung zu starten
//               serial_out - die Leitung, die das FPGA verlässt
//               busy       - high, während ein Frame in Übertragung ist
// Author      : example@team
// Revision    : 2026-05-26 - initial version
// -----------------------------------------------------------------------------

module uart_tx (
    input  wire       clk,
    input  wire       reset_n,
    input  wire       baud_tick,
    input  wire [7:0] data,
    input  wire       valid,
    output reg        serial_out,
    output reg        busy
);
    // ... Body ...
endmodule

Es geht nicht um die Dekoration. Es geht darum, dass jemand, der diese Datei in einem Jahr öffnet - wahrscheinlich du selbst -, in vier Zeilen weiß, was sie tut, was sie erwartet und was sie produziert. Der Lohn skaliert mit der Größe des Projekts.

Inline-Kommentare, die ihr Geld wert sind

Ein häufiger Fehler ist, das Was einer Zeile zu kommentieren, wenn der Code es bereits zeigt:

// schlecht - der Kommentar wiederholt den Code
count <= count + 1;   // count erhöhen

// besser - der Kommentar erklärt, warum die Zeile hier steht
count <= count + 1;   // freilaufender Zyklenzähler für Timestamping

Was Kommentare einzigartig gut können, ist das Warum zu erklären, das der Code nicht selbst zeigen kann: welcher Spec-Abschnitt einer komischen Kodierung folgt, warum ein Register ein Bit breiter ist als es aussieht, warum ein default-Case auf 'x statt '0 gesetzt ist. Setze dafür auf sie. Das Offensichtliche überlässt du dem Code.

Probier es aus

Der Block unten enthält jede Kommentar-Form. Lass ihn laufen - die Ausgabe wird dich nicht überraschen, aber die Dateistruktur sollte sich einprägen:

Du hast jetzt jede Kommentar-Form gesehen, die Verilog unterstützt. Der Rest der Docs nutzt sie wie erwartet: Header-Blöcke oben in langen Modulen, einzeilige // neben Ports und Block-Kommentare nur, wenn es einen ganzen Absatz an Begründung einzufangen gibt.

Häufig gestellte Fragen

Wie schreibt man einen Kommentar in Verilog?

Verilog unterstützt zwei Kommentar-Stile, beide von C übernommen. // startet einen Kommentar, der bis zum Zeilenende läuft. /* ... */ umfasst einen mehrzeiligen Block. Der Compiler ignoriert alles zwischen den Markern; beide Stile sind in jeder synthetisierbaren oder simulationsspezifischen Datei gültig.

Sind Verilog-Kommentare synthetisierbar?

Kommentare existieren nach dem Parsen nicht mehr - das Synthese-Tool wirft sie genauso weg wie der Simulator. Die einzige Ausnahme sind Synthese-Pragmas: speziell formatierte Kommentare wie // synthesis translate_off, die Hersteller-Tools als Direktiven erkennen. Die Pragma-Syntax ist tool-spezifisch und nicht Teil des Verilog-Standards.

Können Verilog-Kommentare verschachtelt werden?

Nein - und das erwischt Anfänger, die einen Block auskommentieren wollen, der bereits /* ... */ enthält. Das erste */ innen schließt den äußeren Kommentar und lässt den Rest des Blocks als aktiven Code stehen. Nutze // in jeder Zeile oder umfasse den Bereich mit \ifdef SOMETHING_FALSE/`endif`, wenn du wirklich einen Abschnitt deaktivieren musst.

Was sollte ein Verilog-Header-Kommentar enthalten?

Die meisten Teams setzen oben in jede Datei einen kleinen Header: Modulname, Ein-Satz-Zweck, Port-Übersicht, Autor/Datum und eine Revisions-Historie. Das genaue Format variiert; wichtig ist, dass jeder, der die Datei öffnet, ohne den Body zu lesen, weiß, was sie tut. Große Designs ergänzen pro-Signal-Kommentare neben jeder Port-Deklaration.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S