Menu
Coddy logo textTech

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
end

Arten von Sensitivity-Listen

TypSyntaxWann der Block ausgeführt wird
Alle Signale (kombinatorisch)always @(*)Wenn sich ein beliebiges Signal darin ändert
Spezifische Signalealways @(a or b)Wenn sich a oder b ändert
Flankentriggerung (sequenziell)always @(posedge clk)Bei steigender Taktflanke
Mehrere Flankenalways @(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
end

Das * 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
end

Wenn 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
end

Verwenden 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;
end

Wird bei der Taktflanke oder der Reset-Flanke ausgeführt.

Häufige Fehler

FehlerWarum falsch
always @(a or b or c), verwendet aber dFehlendes d → Latch
always @(posedge clk or reset)Fehlendes posedge für reset
always @(clk)Sollte posedge clk für Flip-Flops verwenden
challenge icon

Aufgabe

Was zu tun ist:

  1. Füge die korrekte Sensitivity-Liste hinzu, damit dieses Flip-Flop funktioniert. Der Block soll bei der steigenden Flanke von clk ausgefü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
TypSyntaxAuslösung bei
Alle Signalealways @(*)Jedes gelesene Signal ändert sich
Spezifische Signalealways @(a or b)a oder b ändert sich
Steigende Flankealways @(posedge clk)Steigende Flanke von clk
Mehrere Flankenalways @(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;
end

Hä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

endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen