Menu
CoddyTech

Sensitivitätsliste

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

Die Sensitivitätsliste gibt dem always-Block an, 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
  // Der 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 ändert
Bestimmte Signalealways @(a or b)Wenn sich a oder b ändert
Flankenauslösung (sequentiell)always @(posedge clk)Bei einer steigenden Taktflanke
Mehrere Flankenalways @(posedge clk or posedge reset)Bei einer Taktflanke oder einer Resetflanke

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 ändert
end

* 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 du ein Signal vergisst, wird die Ausgabe in der Simulation nicht aktualisiert, wenn sich dieses Signal ändert. Daher entspricht die Simulation nicht mehr der synthetisierten Hardware.

Option 3: Flankenauslösung (posedge)

always @(posedge clk) begin
  q <= d;        // Wird bei der steigenden Taktflanke ausgeführt
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 Rücksetzflanke ausgeführt.

Häufige Fehler

FehlerWarum falsch
always @(a or b or c), aber verwendet dd fehlt → der Ausgabewert ist in der Simulation veraltet (Abweichung zwischen Simulation und Synthese)
always @(posedge clk or reset)Für reset fehlt posedge
always @(clk)Für Flipflops 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