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 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 Sensitivitätslisten

TypSyntaxWann der Block ausgeführt wird
Alle Signale (kombinatorisch)always @(*)Wenn sich ein beliebiges darin enthaltenes Signal ändert
Bestimmte Signalealways @(a or b)Wenn sich a oder b ändert
Flankentrigger (sequentiell)always @(posedge clk)Bei der steigenden Flanke des Takts
Mehrere Flankenalways @(posedge clk or posedge reset)Bei der Taktflanke oder der Reset-Flanke

Option 1: Alle Signale (*)

Die sicherste und gebräuchlichste Variante für kombinatorische Logik.

always @(*) begin
  out = a & b;   // Läuft, wenn sich a oder b ändert
end

Das * schließt automatisch alle im Block gelesenen Signale ein.

Option 2: Spezifische Signale

always @(a or b) begin
  out = a & b;   // Läuft, wenn sich a oder b ändert
end

Wenn du ein Signal vergisst, wird die Ausgabe in der Simulation nicht aktualisiert, wenn sich dieses Signal ändert, sodass die Simulation nicht mehr mit der synthetisierten Hardware übereinstimmt.

Option 3: Flankentrigger (posedge)

always @(posedge clk) begin
  q <= d;        // Läuft bei steigender Flanke des Takts
end

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

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

Häufige Fehler

FehlerWarum falsch
always @(a or b or c), verwendet aber dd fehlt → die Ausgabe bleibt in der Simulation veraltet (Simulations-/Syntheseabweichung)
always @(posedge clk or reset)posedge für den Reset fehlt
always @(clk)Für Flip-Flops sollte posedge clk verwendet werden
challenge icon

Aufgabe

Was zu tun ist:

  1. Füge die richtige Sensitivitätsliste hinzu, damit dieses Flipflop funktioniert. Der Block sollte bei der steigenden Flanke von clk ausgeführt werden.

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

Übe selbstständig: Online-Verilog-Compiler