Sensitivitätsliste
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 48 von 90.
Die Sensitivitätsliste gibt dem always-Block an, wann er ausgeführt werden soll. Sie wird in Klammern nach dem @-Symbol geschrieben.
Die Sensitivitätsliste ist eine Menge von Signalen oder Ereignissen, die den always-Block auslösen. Wenn sich ein Signal in der Liste ändert, wird der Block ausgeführt.
Syntax:
always @(sensitivity_list) begin
// Der Code wird ausgeführt, wenn sich Signale in der Liste ändern
endArten von Sensitivitätslisten
| Typ | Syntax | Wann der Block ausgeführt wird |
|---|---|---|
| Alle Signale (kombinatorisch) | always @(*) | Wenn sich ein beliebiges Signal darin ändert |
| Bestimmte Signale | always @(a or b) | Wenn sich a oder b ändert |
| Flankenauslösung (sequentiell) | always @(posedge clk) | Bei einer steigenden Taktflanke |
| Mehrere Flanken | always @(posedge clk or posedge reset) | Bei einer Taktflanke oder einer Resetflanke |
Option 1: Alle Signale (*)
Am sichersten und gebräuchlichsten für kombinatorische Logik.
always @(*) begin
out = a & b; // Wird ausgeführt, wenn sich a oder b ändert
end* schließt automatisch alle Signale ein, die im Block gelesen werden.
Option 2: Spezifische Signale
always @(a or b) begin
out = a & b; // Wird ausgeführt, wenn sich a oder b ändert
endWenn du ein Signal vergisst, wird die Ausgabe in der Simulation nicht aktualisiert, wenn sich dieses Signal ändert. Daher entspricht die Simulation nicht mehr der synthetisierten Hardware.
Option 3: Flankenauslösung (posedge)
always @(posedge clk) begin
q <= d; // Wird bei der steigenden Taktflanke ausgeführt
endVerwende posedge für die steigende Flanke und negedge für die fallende Flanke.
Option 4: Mehrere Flanken
always @(posedge clk or posedge reset) begin
if (reset)
q <= 0;
else
q <= d;
endWird bei einer Taktflanke oder einer Rücksetzflanke ausgeführt.
Häufige Fehler
| Fehler | Warum falsch |
|---|---|
always @(a or b or c), aber verwendet d | d fehlt → der Ausgabewert ist in der Simulation veraltet (Abweichung zwischen Simulation und Synthese) |
always @(posedge clk or reset) | Für reset fehlt posedge |
always @(clk) | Für Flipflops sollte posedge clk verwendet werden |
Aufgabe
Was zu tun ist:
- Füge die richtige Sensitivitätsliste hinzu, damit dieses Flipflop funktioniert. Der Block sollte bei der steigenden Flanke von
clkausgeführt werden.
Probier es selbst
module flipflop (
input clk,
input d,
output reg q
);
always @(______) begin
q <= d;
end
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellen9Prozedurale Blöcke
Always-BlockInitial-BlockSensitivitätslisteBlockierende ZuweisungNicht blockierende ZuweisungZusammenfassung – Always vs. InitialÜbe selbstständig: Online-Verilog-Compiler