URL
https://opencores.org/ocsvn/socgen/socgen/trunk
Subversion Repositories socgen
[/] [socgen/] [trunk/] [common/] [opencores.org/] [cde/] [ip/] [sram/] [rtl/] [verilog/] [sram_word] - Rev 135
Compare with Previous | Blame | View Log
// Memory Arrayreg [7:0] meml [0:WORDS-1];reg [7:0] memh [0:WORDS-1];// If used as Rom then load a memory image at startupinitialbegin$display("SRAM def %m.mem");$display(" AddrBits=%d DataBits = 16 Words = %d ",ADDR,WORDS);end// Write functionalways@(posedge clk)if( wr && cs && be[0]) meml[addr[ADDR:1]] <= wdata[7:0];always@(posedge clk)if( wr && cs && be[1]) memh[addr[ADDR:1]] <= wdata[15:8];// Read function gets new data if also a write cycle// latch the read addr for next cyclereg [ADDR:1] l_raddr;reg l_cycle;always@(posedge clk)beginl_raddr <= addr;l_cycle <= rd && cs ;endgenerateif( WRITETHRU)begin// Read into a wire and then pass to rdata because some synth tools can't handle a memory in a always blockwire [15:0] tmp_rdata;assign tmp_rdata = (l_cycle )?{memh[{l_raddr[ADDR:1]}],meml[{l_raddr[ADDR:1]}]}:16'hffff;always@(*) rdata = tmp_rdata;endelsebegin// Read function gets old data if also a write cyclealways@(posedge clk)if( rd && cs ) rdata <= {memh[{addr[ADDR:1]}],meml[{addr[ADDR:1]}]} ;else rdata <= 16'hffff;endendgenerate
