Menu
Coddy logo textTech

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

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

challenge icon

Sfida

Medio

Implementa 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;
endmodule
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Progettazione e verifica RTL

Esercitati da solo: Compilatore Verilog online