Réacheminement lecture-écriture
Fait partie de la section Conception et vérification RTL du Journey Verilog de Coddy. Leçon 24 sur 38.
Une interface mémoire doit définir le comportement de lecture/écriture à la même adresse. Le forwarding sélectionne explicitement les données d’écriture entrantes en cas de collision, ce qui produit un comportement avec nouvelles données. Sans ce contournement, le modèle de lecture non bloquante précédent capture les anciennes données. Les modes de mémoire des composants diffèrent ; la sémantique de simulation seule ne garantit donc pas un mappage vers une primitive spécifique.
Extrait pertinent : les déclarations et connexions environnantes sont fournies dans le défi.
if(re) begin
if(we && waddr==raddr) q <= data;
else q <= mem[raddr];
endLe bypass sélectionne le mot entrant uniquement en cas de véritable collision d’adresses.
Définissez explicitement le comportement en cas de collision et vérifiez-le par rapport au mode de mémoire matérielle choisi.
Défi
MoyenImplémentez une mémoire de quatre mots à lecture enregistrée avec transfert des nouvelles données. Les règles d’écriture et de réinitialisation/activation de la lecture correspondent à celles de la leçon précédente. Lors d’une lecture activée entrant en collision avec une écriture activée à la même adresse, q capture les données entrantes au lieu de l’ancien mot. Pour les autres lectures, il capture mem[raddr]. 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 fichier testbench.v verrouillé fournit les changements d’entrée et affiche les sorties une fois stabilisées. 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 ni affichage, ni délais, ni terminaison de la 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 rst, input we, input re, input [1:0] waddr, input [1:0] raddr, input [7:0] data, 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ê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