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

Subversion Repositories sdcard_mass_storage_controller

[/] [sdcard_mass_storage_controller/] [trunk/] [rtl/] [sdc_fifo/] [verilog/] [sd_fifo.v] - Blame information for rev 10

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 tac2
 
2
module sd_fifo
3
  (
4
    input  [1:0] wb_adr_i,
5
    input [7:0]  wb_dat_i,
6
    output [7:0] wb_dat_o,
7
    input        wb_we_i,
8
    input        wb_re_i,
9
    input        wb_clk,
10
    input [1:0]  sd_adr_i,
11
    input [7:0]  sd_dat_i,
12
    output [7:0] sd_dat_o,
13
    input        sd_we_i,
14
    input        sd_re_i,
15
    input        sd_clk,
16
    output [1:4] fifo_full,
17
    output [1:4] fifo_empty,
18
    input        rst
19
   );
20
 
21
   wire [8:0]     wptr1, rptr1, wptr2, rptr2, wptr3, rptr3, wptr4, rptr4;
22
   wire [8:0]     wadr1, radr1, wadr2, radr2, wadr3, radr3, wadr4, radr4;
23
 
24
   wire          dpram_we_a, dpram_we_b;
25
   wire [10:0]    dpram_a_a, dpram_a_b;
26
 
27
   sd_counter wptr1a
28
     (
29
      .q(wptr1),
30
      .q_bin(wadr1),
31
      .cke((wb_adr_i==2'd0) & wb_we_i & !fifo_full[1]),
32
      .clk(wb_clk),
33
      .rst(rst)
34
      );
35
 
36
   sd_counter rptr1a
37
     (
38
      .q(rptr1),
39
      .q_bin(radr1),
40
      .cke((sd_adr_i==2'd0) & sd_re_i & !fifo_empty[1]),
41
      .clk(sd_clk),
42
      .rst(rst)
43
      );
44
 
45
  versatile_fifo_async_cmp
46
    #
47
    (
48
     .ADDR_WIDTH(9)
49
     )
50
    cmp1
51
    (
52
      .wptr(wptr1),
53
      .rptr(rptr1),
54
      .fifo_empty(fifo_empty[1]),
55
      .fifo_full(fifo_full[1]),
56
      .wclk(wb_clk),
57
      .rclk(sd_clk),
58
      .rst(rst)
59
      );
60
 
61
   sd_counter wptr2a
62
     (
63
      .q(wptr2),
64
      .q_bin(wadr2),
65
      .cke((sd_adr_i==2'd1) & sd_we_i & !fifo_full[2]),
66
      .clk(sd_clk),
67
      .rst(rst)
68
      );
69
 
70
   sd_counter rptr2a
71
     (
72
      .q(rptr2),
73
      .q_bin(radr2),
74
      .cke((wb_adr_i==2'd1) & wb_re_i & !fifo_empty[2]),
75
      .clk(wb_clk),
76
      .rst(rst)
77
      );
78
 
79
  versatile_fifo_async_cmp
80
    #
81
    (
82
     .ADDR_WIDTH(9)
83
     )
84
    cmp2
85
    (
86
      .wptr(wptr2),
87
      .rptr(rptr2),
88
      .fifo_empty(fifo_empty[2]),
89
      .fifo_full(fifo_full[2]),
90
      .wclk(sd_clk),
91
      .rclk(wb_clk),
92
      .rst(rst)
93
      );
94
 
95
   sd_counter wptr3a
96
     (
97
      .q(wptr3),
98
      .q_bin(wadr3),
99
      .cke((wb_adr_i==2'd2) & wb_we_i & !fifo_full[3]),
100
      .clk(wb_clk),
101
      .rst(rst)
102
      );
103
 
104
   sd_counter rptr3a
105
     (
106
      .q(rptr3),
107
      .q_bin(radr3),
108
      .cke((sd_adr_i==2'd2) & sd_re_i & !fifo_empty[3]),
109
      .clk(sd_clk),
110
      .rst(rst)
111
      );
112
 
113
  versatile_fifo_async_cmp
114
    #
115
    (
116
     .ADDR_WIDTH(9)
117
     )
118
    cmp3
119
    (
120
      .wptr(wptr3),
121
      .rptr(rptr3),
122
      .fifo_empty(fifo_empty[3]),
123
      .fifo_full(fifo_full[3]),
124
      .wclk(wb_clk),
125
      .rclk(sd_clk),
126
      .rst(rst)
127
      );
128
 
129
   sd_counter wptr4a
130
     (
131
      .q(wptr4),
132
      .q_bin(wadr4),
133
      .cke((sd_adr_i==2'd3) & sd_we_i & !fifo_full[4]),
134
      .clk(sd_clk),
135
      .rst(rst)
136
      );
137
 
138
   sd_counter rptr4a
139
     (
140
      .q(rptr4),
141
      .q_bin(radr4),
142
      .cke((wb_adr_i==2'd3) & wb_re_i & !fifo_empty[4]),
143
      .clk(wb_clk),
144
      .rst(rst)
145
      );
146
 
147
  versatile_fifo_async_cmp
148
    #
149
    (
150
     .ADDR_WIDTH(9)
151
     )
152
    cmp4
153
    (
154
      .wptr(wptr4),
155
      .rptr(rptr4),
156
      .fifo_empty(fifo_empty[4]),
157
      .fifo_full(fifo_full[4]),
158
      .wclk(sd_clk),
159
      .rclk(wb_clk),
160
      .rst(rst)
161
      );
162
 
163
   assign dpram_we_a = ((wb_adr_i==2'd0) & !fifo_full[1]) ? wb_we_i :
164
                       ((wb_adr_i==2'd2) & !fifo_full[3]) ? wb_we_i :
165
                       1'b0;
166
   assign dpram_we_b = ((sd_adr_i==2'd1) & !fifo_full[2]) ? sd_we_i :
167
                       ((sd_adr_i==2'd3) & !fifo_full[4]) ? sd_we_i :
168
                       1'b0;
169
   assign dpram_a_a = (wb_adr_i==2'd0) ? {wb_adr_i,wadr1} :
170
                      (wb_adr_i==2'd1) ? {wb_adr_i,radr2} :
171
                      (wb_adr_i==2'd2) ? {wb_adr_i,wadr3} :
172
                      {wb_adr_i,radr4};
173
   assign dpram_a_b = (sd_adr_i==2'd0) ? {sd_adr_i,radr1} :
174
                      (sd_adr_i==2'd1) ? {sd_adr_i,wadr2} :
175
                      (sd_adr_i==2'd2) ? {sd_adr_i,radr3} : //(sd_adr_i==2'd3) ? {sd_adr_i,radr3} :--->(sd_adr_i==2'd2) ? {sd_adr_i,radr3} :
176
                      {sd_adr_i,wadr4};
177
 
178
 //versatile_fifo_dual_port_ram_dc_dw
179
   versatile_fifo_dptam_dw
180
     dpram
181
     (
182
      .d_a(wb_dat_i),
183
      .q_a(wb_dat_o),
184
      .adr_a(dpram_a_a),
185
      .we_a(dpram_we_a),
186
      .clk_a(wb_clk),
187
      .q_b(sd_dat_o),
188
      .adr_b(dpram_a_b),
189
      .d_b(sd_dat_i),
190
      .we_b(dpram_we_b),
191
      .clk_b(sd_clk)
192
      );
193
 
194
endmodule // sd_fifo
195
 
196
 

powered by: WebSVN 2.1.0

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