Porte di lettura registrate
Fa parte della sezione Progettazione e verifica RTL del percorso Verilog di Coddy. Lezione 23 di 38.
Una lettura registrata acquisisce i dati dalla memoria sul fronte di clock e mantiene quel valore in seguito. Un enable di lettura può mantenere l’uscita precedente nei cicli in cui è disabilitato. Resettare il registro di lettura non richiede di azzerare ogni parola della memoria. Con assegnazioni non bloccanti di lettura e scrittura, l’espressione di lettura vede la parola precedente al fronte.
Estratto pertinente; le dichiarazioni e i collegamenti circostanti sono forniti nella sfida.
always @(posedge clk) begin
if(we) mem[waddr] <= data;
if(rst) q <= 0;
else if(re) q <= mem[raddr];
endIl registro di uscita si aggiorna solo sul fronte specificato e lungo il percorso abilitato.
Latenza di lettura dei documenti, comportamento delle letture disabilitate e quale ripristino dello stato effettivamente cancella.
Sfida
MedioImplementa una memoria a 8 bit di quattro parole con scrittura sincrona e lettura registrata q. we scrive sui fronti di salita. rst azzera sincronicamente solo q; altrimenti re carica q da mem[raddr] prima del fronte; re=0 mantiene q. La memoria non viene azzerata e le scritture sono indipendenti da rst. Se una lettura e una scrittura condividono un indirizzo sullo stesso fronte, q riceve la parola precedente. I test inizializzano le parole prima delle letture abilitate. 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 dopo.
Completa design.v e conserva i nomi dei moduli e le porte. Il testbench.v bloccato fornisce le variazioni degli input e stampa gli output dopo che si sono stabilizzati. Sceglie uno scenario usando un argomento del simulatore come +CASE=1; non è richiesto alcuno standard input. Non aggiungere stampe, ritardi o istruzioni di terminazione della simulazione al design. L'output atteso è una riga di valori decimali per ogni osservazione, separati da uno spazio e terminati da un newline.
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