Menu
Coddy logo textTech

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];
end

Le 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.

challenge icon

Défi

Moyen

Implé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;
endmodule
quiz iconTestez-vous

Cette 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

Entraînez-vous par vous-même : Compilateur Verilog en ligne