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
endArten von Sensitivitätslisten
| Typ | Syntax | Wann der Block ausgeführt wird |
|---|---|---|
| Alle Signale (kombinatorisch) | always @(*) | Wenn sich ein beliebiges Signal darin changes |
| Spezifische signals | always @(a or b) | Wenn sich a oder b changes |
| Flankentrigger (sequentiell) | always @(posedge clk) | An der rising edge der clock |
| Mehrere Flanken | always @(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
endDas * 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
endWenn 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
endVerwende 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;
endRuns bei clock edge oder reset edge.
Häufige Fehler
| Fehler | Warum falsch |
|---|---|
always @(a or b or c), verwendet aber d | d 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 |
Aufgabe
Was zu tun ist:
- Füge die richtige sensitivity list hinzu, damit dieses flip-flop 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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler