OpenCores
URL https://opencores.org/ocsvn/socgen/socgen/trunk

Subversion Repositories socgen

[/] [socgen/] [trunk/] [common/] [opencores.org/] [cde/] [ip/] [sram/] [rtl/] [verilog/] [sram_word] - Blame information for rev 135

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 134 jt_eaton
// Memory Array
2 135 jt_eaton
reg [7:0] meml [0:WORDS-1];
3
reg [7:0] memh [0:WORDS-1];
4 134 jt_eaton
// If used as Rom then load a memory image at startup
5
initial
6
  begin
7
  $display("SRAM def %m.mem");
8
  $display("  AddrBits=%d DataBits = 16  Words = %d  ",ADDR,WORDS);
9
  end
10
 
11
// Write function
12
always@(posedge clk)
13
        if( wr && cs && be[0]) meml[addr[ADDR:1]] <= wdata[7:0];
14
 
15
 
16
 
17
   always@(posedge clk)
18
        if( wr && cs && be[1]) memh[addr[ADDR:1]] <= wdata[15:8];
19
 
20
 
21
 
22
  // Read function gets new data if also a write cycle
23
  // latch the read addr for next cycle
24
  reg   [ADDR:1]          l_raddr;
25
  reg                       l_cycle;
26
 
27
  always@(posedge clk)
28
    begin
29
       l_raddr    <= addr;
30
       l_cycle    <=  rd && cs  ;
31
     end
32
 
33
 
34
 
35
generate
36
if( WRITETHRU)
37
  begin
38
 
39
 
40
  // Read into a wire and then pass to rdata because some synth tools can't handle a memory in a always block
41
  wire  [15:0] tmp_rdata;
42
  assign            tmp_rdata  =      (l_cycle )?{memh[{l_raddr[ADDR:1]}],meml[{l_raddr[ADDR:1]}]}:16'hffff;
43
  always@(*)            rdata  =      tmp_rdata;
44
  end
45
else
46
  begin
47
  // Read function gets old data if also a write cycle
48
  always@(posedge clk)
49
        if( rd && cs ) rdata             <= {memh[{addr[ADDR:1]}],meml[{addr[ADDR:1]}]}          ;
50
        else           rdata             <= 16'hffff;
51
  end
52
endgenerate
53
 
54
 
55
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.