Esercitazione 8 – Memorie (verilog)

Transcript

Esercitazione 8 – Memorie (verilog)
Università degli Studi di Cagliari
Dipartimento di Ingegneria Elettrica ed Elettronica
Laboratorio di Elettronica
Corso di Elettronica Digitale
Anno Accademico 2005/2006
Esercitazione 8 – Memorie (verilog)
Modellare in verilog un modulo RAM con 32 word da 8 bit, indirizzo di lettura (raddr) e scrittura (waddr), porta
di lettura (dataIn) di scrittura (dataOut) separate. La scrittura è abilitata da un segnale (wen) attivo alto.
Sviluppare inoltre un testbench per la verifica del funzionamento del modello, in grado di scrivere nella
memoria i dati contenuti nel file (memory.txt) e poi leggerli in sequenza.
module mem(raddr, dataIn, waddr, dataOut, wen);
input wen; // Abilitazione alla scrittura (attivo alto)
input [4:0] raddr, waddr; // Indirizzi di lettura e scrittura: 5 bit -> 32 word
input [7:0] dataIn; // Porta di scrittura
output [7:0] dataOut; // Porta di lettura
reg [7:0] dataOut;
reg [7:0] word_array [0:255];
always @(raddr or dataIn or waddr or wen)
begin
if(wen)
word_array[waddr] = dataIn; // Scrittura
dataOut = word_array[raddr]; // Lettura
end
endmodule
module tb_mem;
reg wen;
reg [4:0] raddr, waddr;
reg [7:0] dataIn, data_to_write[0:31];
wire [7:0] dataOut;
integer K;
// Istanziazione modulo da testare
mem DUT(raddr, dataIn, waddr, dataOut, wen);
initial
begin
waddr=0; raddr=0; wen=0;
// Legge i dati dal file
$readmemb(“memory.txt”,data_to_write);
// Scrive i dati in memoria
for(K=0;K<32;K=K+1)
begin
waddr=K;
dataIn=data_to_write[K];
#5 wen=1; #5 wen=0;
end
// Legge i dati dalla memoria
for(K=0;K<32;K=K+1)
#5 raddr=K;
#5 $stop;
end
endmodule