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