Altifigence Academy

14 / 37 · Concept

Bascules, enable et priorité des commandes

Définir maintien, chargement et reset par l'état suivant, et éviter un clock gating involontaire.

Un registre stocke la fonction d'état suivant

Notons QkQ_k la valeur avant le front, DkD_k l'entrée adoptée au front et Qk+1Q_{k+1} la valeur après mise à jour. Un registreRegistre Circuit stockant plusieurs bits d'état. Les registres synchrones du cours capturent leur entrée définie sur un front d'horloge. En savoir plus où reset précède enable se définit ainsi :

Qk+1={0rk=1Dkrk=0, ek=1Qkrk=0, ek=0Q_{k+1}=\begin{cases} 0 & r_k=1\\ D_k & r_k=0,\ e_k=1\\ Q_k & r_k=0,\ e_k=0 \end{cases}

Lorsque enable=0, la valeur stockée reste identique même si D change. Omettre ce chemin de maintien dans un bloc séquentiel diffère d'une affectation oubliée dans un bloc combinatoire : le maintien séquentiel fait partie du contrat du registre.

SystemVerilog
module enabled_register (
  input logic clk, rst, en,
  input logic [7:0] d,
  output logic [7:0] q
);
  always_ff @(posedge clk) begin
    if (rst) q <= 8'b0;
    else if (en) q <= d;
  end
endmodule

Ce reset est synchrone et actif à l'état haut. Si reset=enable=1 au front, 0 est stocké. Inverser leur ordre change la fonction : exprimez la priorité dans le code et les tests, pas seulement dans un commentaire.

Chaque colonne représente un front montantFront montant Instant où l'horloge passe de 0 à 1, distinct du niveau désignant tout l'intervalle CLK=1. En savoir plus. Les entrées sont celles d'avant le front ; les états suffixés after sont ceux d'après mise à jour. L'alignement montre l'ordre des échantillons, pas un retard physique de propagationRetard de propagation Temps nécessaire après un changement d'entrée pour que la sortie se stabilise à sa valeur correcte. Équivalence logique et caractéristiques temporelles sont distinctes. En savoir plus. Q commence à 0xA5 : première colonne, maintien ; deuxième, écriture ; troisième, collision reset/enable.

Priorité reset, enable, maintien
Voir les données du chronogramme
Données du chronogramme : chaque caractère représente un intervalle ; un point maintient l'état précédent ; p représente un cycle d'horloge.
SignalForme d'ondeValeurs du bus
edge2345E0 → E1 → E2 → E3
reset0.10
enable01.0
D2.343C → 99 → 77
Q après234.A5 → 3C → 00

Enable ne consiste pas à couper directement l'horloge

Employer arbitrairement gated_clk = clk & en comme horloge permet aux changements de en de créer des impulsions courtes ou des fronts imprévus. Le choix des cellules réalisant le clock enable appartient au flot de synthèse et d'implémentation. Le clock gating pour économiser l'énergie exige une conception distincte, des cellules adaptées et une vérification temporelle.

Les priorités se révèlent lorsque reset, load et enable se chevauchent. Activer chaque commande seule ne suffit pas. Avec q=A5, en=0 et d=3C, q doit rester inchangé ; au front suivant avec en=1, il doit stocker 3C.

Essayez vous-même

Avec q=0xA5, appliquez un front avec rst=1, en=1, d=0x3C, puis un autre avec rst=0, en=0. Que vaut q après chaque front ?

Lire l’explication

Au premier front, reset prioritaire impose 0. Au suivant, enable=0 conserve 0. Si reset était imbriqué sous en, un reset avec en=0 pourrait être manqué : testez aussi cette combinaison.

Votre choix s’applique à ce navigateur. Modifiez-le à tout moment en bas de page.