Inoltro in lettura-scrittura
Fa parte della sezione Progettazione e verifica RTL del percorso Verilog di Coddy. Lezione 24 di 38.
Un'interfaccia di memoria deve definire il comportamento di lettura/scrittura allo stesso indirizzo. Il forwarding seleziona esplicitamente i dati di scrittura in ingresso in caso di conflitto, producendo un comportamento con dati nuovi. Senza questo bypass, il precedente modello di lettura non bloccante acquisisce i dati vecchi. Le modalità di memoria dei dispositivi differiscono, quindi la sola semantica della simulazione non garantisce una mappatura specifica alla primitiva.
Estratto pertinente; le dichiarazioni e i collegamenti circostanti sono forniti nella sfida.
if(re) begin
if(we && waddr==raddr) q <= data;
else q <= mem[raddr];
endIl bypass seleziona la parola in ingresso solo in caso di una reale collisione di indirizzi.
Definisci esplicitamente il comportamento delle collisioni e verificalo rispetto alla modalità di memoria hardware scelta.
Sfida
MedioImplementa una memoria a quattro parole con lettura registrata e inoltro dei nuovi dati. Le regole di scrittura e di reset/abilitazione della lettura corrispondono a quelle della lezione precedente. In caso di lettura abilitata in conflitto con una scrittura abilitata allo stesso indirizzo, q acquisisce i dati in ingresso invece della parola precedente. Per le altre letture acquisisce mem[raddr]. Colonne di output: q. Tutti i segnali di controllo e i dati sono stabili prima di ogni fronte di salita del clock; i risultati vengono osservati in seguito.
Completa design.v e conserva i nomi dei moduli e le porte. Il testbench.v bloccato fornisce le variazioni degli ingressi e stampa le uscite dopo che si sono stabilizzate. Sceglie uno scenario usando un argomento del simulatore come +CASE=1; non è richiesto alcuno standard input. Non aggiungere stampe, ritardi o terminazione della simulazione al design. L'output previsto è una riga di valori decimali per ogni osservazione, separati da uno spazio e terminata da un carattere di nuova riga.
Provalo tu
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);
// Sostituisci questo segnaposto con il tuo progetto.
initial q = 0;
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Progettazione e verifica RTL
1RTL combinatorio affidabile
I valori predefiniti evitano i latchEncoder di prioritàConvalida one-hotDecodifica sicura dei caseRiepilogo - Router delle richieste2Larghezze e aritmetica con segno
Preservare i bit di riportoConfronti con segnoShift aritmetici a destraOverflow e saturazioneRiepilogo - Differenza con segno5Memoria e tabelle di consultazione
Tabelle ROM combinatorieMemorizzazione con array di registriPorte di lettura registrateInoltro in lettura-scritturaRiepilogo - Banco a doppia letturaEsercitati da solo: Compilatore Verilog online