Sensitivitätsliste
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 48 von 90.
Die Sensitivitätsliste sagt dem always-Block, wann er ausgeführt wird. Sie wird in Klammern nach dem @-Symbol geschrieben.
Die Sensitivity-Liste (Empfindlichkeitsliste) ist eine Reihe 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 der Sensitivity List
| Typ | Syntax | When Block Executes |
|---|---|---|
| Alle signals (combinational) | always @(*) | When jedes Signal darin changes |
| Spezifische signals | always @(a or b) | When a oder b changes |
| edge Trigger (sequential) | always @(posedge clk) | Bei rising edge des clock |
| Mehrere edges | always @(posedge clk or posedge reset) | Bei clock edge oder reset edge |
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 ändern
endDas * fügt automatisch alle Signale hinzu, die in dem Block gelesen werden.
Option 2: Spezifische Signale
always @(a or b) begin
out = a & b; // Läuft, wenn a oder b sich ändern
endWenn Sie ein Signal vergessen, wird der Ausgang in der Simulation nicht aktualisiert, wenn sich dieses Signal ändert — sodass die Simulation nicht mehr mit der synthetisierten Hardware übereinstimmt.
Option 3: Edge Trigger (posedge)
always @(posedge clk) begin
q <= d; // Läuft bei steigender Taktflanke
endVerwenden Sie posedge für die steigende Flanke (rising edge), 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 Taktflanke oder Reset-Flanke ausgeführt.
Häufige Fehler
| Fehler | Warum falsch |
|---|---|
always @(a or b or c) verwendet aber d | Fehlendes d → Ausgang veraltet in der Simulation (Sim/Synth-Abweichung) |
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 richtige Sensitivitätsliste hinzu, damit dieser 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. 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