Samples sammeln
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 31 von 38.
Erstelle einen wiederverwendbaren Monitor für einen Datenstrom vorzeichenloser Abtastwerte. Du sammelst Werte, berücksichtigst die Steuerungen zum Aktivieren und Löschen, zählst angenommene Abtastwerte und meldest, ob ein Schwellenwert erreicht wurde. Alle fünf Schritte behalten dieselbe Modulschnittstelle und die unveränderte Testbench bei. Reservierte Ausgänge erhalten in späteren Schritten ihr Verhalten.
Aufgabe
SchwerErstelle einen Sample Monitor in fünf Schritten. Bei jeder steigenden Flanke löscht das synchrone rst total; andernfalls wird unsigned data zu total addiert. Verwende das 16-Bit-total-Register. In diesem ersten Schritt werden en und clear nicht verwendet, und die Szenarien behalten en=1 und clear=0 bei. count und alarm sind reservierte Ausgänge, die auf null bleiben. Alle Eingabewerte sind bekannt. Die Szenarien enthalten höchstens 40 Flanken, sodass total in 16 Bit passt. Die feste Testbench gibt total für die Szenarien 1–9, total und count für die Szenarien 10–12 sowie total, count und alarm für die Szenarien 13–15 aus. Nur die für diesen Schritt aktivierten Szenarien werden bewertet.
Vervollständige design.v und bewahre seine Modulnamen und Ports. Die gesperrte testbench.v liefert Eingangsänderungen und gibt die Ausgänge aus, nachdem sie sich stabilisiert haben. Sie wählt ein Szenario mithilfe eines Simulatorarguments wie +CASE=1; eine Standardeingabe ist nicht erforderlich. Füge dem Design keine Ausgaben, Verzögerungen oder die Beendigung der Simulation hinzu. Die erwartete Ausgabe besteht aus einer Zeile mit Dezimalwerten pro Beobachtung, durch jeweils ein Leerzeichen getrennt und mit einem Zeilenumbruch abgeschlossen.
Probier es selbst
module dut(input clk,rst,en,clear, input [7:0] data, input [15:0] limit, output reg [15:0] total, output reg [3:0] count, output alarm);
initial begin total=0;count=0;end
assign alarm=0;
endmoduleAlle Lektionen in RTL-Design und Verifikation
1Zuverlässige kombinatorische RTL
Standardwerte verhindern LatchesPrioritätsencoderOne-Hot-ValidierungSichere Case-DekodierungRückblick – Request-Router4Kontrolliertes sequentielles RTL
Priorität von Reset und EnableSättigungszählerPipelining von Daten und ValidErkennen abgetasteter FlankenRückblick – Ereigniszähler7Projekt – Beispielmonitor
Samples sammelnAktivierte Samples akzeptieren2Bitbreiten und vorzeichenbehaftete Arithmetik
Übertragsbits bewahrenVorzeichenbehaftete VergleicheArithmetische RechtsschiebungenÜberlauf und SättigungRückblick – vorzeichenbehaftete Differenz5Speicher und Nachschlagetabellen
Kombinatorische ROM-TabellenSpeicherung in Register-ArraysRegistrierte LeseportsRead-Write-WeiterleitungRückblick – Bank mit zwei Leseports8Abschließende Herausforderungen
Herausforderung – Paritäts-PipelineHerausforderung – MusterereignisseHerausforderung – Begrenzte SummeÜbe selbstständig: Online-Verilog-Compiler