Stockage en tableau de registres
Fait partie de la section Conception et vérification RTL du Journey Verilog de Coddy. Leçon 22 sur 38.
Un tableau dépaqueté peut modéliser des mots de stockage matériel. Une écriture cadencée met à jour un mot sélectionné ; une lecture continue sélectionne un mot sans horloge de lecture. La synthèse peut implémenter de petits tableaux avec des registres ou inférer des ressources mémoire pour les modèles pris en charge. Ne supposez jamais qu’un mot non écrit commence à zéro.
Extrait pertinent ; les déclarations et connexions environnantes sont fournies dans le défi.
reg [7:0] mem [0:3];
always @(posedge clk)
if(we) mem[waddr] <= data;
assign q = mem[raddr];L’écriture est déclenchée par un front, tandis que la lecture suit le mot stocké sélectionné.
Définissez explicitement l’activation de l’écriture et le timing de lecture ; ne dépendez pas du contenu mémoire initial non spécifié.
Défi
MoyenImplémentez quatre mots de 8 bits. Lors d’un front montant, we écrit les données dans mem[waddr]. q est une lecture combinatoire asynchrone de mem[raddr]. La mémoire n’a ni réinitialisation ni contenu initial ; le banc de test écrit chaque adresse observée avant de la lire. Les observations ont lieu après le front, de sorte qu’une écriture à la même adresse est visible dans q. Colonnes 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 modules 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 saut de ligne.
Essayez vous-même
module dut (input clk, input we, input [1:0] waddr, input [7:0] data, input [1:0] raddr, output [7:0] q);
// Remplacez ce placeholder par votre design.
assign 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êtes2Largeurs 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ée5Mémoire et tables de correspondance
Tables ROM combinatoiresStockage en tableau de registresPorts de lecture enregistrésRéacheminement lecture-écritureRécapitulatif - Banque à double lectureEntraînez-vous par vous-même : Compilateur Verilog en ligne