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.
Sfida
MedioImplementa 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;
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