- 1 1. Einführung: Die Bedeutung und der Zweck von „display“ in Verilog
- 2 2. Grundlagen von $display: Syntax, Anwendungsfälle und Vorsichtsmaßnahmen
- 3 3. Vergleich von Log‑Ausgabe‑System‑Tasks: $display, $write, $strobe, $monitor
- 4 4. Format‑Spezifizierer und erweiterte Anzeige‑Techniken
- 5 5. Praktische Beispiele: Verwendung von $display in Test‑Benches und Modulen
- 6 6. Display‑Steuerungs‑Anwendungen (Pixel‑/Text‑/Bild‑Anzeige)
- 7 7. Geeignete Verwendung und Tipps basierend auf Anwendungsszenarien
- 8 8. FAQ (Häufig gestellte Fragen)
- 8.1 Q1. Was ist der Unterschied zwischen $display und $monitor?
- 8.2 Q2. Wann sollte ich $strobe verwenden?
- 8.3 Q3. Wofür dient der Formatbezeichner %m?
- 8.4 Q4. Meine Protokolle wurden riesig, weil ich viele $display verwendet habe. Was soll ich tun?
- 8.5 Q5. Kann $display für die Synthese (FPGA/ASIC) verwendet werden?
- 8.6 Q6. Wie kann ich Text oder Bilder auf echter Hardware anzeigen?
- 9 9. Fazit & nächste Schritte
1. Einführung: Die Bedeutung und der Zweck von „display“ in Verilog
Was bedeutet „display“ in Verilog?
In Verilog ist $display ein System‑Task, der als Werkzeug dient, um den internen Zustand eines Designs während der Simulation „anzuzeigen“. Ähnlich wie printf in C ermöglicht er das Ausgeben von Signalen, Variablenwerten und Zeichenketten auf ein Terminal oder in die Konsole – und spielt damit eine zentrale Rolle beim Debugging und bei der funktionalen Verifikation.
Warum ist $display für die Verilog‑Entwicklung unverzichtbar?
- Verbesserte Debugging‑Effizienz : In komplexen Schaltungsdesigns ist die Visualisierung, ob interne Signale korrekt funktionieren, entscheidend. Durch den Einsatz von
$displaykönnen Sie sofort die Werte interessierender Signale während der Simulation prüfen. - Simulation‑Visualisierung : Beim Verfolgen von Wertübergängen zu bestimmten Zeitpunkten können reine Wellenformen unzureichend sein. Anzeige‑Logs bieten ein zuverlässiges Mittel, um genau diese Momente zu kennzeichnen.
- Auch für die Dokumentation nützlich : Wenn Sie Design‑Intentionen oder Betriebsregeln anderen Ingenieuren vermitteln, können annotierte Anzeige‑Logs das Verständnis des Codes verbessern.
Zweck und Aufbau dieses Artikels
In diesem Artikel erklären wir methodisch Folgendes:
- Grundsyntax und Verwendung : Eine sorgfältige Einführung in die grundlegende Syntax und Nutzung von
$display. - Vergleich mit anderen System‑Tasks : Wir stellen die Unterschiede zwischen display‑bezogenen Tasks wie
$write,$strobeund$monitorgegenüber. - Format‑Spezifizierer und erweiterte Anwendungstechniken : Der Einsatz von Format‑Spezifizierern wie
%d,%b,%h,%ssowie speziellen Anzeige‑Techniken wird vorgestellt. - Praktische Anwendungsbeispiele : Wir zeigen konkrete Beispiele in Testbenches und Code, die sofort anwendbares Know‑how vermitteln.
- Display‑Steuerungs‑Anwendungen : Beispiel‑Anwendungsfälle umfassen Hardware‑Ausgaben wie LCD‑ oder Monitor‑Steuerung sowie die Anzeige von Text‑/Bild‑Ausgaben.
Mit diesem Aufbau können sowohl Einsteiger als auch Fortgeschrittene $display in Verilog richtig verstehen und praktisch einsetzen. In jedem nachfolgenden Abschnitt gehen wir klar und anhand von Beispielen und Diagrammen (sofern möglich) vor.
2. Grundlagen von $display: Syntax, Anwendungsfälle und Vorsichtsmaßnahmen
Grundsyntax von $display
Bei der Verwendung von $display in Verilog lautet die Grundsyntax wie folgt.
$display("string or format specifiers", signal1, signal2, ...);
- Zeichenketten‑Teil : Schreiben Sie beliebigen Text oder Format‑Spezifizierer (z. B.:
%d,%b,%h). - Argumente : Listen Sie Signal‑ oder Variablennamen auf, die im entsprechenden Format ausgegeben werden sollen.
Beispiel: Anzeige von Takt‑Zähler und Signalwerten
$display("Time=%0t : clk=%b, reset=%b", $time, clk, reset);
In diesem Beispiel werden die Simulationszeit sowie die Werte der Clock/Reset‑Signale ausgegeben.
Anwendungsfälle von $display
- Erfassung des Simulationsfortschritts – Durch das Einsetzen von
$displayan bestimmten Stellen im Design können Sie überprüfen, welchen Teil des Codes die Ausführung erreicht hat. - Signalwert‑Verifikation – Auch wenn Wellenform‑Viewer das intuitive Verstehen von Verzweigungen oder Zustandsübergängen erschweren, erleichtert die Textausgabe das Verständnis.
- Bedingte Nachrichtenanzeige – In Kombination mit
if‑Anweisungen können Sie Meldungen nur dann protokollieren, wenn bestimmte Bedingungen erfüllt sind.if (reset) $display("Reset asserted at %0t", $time);
Unterschied zwischen $display und $write
$display fügt am Ende der Ausgabe automatisch einen Zeilenumbruch ein. $write hingegen setzt die Ausgabe fort, ohne einen Zeilenumbruch hinzuzufügen.
Beispiel:
$display("Hello");
$display("World");
Ausgabe:
Hello
World
$write("Hello");
$write("World");
Ausgabe:
HelloWorld
Wenn Sie klar strukturierte zeilenweise Logs benötigen, verwenden Sie $display. Möchten Sie mehrere Ausgaben in einer Zeile formatieren, nutzen Sie $write.
Vorsichtsmaßnahmen
- Vermeiden Sie übermäßige Ausgabe Wenn Sie
$displayin jedem Taktzyklus verwenden, werden die Protokolle groß und die Lesbarkeit sinkt. → Verwenden Sie Bedingungen, um die Ausgabe zu reduzieren. - Nutzen Sie die Zeitausgabe Die Ausgabe von
$timeoder$realtimeermöglicht es Ihnen, den Zeitpunkt von Vorgängen genau zu erfassen. - Nur für Simulation konzipierte Aufgabe
$displaykann nicht für die Synthese (FPGA/ASIC-Implementierung) verwendet werden. Es ist ausschließlich ein Debug‑Werkzeug für die Simulation.
3. Vergleich von Log‑Ausgabe‑System‑Tasks: $display, $write, $strobe, $monitor
Verilog bietet System‑Tasks über $display hinaus für die Ausgabe. Ihre unterschiedlichen Anwendungsfälle und Zeitpunkte machen es sinnvoll, zu verstehen, wie man sie gezielt einsetzt.
$display: Standard‑Anzeige‑Task
- Merkmale Fügt automatisch einen Zeilenumbruch hinzu und protokolliert pro Aufruf eine Zeile.
- Anwendungsfall Am häufigsten als einfache Debug‑Methode verwendet; Sie können ihn jederzeit für eine einmalige Ausgabe aufrufen.
$write: Anzeige ohne Zeilenumbruch
- Merkmale Fügt keinen Zeilenumbruch hinzu und setzt die Ausgabe daher in derselben Zeile fort.
- Anwendungsfall Nützlich, wenn Sie mehrere Werte nebeneinander anzeigen möchten.
- Beispiel
$write("A=%d, ", a); $write("B=%dn", b);→ Ausgabe:A=5, B=10.
$strobe: Ausgabe am Ende des Simulationszyklus
- Merkmale Gibt Werte aus, nachdem alle Simulationsauswertungen im aktuellen Schritt abgeschlossen sind.
- Anwendungsfall Hilfreich, um Rennbedingungen zu vermeiden (wenn mehrere Signale gleichzeitig wechseln).
- Beispiel
$strobe("Time=%0t, signal=%b", $time, sig);→ Während$displayZwischenwerte zeigen kann, zeigt$strobestabile Werte.
$monitor: Automatische Verfolgungs‑Ausgabe
- Merkmale Gibt automatisch aus, wenn sich ein überwachtes Signal ändert.
- Anwendungsfall Praktisch, wenn Sie ein Set von Signalen kontinuierlich überwachen möchten.
- Beispiel
$monitor("At %0t: a=%b, b=%b", $time, a, b);→ Protokolliert, wenn entwederaoderbsich ändert.
Zusammenfassungstabelle
| Task | Zeilenumbruch | Zeitpunkt der Ausgabe | Hauptanwendungsfall |
|---|---|---|---|
$display | Ja | Bei Aufruf | Grundlegende Protokollausgabe |
$write | Nein | Bei Aufruf | Nebeneinander‑Formatierung |
$strobe | Ja | Nach Ende des Simulationszyklus | Stabile Werte prüfen |
$monitor | Ja | Automatisch bei Signaländerung | Kontinuierliche Überwachung |
Tipps für effektive Nutzung
- Verwenden Sie
$displaystandardmäßig: Lesbar und einfach für Anfänger. - Verwenden Sie
$write, wenn Sie eine einzeilige kombinierte Ausgabe wünschen. - Verwenden Sie
$strobe, wenn Sie nach Änderungen stabile Werte benötigen. - Verwenden Sie
$monitor, wenn Sie eine kontinuierliche Signalüberwachung benötigen.
4. Format‑Spezifizierer und erweiterte Anzeige‑Techniken
Mit Tasks wie $display oder $write können Sie „Format‑Spezifizierer“ in Zeichenketten einbinden, um Signale oder Variablen in gewünschten Formaten auszugeben. Da sie C‑printf ähneln, verbessert die korrekte Verwendung je nach Zweck die Debug‑Effizienz erheblich.
Grundlegende Format‑Spezifizierer
| Spezifizierer | Beschreibung | Ausgabe‑Beispiel |
|---|---|---|
%b | binär | 1010 |
%d | dezimal | 10 |
%h | hexadezimal | A |
%o | oktal | 12 |
%c | ASCII‑Zeichen | A |
%s | Zeichenkette | Hello |
%t | Simulationszeit | #100 etc. |
%m | Modul‑Hierarchie‑Name | top.u1.u2 |
Praktische Beispiele
Signal in mehreren Formaten anzeigen
reg [7:0] data = 8'b10101010; $display("data = %b (bin), %d (dec), %h (hex)", data, data, data);→ Beispielausgabe:data = 10101010 (bin), 170 (dec), AA (hex)Modul‑Hierarchie prüfen
$display("Current module hierarchy is %m");→ Beispielausgabe:Current module hierarchy is top.u1.counterSimulationszeit anzeigen
$display("Time=%0t: clk=%b", $time, clk);→ Beispielausgabe:Time=100: clk=1
Erweiterte Anzeige‑Techniken
- Null‑Padding & Feldbreite Sie können Null‑Padding oder Feldbreite angeben, z. B.
%0d. Beispiel:$display("Count=%04d", count);→ Ausgabe:Count=0012 - Unterscheidung zwischen vorzeichenbehaftet und vorzeichenlos
%dbehandelt Werte als vorzeichenbehaftet,%uals vorzeichenlos. Wenn ein negativer Wert nicht wie erwartet angezeigt wird, passen Sie den Formatierer an. - Mehrzeilige Nachrichten formatieren Verwenden Sie
\n, um Zeilen für bessere Lesbarkeit zu trennen. Beispiel:$display("Start of test\nSignal A=%b\nSignal B=%b", A, B);
Vorsichtsmaßnahmen
- Beachten Sie die Bit‑Breite : Verilog‑Signale können unterschiedliche Breiten haben; die Verwendung von
%dkann zu Abschneidung oder Vorzeichen‑Erweiterungs‑Problemen führen. - Umgang mit undefinierten Werten (X, Z) : Wenn Sie undefinierte Bits einbinden, zeigt
%bxoderzdirekt an.
5. Praktische Beispiele: Verwendung von $display in Test‑Benches und Modulen
Im Folgenden stellen wir effektive Einsatzmöglichkeiten von $display anhand von realen Verilog‑Code‑Beispielen vor, von den Grundlagen der Test‑Benches bis hin zu bedingtem Debug‑Logging.
Einfaches Beispiel: Ausgabe in einem Test‑Bench
Durch Einfügen von $display in einen Test‑Bench können Sie das Verhalten während der Simulation beobachten.
module tb_counter;
reg clk;
reg reset;
wire [3:0] count;
// DUT (Device Under Test)
counter uut (
.clk(clk),
.reset(reset),
.count(count)
);
// Clock generation
initial begin
clk = 0;
forever #5 clk = ~clk; // invert every 5 units
end
// Test scenario
initial begin
reset = 1;
#10 reset = 0;
#50 $finish;
end
// Display state
always @(posedge clk) begin
$display("Time=%0t | reset=%b | count=%d", $time, reset, count);
end
endmodule
In diesem Beispiel löst jeder steigende Takt die Ausgabe von reset und count aus. Da Sie sowohl Text‑Logs als auch Wellenformen inspizieren können, wird das Verfolgen des Verhaltens einfacher.
Bedingtes Anzeige‑Beispiel
Durch Kombination mit if‑Anweisungen können Sie nur dann protokollieren, wenn bestimmte Bedingungen erfüllt sind.
always @(posedge clk) begin
if (count == 4'd10) begin
$display("Count has reached 10 (Time=%0t)", $time);
end
end
→ So vermeiden Sie überflüssige Logs und können die für Sie relevanten Ereignisse gezielt erfassen.
Debug‑Nachrichten‑Beispiel
Beim Design‑Debugging ist es effektiv, zu erfassen, wenn ein Signal in einen „unerwarteten Zustand“ wechselt.
always @(posedge clk) begin
if (count > 4'd12) begin
$display("WARNING: count overflow detected! Time=%0t, value=%d", $time, count);
end
end
→ So können Sie Design‑Fehler oder unerwartetes Simulationsverhalten schnell entdecken.
Mehrere Signale gemeinsam überwachen
Wenn viele Signale ausgegeben werden, macht das Zusammenfassen in einer Zeile mittels $display die Logs lesbarer.
$display("Time=%0t | clk=%b | reset=%b | A=%h | B=%h | SUM=%h",
$time, clk, reset, A, B, SUM);

Zusammenfassung praktischer Tipps
- Platzieren Sie
$displayim Test‑Bench, um den Fortschritt zu visualisieren - Verwenden Sie bedingte Verzweigungen, um Logs zu verfeinern
- Erzeugen Sie Warnmeldungen, um Anomalien zu erkennen
- Fassen Sie mehrere Signale in einer Zeile zusammen, um die Lesbarkeit zu erhöhen
6. Display‑Steuerungs‑Anwendungen (Pixel‑/Text‑/Bild‑Anzeige)
Bisher haben wir $display für Simulations‑Logs vorgestellt. Gleichzeitig wird Verilog auch häufig für die „Display‑Steuerung“ in Hardware‑Implementierungen (LCD, VGA, HDMI‑Ausgabe) verwendet. In diesem Abschnitt geben wir einen kurzen Überblick, wie man Bildschirmanzeigen auf Hardware‑Ebene realisiert.
Grundkonzept der Display‑Steuerung
Um Text oder Bilder auf einem Bildschirm anzuzeigen, muss man Videosignale erzeugen, nicht nur $display verwenden. Typische Steuer‑Signale sind:
- HSYNC (Horizontal Sync) : Signal, das das Ende jeder Zeile markiert
- VSYNC (Vertical Sync) : Signal, das das Ende jedes Bildes markiert
- RGB‑Daten : Signal, das die Farbe jedes Pixels repräsentiert (z. B. 8 Bit × 3 = 24‑Bit‑Farbe)
In Verilog steuern Sie diese Signale über Zähler und Zustandsmaschinen und geben sie zeitlich gesteuert aus, um die „Bildschirmanzeige“ zu realisieren.
Beispiel 1: Anzeige von Farb‑Balken
Das grundlegendste Beispiel ist das horizontale Ausgeben von Farbbalken auf einem Display.
always @(posedge clk) begin
if (h_counter < 100) rgb <= 24'hFF0000; // red
else if (h_counter < 200) rgb <= 24'h00FF00; // green
else if (h_counter < 300) rgb <= 24'h0000FF; // blue
else rgb <= 24'h000000; // black
end
→ Dies ergibt rote, grüne und blaue Farbbalken, die horizontal über den Bildschirm ausgerichtet sind.
Beispiel 2: Textanzeige
Für die Textanzeige bereiten Sie ein Font‑ROM vor und wandeln das Punktmuster jedes Zeichens in Pixel um.
// Referencing the pattern of 'A' from the font ROM and displaying
if (font_rom[char_code][y][x] == 1'b1)
rgb <= 24'hFFFFFF; // white for display
else
rgb <= 24'h000000; // black background
→ Dies zeichnet ein bestimmtes Zeichen (z. B. „A“) auf dem Bildschirm.
Beispiel 3: Bildanzeige
Um ein Bild anzuzeigen, lesen Sie vorab gespeicherte Bitmap‑Daten (ROM oder externer Speicher) und wandeln diese in Pixelausgabe um.
rgb <= image_rom[addr]; // Retrieve color data from ROM
In eingebetteten Systemen mit FPGAs ermöglicht diese Methode das Anzeigen einfacher Symbole oder Logos.
Unterschied im Vergleich zu Debug‑$display
$displayist Textausgabe (nur Simulation)- Anzeige‑Steuerung ist Video‑Signal‑Erzeugung (hardware‑implementierbar)
Obwohl ihre Zwecke unterschiedlich sind, verwechseln Lernende von Verilog oft beide.
- „Ich möchte das Verhalten während der Simulation überprüfen“ → Verwende
$display - „Ich möchte die Ausgabe auf einen echten Bildschirm auf dem FPGA“ → Entwerfe Video‑Signal‑Logik
Erweiterung der Anwendungen
- Beim Erlernen von FPGA‑Boards wird Verilog häufig für 7‑Segment‑LED‑Anzeige oder kleine LCD‑Anzeige verwendet.
- Wenn man weiterkommt, kann man Systeme bauen, die VGA/HDMI‑Ausgabe für Spieleentwicklung oder GUI‑Anzeige unterstützen.
- Durch die Kombination von
$display‑Kenntnissen mit Anzeige‑Steuer‑Logik kann man „Anzeige“ sowohl in der Simulation als auch in echter Hardware handhaben.
7. Geeignete Verwendung und Tipps basierend auf Anwendungsszenarien
Wenn wir in Verilog von „Anzeige“ sprechen, gibt es zwei Aspekte: die nur‑Simulation $display‑Aufgaben und die Hardware‑Implementierungs‑Anzeige‑Steuerung. Die jeweils passende Verwendung führt zu effizienter Entwicklung und Fehlersuche.
Verwendung in der Simulation
$displayals Debug‑Log- Geben Sie kritische Variablen oder Signale mit
$displayaus, um zu prüfen, ob Ihr Design wie erwartet funktioniert. - Das Verifizieren von „Werten unter bestimmten Bedingungen“ oder „Zähler‑Erreichen‑Punkten“ über Logs ist effizient.
- Geben Sie kritische Variablen oder Signale mit
- Vermeiden Sie übermäßige Ausgaben
- Das Ausgeben bei jedem Taktzyklus überflutet die Logs und verringert die Lesbarkeit. Beschränken Sie die Bedingungen.
- Beispiel:
if (state == ERROR) $display("Error occured at %0t", $time);
- Unterscheiden Sie zwischen Aufgaben
$monitor→ Für Signale, die Sie kontinuierlich beobachten möchten$strobe→ Wenn Sie gesättigte Werte ausgeben müssen$write→ Für formatierte horizontale Ausgabe
Verwendung in der Hardware‑Anzeige‑Steuerung
- 7‑Segment‑Anzeige zum Lernen
- In FPGA‑Einsteigerprojekten ist das Anzeigen eines Zählerwertes auf einer 7‑Segment‑LED Standard.
- Kombinieren Sie dies mit der
$display‑Simulationausgabe, um das Verständnis von Anzeige vs. Simulation zu vertiefen.
- LCD‑ oder VGA‑Monitor‑Steuerung
- Verwenden Sie Font‑ROM oder Image‑ROM, um Text oder Bild anzuzeigen.
- Durch gleichzeitige Nutzung von
$displayin der Simulation können Sie die Korrektheit der Video‑Signal‑Erzeugung doppelt prüfen.
- Debug‑Overlay in der Hardware
- Sie können „Zählerwert“, „Koordinaten“, „Debug‑Nachrichten“ als Overlay auf der tatsächlichen Videoausgabe darstellen.
- In der FPGA‑Entwicklung ist es üblich, den Bildschirm selbst zu einem Debug‑Werkzeug zu machen.
Praktische Tipps
- Simulation → Hardware‑Fluss folgen Verwenden Sie zuerst
$display, um das Verhalten in der Simulation zu überprüfen, und wechseln Sie dann zur Anzeige‑Steuerlogik für die Hardware‑Implementierung. - Protokolle und Wellenformen gemeinsam nutzen Textprotokolle von
$displayzeigen den „Zeitpunkt des Ereignisses“ an, während Wellenformen die „detaillierten Übergänge“ darstellen. Die Kombination beider erhöht die Debug‑Präzision. - Nachrichtenformat im Team vereinheitlichen Die Standardisierung des
$display‑Nachrichtenformats (Präfix, Zeitanzeige usw.) erleichtert die Protokollanalyse, wenn mehrere Personen zusammenarbeiten.
Zusammenfassung
$display‑Aufgaben sind rein simulations‑„Beobachtungswerkzeuge“- Anzeige‑Steuerung bedeutet Hardware‑Implementierung „Anzeigemethode“
- Durch geeignete Nutzung und Kombination beider können Sie eine effiziente Entwicklung ermöglichen
8. FAQ (Häufig gestellte Fragen)
Q1. Was ist der Unterschied zwischen $display und $monitor?
A. $display gibt einmal zum Zeitpunkt des Aufrufs aus. Im Gegensatz dazu gibt $monitor automatisch aus, sobald sich ein registriertes Signal ändert.
- Für einmaliges Debugging →
$display - Für kontinuierliche Überwachung →
$monitor
Q2. Wann sollte ich $strobe verwenden?
A. $strobe gibt den stabilisierten Wert am Ende eines Simulationszyklus aus. Zum Beispiel kann $display bei gleichzeitig wechselnden Signalen an einer Taktflanke Zwischenwerte zeigen. In solchen Fällen ist $strobe praktisch, um die Endwerte anzuzeigen.
Q3. Wofür dient der Formatbezeichner %m?
A. %m gibt den aktuellen Modul‑Hierarchienamen aus. In großen Designs erleichtert das Protokollieren, „aus welcher Hierarchie die Nachricht stammt“, die Analyse erheblich.
$display("Current module: %m");
Beispielausgabe:
Current module: top.u1.counter
Q4. Meine Protokolle wurden riesig, weil ich viele $display verwendet habe. Was soll ich tun?
A. Die folgenden Maßnahmen sind wirksam:
- Verwenden Sie
if‑Anweisungen, um die Ausgabe zu filtern - Geben Sie nur Fehlermeldungen oder bestimmte Ereignisse aus
- Nutzen Sie
$monitor, um nur die unbedingt erforderlichen Signale zu beobachten - Schreiben Sie in eine Logdatei und wenden Sie während der Analyse Filterwerkzeuge an
Q5. Kann $display für die Synthese (FPGA/ASIC) verwendet werden?
A. Nein. $display ist ausschließlich eine Simulation‑Aufgabe. Synthese‑Tools ignorieren sie, sodass sie in der realen Hardware nicht erscheint. Wenn Sie Ausgaben auf echter Hardware anzeigen möchten, müssen Sie in Verilog mit „7‑Segment‑LED“, „LCD“, „VGA‑Steuerlogik“ usw. entwerfen.
Q6. Wie kann ich Text oder Bilder auf echter Hardware anzeigen?
A. Nicht über $display, sondern durch Erzeugen von Videosignalen.
- 7‑Segment‑Anzeige → Für einfache numerische oder Zeichenanzeige
- VGA/LCD → Erzeugt HSYNC-, VSYNC‑ und RGB‑Signale und steuert sie
- Text → Verwenden Sie eine Font‑ROM und geben Sie Punktmuster aus
- Bilder → Speichern Sie Bitmaps in ROM oder externem Speicher und geben Sie die Pixel entsprechend aus
9. Fazit & nächste Schritte
Zusammenfassung dieses Artikels
In diesem Artikel haben wir das „display“ in Verilog von den Grundlagen bis zu Anwendungen behandelt. Wichtige Punkte waren:
- Grundlagen von
$display- Eine Simulationsaufgabe, die Signale oder Variablen anzeigt, ähnlich wie C’s
printf.
- Eine Simulationsaufgabe, die Signale oder Variablen anzeigt, ähnlich wie C’s
- Unterschiede zu verwandten Aufgaben
$write→ Anzeige ohne Zeilenumbruch$strobe→ Gibt am Ende eines Simulationszyklus stabilisierte Werte aus$monitor→ Überwacht Signaländerungen automatisch
- Verwendung von Formatbezeichnern
- Durch die Verwendung von
%b,%d,%h,%m,%tkönnen Sie klarere und praktischere Protokolle ausgeben.
- Durch die Verwendung von
- Praktische Beispiele
$displayin Testbenches einfügen, um den Fortschritt zu überwachen.- Bedingte Nachrichten verwenden, um effizientes Debugging zu ermöglichen.
- Anwendungen in der Anzeige‑Steuerung
$displayist nur für die Simulation; die Hardware‑Implementierung nutzt HSYNC, VSYNC, RGB, um Text/Bild auszugeben.- Von der 7‑Segment‑Anzeige bis zur fortgeschrittenen VGA/HDMI‑Steuerung sind Erweiterungen möglich.
Nächste Schritte
- Weiter zu SystemVerilog → In der Nachfolgersprache SystemVerilog können Sie fortgeschrittenere Debug‑Funktionen nutzen (Assertions, erweiterte
$display, usw.). - Kombinieren mit Wellenformanzeige → Durch die Kombination von
$display‑Logs und Wellenformdaten können Sie sowohl numerische Werte als auch Übergänge analysieren und so die Debug‑Präzision steigern. - Hardware‑Anzeigeausgabe lernen → In einem kleinen FPGA‑Board‑Projekt versuchen Sie, Ausgaben auf einem 7‑Segment‑Display oder LCD zu erzeugen, um den Unterschied zwischen „Simulationsanzeige“ und „Hardware‑Anzeige‑Steuerung“ zu erleben.
- In der Team‑Entwicklung anwenden → Durch die Standardisierung des
$display‑Nachrichtenformats verbessern Sie die Effizienz der Log‑Analyse in der Mehrpersonen‑Entwicklung.
Zum Abschluss
$display ist mehr als reine „Textausgabe“. Es ist ein leistungsfähiges Werkzeug für das Simulations‑Debugging. Und wenn Sie in die Welt der Anzeige‑steuerung eintauchen, können Sie die Freude erleben, Grafiken auf echten Monitoren via FPGA zu zeigen.
Ich hoffe, dieser Artikel hilft Verilog‑Lernenden, sowohl das „Simulations‑Debugging“ als auch die „Hardware‑Anzeigeausgabe“ klar zu verstehen.

