Sensitivitätsliste
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 48 von 90.
Die Sensitivitätsliste teilt dem always-Block mit, 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 beliebiges Signal in der Liste ändert, wird der Block ausgeführt.
Syntax:
always @(sensitivity_list) begin
// Code wird ausgeführt, wenn sich Signale in der Liste ändern
endArten von Sensitivity-Listen
| Typ | Syntax | Wann der Block ausgeführt wird |
|---|---|---|
| Alle Signale (kombinatorisch) | always @(*) | Wenn sich ein beliebiges Signal darin ändert |
| Spezifische Signale | always @(a or b) | Wenn sich a oder b ändert |
| Flankentriggerung (sequenziell) | always @(posedge clk) | Bei steigender Taktflanke |
| Mehrere Flanken | always @(posedge clk or posedge reset) | Bei Taktflanke oder Reset-Flanke |
Option 1: Alle Signale (*)
Die sicherste und gebräuchlichste Methode für Kombinationslogik.
always @(*) begin
out = a & b; // Wird ausgeführt, wenn sich a oder b ändert
endDas * 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 Sie ein Signal vergessen, erhalten Sie ein Latch (unbeabsichtigter Speicher).
Option 3: Flankensteuerung (posedge)
always @(posedge clk) begin
q <= d; // Wird bei steigender Taktflanke ausgeführt
endVerwenden Sie posedge für die steigende Flanke, 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 der Taktflanke oder der Reset-Flanke ausgeführt.
Häufige Fehler
| Fehler | Warum falsch |
|---|---|
always @(a or b or c), verwendet aber d | Fehlendes d → Latch |
always @(posedge clk or reset) | Fehlendes posedge für reset |
always @(clk) | Sollte posedge clk für Flip-Flops verwenden |
Aufgabe
Was zu tun ist:
- Füge die korrekte Sensitivity-Liste hinzu, damit dieses Flip-Flop funktioniert. Der Block soll bei der steigenden Flanke von
clkausgeführt werden.
Spickzettel
Die Sensitivity-Liste folgt auf @ und definiert, wann ein always-Block ausgeführt wird:
always @(sensitivity_list) begin
// wird ausgeführt, wenn sich die aufgeführten Signale ändern
end| Typ | Syntax | Auslösung bei |
|---|---|---|
| Alle Signale | always @(*) | Jedes gelesene Signal ändert sich |
| Spezifische Signale | always @(a or b) | a oder b ändert sich |
| Steigende Flanke | always @(posedge clk) | Steigende Flanke von clk |
| Mehrere Flanken | always @(posedge clk or posedge reset) | Eine der Flanken tritt auf |
Verwenden Sie @(*) für kombinatorische Logik; verwenden Sie posedge/negedge für sequentielle Logik:
// Kombinatorisch
always @(*) begin
out = a & b;
end
// Sequentiell (Flipflop mit asynchronem Reset)
always @(posedge clk or posedge reset) begin
if (reset) q <= 0;
else q <= d;
endHäufige Fehler: Das Fehlen eines Signals in einer spezifischen Liste verursacht ein Latch; das Schreiben von always @(clk) anstelle von always @(posedge clk) für Flipflops; das Weglassen von posedge vor reset in einer Liste mit mehreren Flanken.
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. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen9Prozedurale Blöcke
Always-BlockInitial-BlockSensitivitätslisteBlockierende ZuweisungNicht-blockierende ZuweisungZusammenfassung – Always vs. Initial