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.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Un registre stocke la fonction d'état suivant
Notons la valeur avant le front, l'entrée adoptée au front et 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 :
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.
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
endmoduleCe 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.
Voir les données du chronogramme
| Signal | Forme d'onde | Valeurs du bus |
|---|---|---|
| edge | 2345 | E0 → E1 → E2 → E3 |
| reset | 0.10 | |
| enable | 01.0 | |
| D | 2.34 | 3C → 99 → 77 |
| Q après | 234. | 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.