Menu
Coddy logo textTech

Memorizzazione con array di registri

Fa parte della sezione Progettazione e verifica RTL del percorso Verilog di Coddy. Lezione 22 di 38.

Un array non compattato può rappresentare parole di memoria hardware. Una scrittura sincronizzata con il clock aggiorna una sola parola selezionata; una lettura continua seleziona una parola senza un clock di lettura. La sintesi può implementare gli array piccoli con registri o dedurre risorse di memoria per i pattern supportati. Non dare mai per scontato che una parola non scritta inizi da zero.

Estratto pertinente; le dichiarazioni e i collegamenti circostanti sono forniti nella sfida.

reg [7:0] mem [0:3];
always @(posedge clk)
    if(we) mem[waddr] <= data;
assign q = mem[raddr];

La scrittura è attivata dal fronte, mentre la lettura segue la parola memorizzata selezionata.

Definisci esplicitamente l’abilitazione alla scrittura e la temporizzazione della lettura; non dipendere da contenuti iniziali della memoria non specificati initial.

challenge icon

Sfida

Medio

Implementa quattro parole da 8 bit. Su un fronte di salita, we scrive i dati in mem[waddr]. q è una lettura combinatoria asincrona di mem[raddr]. La memoria non ha reset né contenuti initial; il testbench scrive in ogni indirizzo osservato prima di leggerlo. Le osservazioni avvengono dopo il fronte, quindi una scrittura allo stesso indirizzo è visibile in q. 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 mantieni 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 alcun input standard. 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 we, input [1:0] waddr, input [7:0] data, input [1:0] raddr, output [7:0] q);
    // Sostituisci questo segnaposto con il tuo progetto.
    assign 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