Sensitivity List
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 48 sur 90.
La liste de sensibilité indique au bloc always quand s’exécuter. Elle s’écrit entre parenthèses après le symbole @.
La sensitivity list est un ensemble de signals ou d’événements qui déclenchent le bloc always. When n’importe quel signal de la list changes, le bloc executes.
Syntaxe :
always @(sensitivity_list) begin
// Le code s'exécute lorsque les signaux de la liste changent
endTypes de liste de sensibilité
| Type | Syntaxe | Quand le bloc Executes |
|---|---|---|
| Tous les signals (combinatoire) | always @(*) | Quand n’importe quel signal interne changes |
| signals spécifiques | always @(a or b) | Quand a ou b changes |
| Déclenchement sur edge (séquentiel) | always @(posedge clk) | Sur le edge rising de clock |
| Edges multiples | always @(posedge clk or posedge reset) | Sur le edge de clock ou le edge de reset |
Option 1 : Tous les signaux (*)
La méthode la plus sûre et la plus courante pour la logique combinatoire.
always @(*) begin
out = a & b; // S'exécute lorsque a ou b changent
endLe * inclut automatiquement tous les signaux lus dans le bloc.
Option 2 : Signaux spécifiques
always @(a or b) begin
out = a & b; // S'exécute lorsque a ou b change
endSi vous oubliez un signal, l’output ne se met pas à jour lors d’un changement de ce signal dans la simulation, et la simulation ne correspond donc plus au matériel synthétisé.
Option 3 : Déclenchement sur front (posedge)
always @(posedge clk) begin
q <= d; // S'exécute sur le front montant de l'horloge
endUtilisez posedge pour le front montant, negedge pour le front descendant.
Option 4 : Bords multiples
always @(posedge clk or posedge reset) begin
if (reset)
q <= 0;
else
q <= d;
endRuns sur le front de clock ou le front de reset.
Erreurs courantes
| Erreur | Pourquoi c’est incorrect |
|---|---|
always @(a or b or c) mais utilise d | d manquant → output devient obsolète lors de la simulation (décalage sim/synth) |
always @(posedge clk or reset) | posedge manquant pour reset |
always @(clk) | Devrait utiliser posedge clk pour les flip-flops |
Défi
À faire :
- Ajoutez la liste de sensibilité correcte pour faire fonctionner cette bascule. Le bloc doit s’exécuter sur le front montant de
clk.
Essayez vous-même
module flipflop (
input clk,
input d,
output reg q
);
always @(______) begin
q <= d;
end
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu’est-ce que VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Operators 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 LogicEntraînez-vous par vous-même : Compilateur Verilog en ligne