Priorité du reset et de l'activation
Fait partie de la section Conception et vérification RTL du Journey Verilog de Coddy. Leçon 16 sur 38.
Un bloc cadencé peut conserver un registre en omettant une affectation lors des fronts désactivés. Ce stockage intentionnel diffère d’un latch combinatoire accidentel. Écrivez une priorité explicite entre la réinitialisation, le chargement et l’activation. Ici, les réinitialisations sont synchrones : elles prennent effet uniquement au front montant de l’horloge.
Extrait pertinent : les déclarations et connexions environnantes sont fournies dans le défi.
always @(posedge clk) begin
if(rst) q <= 0;
else if(en) q <= data;
endLa réinitialisation est prioritaire lorsque les deux contrôles sont activés, et les fronts désactivés sans réinitialisation conservent q.
Utilisez une chaîne de priorités cadencée et définissez précisément le comportement de la réinitialisation, du chargement, de l’activation et du maintien.
Défi
MoyenImplémentez un registre 8 bits q avec une réinitialisation synchrone active à l’état haut rst et une activation en. Sur un front montant, la réinitialisation est prioritaire et remet q à zéro ; sinon, les fronts avec activation chargent a, tandis que les fronts sans activation conservent q. Colonne de sortie : q. Toutes les commandes et les données sont stables avant chaque front montant de l’horloge ; les résultats sont observés ensuite.
Complétez design.v et préservez les noms de module et les ports. Le testbench.v verrouillé fournit les changements d’entrée et affiche les sorties après leur stabilisation. Il choisit un scénario à l’aide d’un argument du simulateur tel que +CASE=1 ; aucune entrée standard n’est requise. N’ajoutez pas d’affichage, de délais ni de terminaison de simulation au design. La sortie attendue est une ligne de valeurs décimales par observation, séparées par un espace et se terminant par un retour à la ligne.
Essayez vous-même
module dut (input clk, input rst, input en, input [7:0] a, output reg [7:0] q);
// Remplacez ce placeholder par votre design.
initial q = 0;
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Conception et vérification RTL
1RTL combinatoire fiable
Les valeurs par défaut évitent les latchsEncodeurs de prioritéValidation one-hotDécodage sûr avec caseRécapitulatif - Routeur de requêtes4RTL séquentiel contrôlé
Priorité du reset et de l'activationCompteurs saturantsMise en pipeline des données et de validDétection des fronts échantillonnésRécapitulatif - Compteur d'événements2Largeurs et arithmétique signée
Préserver les bits de retenueComparaisons signéesDécalages arithmétiques vers la droiteDépassement et saturationRécapitulatif – différence signéeEntraînez-vous par vous-même : Compilateur Verilog en ligne