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

Subversion Repositories ram_wb

[/] [ram_wb/] [trunk/] [rtl/] [verilog/] [ram_wb.v] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 unneback
module ram_wb ( dat_i, dat_o, adr_i, we_i, sel_i, cyc_i, stb_i, ack_o, cti_i, clk_i, rst_i);
2 2 unneback
 
3 5 unneback
   parameter dat_width = `RAM_WB_DAT_WIDTH;
4
   parameter adr_width = `RAM_WB_ADR_WIDTH;
5
   parameter mem_size  = `RAM_WB_MEM_SIZE;
6 2 unneback
 
7
   // wishbone signals
8 5 unneback
   input [31:0]          dat_i;
9
   output [31:0]         dat_o;
10
   input [adr_width-1:2] adr_i;
11
   input                 we_i;
12
   input [3:0]            sel_i;
13
   input                 cyc_i;
14
   input                 stb_i;
15
   output reg            ack_o;
16
   input [2:0]            cti_i;
17
 
18 2 unneback
   // clock
19 5 unneback
   input                 clk_i;
20 2 unneback
   // async reset
21 5 unneback
   input                 rst_i;
22 2 unneback
 
23 5 unneback
   wire [31:0]            wr_data;
24
 
25 2 unneback
   // mux for data to ram
26
   assign wr_data[31:24] = sel_i[3] ? dat_i[31:24] : dat_o[31:24];
27
   assign wr_data[23:16] = sel_i[2] ? dat_i[23:16] : dat_o[23:16];
28
   assign wr_data[15: 8] = sel_i[1] ? dat_i[15: 8] : dat_o[15: 8];
29
   assign wr_data[ 7: 0] = sel_i[0] ? dat_i[ 7: 0] : dat_o[ 7: 0];
30 5 unneback
 
31
   ram
32
     #
33 2 unneback
     (
34 8 unneback
      .dat_width(dat_width),
35
      .adr_width(adr_width),
36
      .mem_size(mem_size)
37 5 unneback
      )
38
     ram0
39 2 unneback
     (
40 5 unneback
      .dat_i(wr_data),
41
      .dat_o(dat_o),
42
      .adr_i(adr_i),
43
      .we_i(we_i & ack_o),
44 2 unneback
      .clk(clk_i)
45
      );
46
 
47
   // ack_o
48
   always @ (posedge clk_i or posedge rst_i)
49
     if (rst_i)
50
       ack_o <= 1'b0;
51
     else
52 5 unneback
       if (!ack_o) begin
53 2 unneback
         if (cyc_i & stb_i)
54 5 unneback
           ack_o <= 1'b1; end
55
       else
56
         if ((sel_i != 4'b1111) | (cti_i == 3'b000) | (cti_i == 3'b111))
57
           ack_o <= 1'b0;
58 2 unneback
 
59
endmodule
60
 
61
 

powered by: WebSVN 2.1.0

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