Menu
Coddy logo textTech

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
end

Types de liste de sensibilité

TypeSyntaxeQuand le bloc Executes
Tous les signals (combinatoire)always @(*)Quand n’importe quel signal interne changes
signals spécifiquesalways @(a or b)Quand a ou b changes
Déclenchement sur edge (séquentiel)always @(posedge clk)Sur le edge rising de clock
Edges multiplesalways @(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
end

Le * 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
end

Si 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
end

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

Runs sur le front de clock ou le front de reset.

Erreurs courantes

ErreurPourquoi c’est incorrect
always @(a or b or c) mais utilise dd 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
challenge icon

Défi

À faire :

  1. 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

endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux

Entraînez-vous par vous-même : Compilateur Verilog en ligne