Menu
Coddy logo textTech

Sensitivity List

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 48 von 90.

Die Sensitivitätsliste teilt dem always-Block mit, when er ausgeführt werden soll. Sie wird innerhalb von Klammern nach dem Symbol @ geschrieben.

Die list ist eine Menge von signals oder Ereignissen, die den always-Block auslösen. Wenn signals in der list changes, wird der Block executes.

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 Signal darin changes
Spezifische signalsalways @(a or b)Wenn sich a oder b changes
Flankentrigger (sequentiell)always @(posedge clk)An der rising edge der clock
Mehrere Flankenalways @(posedge clk or posedge reset)An der clock edge oder reset edge

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 signals 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 Taktflanke
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

Runs bei clock edge oder reset edge.

Häufige Fehler

FehlerWarum falsch
always @(a or b or c), verwendet aber dd fehlt → output bleibt in der Simulation veraltet (Abweichung zwischen Simulation und Synthese)
always @(posedge clk or reset)posedge für 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 sensitivity list hinzu, damit dieses flip-flop 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