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_controller_fifo_actel.v] - Blame information for rev 90

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 tac2
module sd_controller_fifo_wba
2
(
3
  wb_clk_i, wb_rst_i, wb_dat_i, wb_dat_o,
4
  wb_adr_i, wb_sel_i, wb_we_i, wb_cyc_i, wb_stb_i, wb_ack_o,
5
  sd_cmd_dat_i,sd_cmd_out_o,  sd_cmd_oe_o,
6
  sd_dat_dat_i, sd_dat_out_o , sd_dat_oe_o, sd_clk_o_pad
7
);
8
input           wb_clk_i;
9
input           wb_rst_i;
10
input   [7:0]  wb_dat_i;
11
output  [7:0]  wb_dat_o;
12
input   [2:0]  wb_adr_i;
13
input    [3:0]  wb_sel_i;
14
input           wb_we_i;
15
input           wb_cyc_i;
16
input           wb_stb_i;
17
output reg          wb_ack_o;
18
input wire [3:0] sd_dat_dat_i;
19
output wire [3:0] sd_dat_out_o;
20
output wire sd_dat_oe_o;
21
input wire sd_cmd_dat_i;
22
output wire sd_cmd_out_o;
23
output wire sd_cmd_oe_o;
24
output sd_clk_o_pad;
25
wire sd_clk_i;
26
input sd_clk_i_pad;
27
reg [7:0] controll_reg;
28
reg [7:0] status_reg;
29
reg [7:0] command_timeout_reg;
30
  assign sd_clk_i = wb_clk_i;
31
assign sd_clk_o=sd_clk_i;
32
reg [1:0] wb_fifo_adr_i_writer;
33
reg [1:0] wb_fifo_adr_i_reader;
34
wire [1:0] wb_fifo_adr_i;
35
reg add_token_read;
36
wire [7:0] wb_fifo_dat_i;
37
wire [7:0] wb_fifo_dat_o;
38
reg [7:0]  wb_dat_i_storage;
39
reg [7:0] wb_dat_o_i;
40
reg time_enable;
41
assign sd_clk_o_pad  = sd_clk_i ;
42
assign wb_fifo_adr_i = add_token_read ? wb_fifo_adr_i_reader : wb_fifo_adr_i_writer;
43
assign wb_fifo_dat_i =wb_dat_i_storage;
44
assign wb_dat_o = wb_adr_i[0] ? wb_fifo_dat_o :   wb_dat_o_i ;
45
wire [1:4]fifo_full ;
46
wire [1:4]fifo_empty;
47
reg wb_fifo_we_i;
48
reg wb_fifo_re_i;
49
wire [1:0] sd_adr_o;
50
wire [7:0] sd_dat_o;
51
wire [7:0] sd_dat_i;
52
sd_fifo sd_fifo_0
53
(
54
   .wb_adr_i  (wb_fifo_adr_i ),
55
   .wb_dat_i  (wb_fifo_dat_i),
56
   .wb_dat_o  (wb_fifo_dat_o ),
57
   .wb_we_i   (wb_fifo_we_i),
58
   .wb_re_i   (wb_fifo_re_i),
59
   .wb_clk  (wb_clk_i),
60
   .sd_adr_i (sd_adr_o ),
61
   .sd_dat_i (sd_dat_o),
62
   .sd_dat_o (sd_dat_i ),
63
   .sd_we_i (sd_we_o),
64
   .sd_re_i (sd_re_o),
65
   .sd_clk (sd_clk_o),
66
   .fifo_full ( fifo_full ),
67
   .fifo_empty (fifo_empty    ),
68
   .rst (wb_rst_i)
69
  ) ;
70
wire [1:0] sd_adr_o_cmd;
71
wire [7:0] sd_dat_i_cmd;
72
wire [7:0] sd_dat_o_cmd;
73
wire [1:0] sd_adr_o_dat;
74
wire [7:0] sd_dat_i_dat;
75
wire [7:0] sd_dat_o_dat;
76
wire [1:0] st_dat_t;
77
sd_cmd_phy sdc_cmd_phy_0
78
(
79
  .sd_clk (sd_clk_o),
80
  .rst (wb_rst_i ),
81
  .cmd_dat_i ( sd_cmd_dat_i  ),
82
  .cmd_dat_o (sd_cmd_out_o   ),
83
  .cmd_oe_o (sd_cmd_oe_o   ),
84
  .sd_adr_o (sd_adr_o_cmd),
85
  .sd_dat_i (sd_dat_i_cmd),
86
  .sd_dat_o (sd_dat_o_cmd),
87
  .sd_we_o (sd_we_o_cmd),
88
  .sd_re_o (sd_re_o_cmd),
89
  .fifo_full ( fifo_full[1:2] ),
90
  .fifo_empty ( fifo_empty [1:2]),
91
  .start_dat_t (st_dat_t),
92
  .fifo_acces_token (fifo_acces_token)
93
  );
94
  sd_data_phy sd_data_phy_0 (
95
  .sd_clk (sd_clk_o),
96
  .rst (wb_rst_i | controll_reg[0]),
97
  .DAT_oe_o ( sd_dat_oe_o  ),
98
  .DAT_dat_o (sd_dat_out_o),
99
  .DAT_dat_i  (sd_dat_dat_i ),
100
  .sd_adr_o (sd_adr_o_dat   ),
101
  .sd_dat_i (sd_dat_i_dat  ),
102
  .sd_dat_o (sd_dat_o_dat  ),
103
  .sd_we_o  (sd_we_o_dat),
104
  .sd_re_o (sd_re_o_dat),
105
  .fifo_full ( fifo_full[3:4] ),
106
  .fifo_empty ( fifo_empty [3:4]),
107
  .start_dat (st_dat_t),
108
  .fifo_acces (~fifo_acces_token)
109
  );
110
  assign sd_adr_o =  fifo_acces_token ? sd_adr_o_cmd : sd_adr_o_dat;
111
  assign sd_dat_o =  fifo_acces_token ? sd_dat_o_cmd : sd_dat_o_dat;
112
  assign sd_we_o  = fifo_acces_token ? sd_we_o_cmd : sd_we_o_dat;
113
  assign sd_re_o  =  fifo_acces_token ? sd_re_o_cmd : sd_re_o_dat;
114
 assign sd_dat_i_dat = sd_dat_i;
115
 assign sd_dat_i_cmd = sd_dat_i;
116
  always @(posedge wb_clk_i or posedge wb_rst_i)
117
        begin
118
        if (wb_rst_i)
119
            status_reg<=0;
120
          else begin
121
      status_reg[0] <= fifo_full[1];
122
      status_reg[1] <= fifo_empty[2];
123
      status_reg[2] <=  fifo_full[3];
124
      status_reg[3] <=  fifo_empty[4];
125
    end
126
  end
127
  reg delayed_ack;
128
  always @(posedge wb_clk_i or posedge wb_rst_i)
129
        begin
130
          if (wb_rst_i)
131
            wb_ack_o <=0;
132
           else
133
             wb_ack_o <=wb_stb_i & wb_cyc_i &  ~wb_ack_o & delayed_ack;
134
        end
135
  always @(posedge wb_clk_i or posedge wb_rst_i)
136
        begin
137
    if ( wb_rst_i )begin
138
            command_timeout_reg<=255;
139
            wb_dat_i_storage<=0;
140
            controll_reg<=0;
141
            wb_fifo_we_i<=0;
142
            wb_fifo_adr_i_writer<=0;
143
            time_enable<=0;
144
          end
145
          else if (wb_stb_i  & wb_cyc_i & (~wb_ack_o))begin
146
            if (wb_we_i) begin
147
              case (wb_adr_i)
148
              4'h0 : begin
149
                wb_fifo_adr_i_writer<=0;
150
                wb_fifo_we_i<=1&!delayed_ack;
151
                wb_dat_i_storage<=wb_dat_i;
152
                command_timeout_reg<=255;
153
                time_enable<=1;
154
              end
155
        4'h2 : begin
156
                wb_fifo_adr_i_writer<=2;
157
                wb_fifo_we_i<=1&!delayed_ack;
158
                wb_dat_i_storage<=wb_dat_i;
159
                command_timeout_reg<=255;
160
                time_enable<=0;
161
              end
162
        4'h5 : controll_reg <= wb_dat_i;
163
              endcase
164
            end
165
           end
166
           else begin
167
              wb_fifo_we_i<=0;
168
             if (!status_reg[1])
169
               time_enable<=0;
170
             if ((command_timeout_reg!=0) && (time_enable))
171
                 command_timeout_reg<=command_timeout_reg-1;
172
           end
173
end
174
always @(posedge wb_clk_i or posedge wb_rst_i )begin
175
   if ( wb_rst_i) begin
176
     add_token_read<=0;
177
     delayed_ack<=0;
178
     wb_fifo_re_i<=0;
179
      wb_fifo_adr_i_reader<=0;
180
      wb_dat_o_i<=0;
181
  end
182
 else begin
183
    delayed_ack<=0;
184
    wb_fifo_re_i<=0;
185
   if (wb_stb_i  & wb_cyc_i & (~wb_ack_o)) begin
186
   delayed_ack<=delayed_ack+1;
187
    add_token_read<=0;
188
    if (!wb_we_i) begin
189
      case (wb_adr_i)
190
      4'h1 : begin
191
         add_token_read<=1;
192
         wb_fifo_adr_i_reader<=1;
193
              wb_fifo_re_i<=1&delayed_ack;
194
      end
195
      4'h3 :begin
196
         add_token_read<=1;
197
         wb_fifo_adr_i_reader<=3;
198
               wb_fifo_re_i<=1 & delayed_ack;
199
     end
200
      4'h4 : wb_dat_o_i <= status_reg;
201
      4'h6 : wb_dat_o_i <= command_timeout_reg;
202
     endcase
203
    end
204
  end
205
end
206
end
207
 assign m_wb_adr_o =0;
208
 assign m_wb_sel_o =0;
209
 assign m_wb_we_o=0;
210
 assign m_wb_dat_o =0;
211
 assign m_wb_cyc_o=0;
212
 assign m_wb_stb_o=0;
213
 assign m_wb_cti_o=0;
214
 assign m_wb_bte_o=0;
215
endmodule
216
module sd_counter
217
  (
218
    output reg [9:1] q,
219
    output [9:1]    q_bin,
220
    input cke,
221
    input clk,
222
    input rst
223
   );
224
   reg [9:1] qi;
225
   wire [9:1] q_next;
226
   assign q_next =
227
   qi + 9'd1;
228
   always @ (posedge clk or posedge rst)
229
     if (rst)
230
       qi <= 9'd0;
231
     else
232
   if (cke)
233
     qi <= q_next;
234
   always @ (posedge clk or posedge rst)
235
     if (rst)
236
       q <= 9'd0;
237
     else
238
       if (cke)
239
         q <= (q_next>>1) ^ q_next;
240
   assign q_bin = qi;
241
endmodule
242
module CRC_7(BITVAL, Enable, CLK, RST, CRC);
243
   input        BITVAL;
244
   input Enable;
245
   input        CLK;
246
   input        RST;
247
   output [6:0] CRC;
248
   reg    [6:0] CRC;
249
   wire         inv;
250
   assign inv = BITVAL ^ CRC[6];
251
    always @(posedge CLK or posedge RST) begin
252
                if (RST) begin
253
                        CRC = 0;
254
        end
255
                else begin
256
                        if (Enable==1) begin
257
                                CRC[6] = CRC[5];
258
                                CRC[5] = CRC[4];
259
                                CRC[4] = CRC[3];
260
                                CRC[3] = CRC[2] ^ inv;
261
                                CRC[2] = CRC[1];
262
                                CRC[1] = CRC[0];
263
                                CRC[0] = inv;
264
                        end
265
                end
266
     end
267
endmodule
268
module CRC_16(BITVAL, Enable, CLK, RST, CRC);
269
 input        BITVAL;
270
   input Enable;
271
   input        CLK;
272
   input        RST;
273
   output reg [15:0] CRC;
274
   wire         inv;
275
   assign inv = BITVAL ^ CRC[15];
276
  always @(posedge CLK or posedge RST) begin
277
                if (RST) begin
278
                        CRC = 0;
279
        end
280
      else begin
281
        if (Enable==1) begin
282
         CRC[15] = CRC[14];
283
         CRC[14] = CRC[13];
284
         CRC[13] = CRC[12];
285
         CRC[12] = CRC[11] ^ inv;
286
         CRC[11] = CRC[10];
287
         CRC[10] = CRC[9];
288
         CRC[9] = CRC[8];
289
         CRC[8] = CRC[7];
290
         CRC[7] = CRC[6];
291
         CRC[6] = CRC[5];
292
         CRC[5] = CRC[4] ^ inv;
293
         CRC[4] = CRC[3];
294
         CRC[3] = CRC[2];
295
         CRC[2] = CRC[1];
296
         CRC[1] = CRC[0];
297
         CRC[0] = inv;
298
        end
299
         end
300
      end
301
endmodule
302
module sd_data_phy(
303
input sd_clk,
304
input rst,
305
output reg DAT_oe_o,
306
output reg[3:0] DAT_dat_o,
307
input  [3:0] DAT_dat_i,
308
output  [1:0] sd_adr_o,
309
input [7:0] sd_dat_i,
310
output reg [7:0] sd_dat_o,
311
output reg sd_we_o,
312
output reg sd_re_o,
313
input  [3:4] fifo_full,
314
input [3:4] fifo_empty,
315
input  [1:0] start_dat,
316
input fifo_acces
317
);
318
 reg [5:0] in_buff_ptr_read;
319
 reg [5:0] out_buff_ptr_read;
320
 reg crc_ok;
321
 reg [3:0] last_din_read;
322
reg [7:0] tmp_crc_token ;
323
reg[2:0] crc_read_count;
324
reg [3:0] crc_in_write;
325
reg crc_en_write;
326
reg crc_rst_write;
327
wire [15:0] crc_out_write [3:0];
328
reg [3:0] crc_in_read;
329
reg crc_en_read;
330
reg crc_rst_read;
331
wire [15:0] crc_out_read [3:0];
332
  reg[7:0] next_out;
333
    reg data_read_index;
334
reg [10:0] transf_cnt_write;
335
reg [10:0] transf_cnt_read;
336
parameter SIZE = 6;
337
reg [SIZE-1:0] state;
338
reg [SIZE-1:0] next_state;
339
parameter IDLE        = 6'b000001;
340
parameter WRITE_DAT   = 6'b000010;
341
parameter READ_CRC   = 6'b000100;
342
parameter WRITE_CRC  = 6'b001000;
343
parameter  READ_WAIT = 6'b010000;
344
parameter  READ_DAT  = 6'b100000;
345
reg in_dat_buffer_empty;
346
reg [2:0] crc_status_token;
347
reg busy_int;
348
reg add_token;
349
genvar i;
350
generate
351
for(i=0; i<4; i=i+1) begin:CRC_16_gen_write
352
  CRC_16 CRC_16_i (crc_in_write[i],crc_en_write, sd_clk, crc_rst_write, crc_out_write[i]);
353
end
354
endgenerate
355
generate
356
for(i=0; i<4; i=i+1) begin:CRC_16_gen_read
357
  CRC_16 CRC_16_i (crc_in_read[i],crc_en_read, sd_clk, crc_rst_read, crc_out_read[i]);
358
end
359
endgenerate
360
reg q_start_bit;
361
always @ (state or start_dat or DAT_dat_i[0] or  transf_cnt_write or transf_cnt_read or busy_int or crc_read_count or sd_we_o or  in_dat_buffer_empty )
362
begin : FSM_COMBO
363
 next_state  = 0;
364
case(state)
365
  IDLE: begin
366
   if (start_dat == 2'b01)
367
      next_state=WRITE_DAT;
368
    else if  (start_dat == 2'b10)
369
      next_state=READ_WAIT;
370
    else
371
      next_state=IDLE;
372
    end
373
  WRITE_DAT: begin
374
    if (transf_cnt_write >= 1044+2)
375
       next_state= READ_CRC;
376
   else if (start_dat == 2'b11)
377
        next_state=IDLE;
378
    else
379
       next_state=WRITE_DAT;
380
  end
381
  READ_WAIT: begin
382
    if (DAT_dat_i[0]== 0 )
383
       next_state= READ_DAT;
384
    else
385
       next_state=READ_WAIT;
386
  end
387
  READ_CRC: begin
388
    if ( (crc_read_count == 3'b111) &&(busy_int ==1) )
389
       next_state= WRITE_CRC;
390
    else
391
       next_state=READ_CRC;
392
  end
393
  WRITE_CRC: begin
394
       next_state= IDLE;
395
  end
396
  READ_DAT: begin
397
    if ((transf_cnt_read >= 1044-3)  && (in_dat_buffer_empty))
398
       next_state= IDLE;
399
    else if (start_dat == 2'b11)
400
        next_state=IDLE;
401
    else
402
       next_state=READ_DAT;
403
    end
404
 endcase
405
end
406
always @ (posedge sd_clk or posedge rst   )
407
 begin
408
  if (rst ) begin
409
    q_start_bit<=1;
410
 end
411
 else begin
412
    q_start_bit <= DAT_dat_i[0];
413
 end
414
end
415
always @ (posedge sd_clk or posedge rst   )
416
begin : FSM_SEQ
417
  if (rst ) begin
418
    state <= #1 IDLE;
419
 end
420
 else begin
421
    state <= #1 next_state;
422
 end
423
end
424
reg [4:0] crc_cnt_write;
425
reg [4:0]crc_cnt_read;
426
reg [3:0] last_din;
427
reg [2:0] crc_s ;
428
reg [7:0] write_buf_0,write_buf_1, sd_data_out;
429
reg out_buff_ptr,in_buff_ptr;
430
reg data_send_index;
431
reg [1:0] sd_adr_o_read;
432
reg [1:0] sd_adr_o_write;
433
reg read_byte_cnt;
434
assign sd_adr_o = add_token ? sd_adr_o_read : sd_adr_o_write;
435
assign sd_adr_o = add_token ? sd_adr_o_read : sd_adr_o_write;
436
reg [3:0] in_dat_buffer [63:0];
437
always @ (negedge sd_clk or posedge rst   )
438
begin
439
if (rst) begin
440
  DAT_oe_o<=0;
441
  crc_en_write<=0;
442
  crc_rst_write<=1;
443
  transf_cnt_write<=0;
444
  crc_cnt_write<=15;
445
  crc_status_token<=7;
446
  data_send_index<=0;
447
  out_buff_ptr<=0;
448
  in_buff_ptr<=0;
449
  read_byte_cnt<=0;
450
   write_buf_0<=0;
451
    write_buf_1<=0;
452
    sd_re_o<=0;
453
    sd_data_out<=0;
454
    sd_adr_o_write<=0;
455
    crc_in_write<=0;
456
    DAT_dat_o<=0;
457
     last_din<=0;
458
end
459
else begin
460
 case(state)
461
   IDLE: begin
462
      DAT_oe_o<=0;
463
      crc_en_write<=0;
464
      crc_rst_write<=1;
465
      crc_cnt_write<=16;
466
      read_byte_cnt<=0;
467
      crc_status_token<=7;
468
      data_send_index<=0;
469
      out_buff_ptr<=0;
470
      in_buff_ptr<=0;
471
        sd_re_o<=0;
472
        transf_cnt_write<=0;
473
   end
474
   WRITE_DAT: begin
475
      transf_cnt_write<=transf_cnt_write+1;
476
      if ( (in_buff_ptr != out_buff_ptr) ||  (transf_cnt_write<2) ) begin
477
       read_byte_cnt<=read_byte_cnt+1;
478
       sd_re_o<=0;
479
        case (read_byte_cnt)
480
        0:begin
481
           sd_adr_o_write <=2;
482
           sd_re_o<=1;
483
        end
484
        1:begin
485
          if (!in_buff_ptr)
486
             write_buf_0<=sd_dat_i;
487
          else
488
            write_buf_1 <=sd_dat_i;
489
          in_buff_ptr<=in_buff_ptr+1;
490
        end
491
     endcase
492
     end
493
      if (!out_buff_ptr)
494
        sd_data_out<=write_buf_0;
495
      else
496
       sd_data_out<=write_buf_1;
497
        if (transf_cnt_write==1+2) begin
498
          crc_rst_write<=0;
499
          crc_en_write<=1;
500
          last_din <=write_buf_0[3:0];
501
          DAT_oe_o<=1;
502
          DAT_dat_o<=0;
503
          crc_in_write<= write_buf_0[3:0];
504
          data_send_index<=1;
505
          out_buff_ptr<=out_buff_ptr+1;
506
        end
507
        else if ( (transf_cnt_write>=2+2) && (transf_cnt_write<=1044-19+2 )) begin
508
          DAT_oe_o<=1;
509
        case (data_send_index)
510
           0:begin
511
              last_din <=sd_data_out[3:0];
512
              crc_in_write <=sd_data_out[3:0];
513
               out_buff_ptr<=out_buff_ptr+1;
514
           end
515
           1:begin
516
              last_din <=sd_data_out[7:4];
517
              crc_in_write <=sd_data_out[7:4];
518
           end
519
         endcase
520
          data_send_index<=data_send_index+1;
521
          DAT_dat_o<= last_din;
522
        if ( transf_cnt_write >=1044-19 +2) begin
523
             crc_en_write<=0;
524
         end
525
       end
526
       else if (transf_cnt_write>1044-19 +2 & crc_cnt_write!=0) begin
527
         crc_en_write<=0;
528
         crc_cnt_write<=crc_cnt_write-1;
529
         DAT_oe_o<=1;
530
         DAT_dat_o[0]<=crc_out_write[0][crc_cnt_write-1];
531
         DAT_dat_o[1]<=crc_out_write[1][crc_cnt_write-1];
532
         DAT_dat_o[2]<=crc_out_write[2][crc_cnt_write-1];
533
         DAT_dat_o[3]<=crc_out_write[3][crc_cnt_write-1];
534
       end
535
       else if (transf_cnt_write==1044-2+2) begin
536
          DAT_oe_o<=1;
537
          DAT_dat_o<=4'b1111;
538
      end
539
      else if (transf_cnt_write !=0) begin
540
         DAT_oe_o<=0;
541
      end
542
   end
543
 endcase
544
end
545
end
546
always @ (posedge sd_clk or posedge rst   )
547
begin
548
  if (rst) begin
549
    add_token<=0;
550
    sd_adr_o_read<=0;
551
    crc_read_count<=0;
552
    sd_we_o<=0;
553
    tmp_crc_token<=0;
554
    crc_rst_read<=0;
555
    crc_en_read<=0;
556
    in_buff_ptr_read<=0;
557
    out_buff_ptr_read<=0;
558
    crc_cnt_read<=0;
559
    transf_cnt_read<=0;
560
    data_read_index<=0;
561
    in_dat_buffer_empty<=0;
562
    next_out<=0;
563
    busy_int<=0;
564
    sd_dat_o<=0;
565
  end
566
  else begin
567
   case(state)
568
   IDLE: begin
569
     add_token<=0;
570
     crc_read_count<=0;
571
     sd_we_o<=0;
572
     tmp_crc_token<=0;
573
      crc_rst_read<=1;
574
      crc_en_read<=0;
575
      in_buff_ptr_read<=0;
576
     out_buff_ptr_read<=0;
577
      crc_cnt_read<=15;
578
      transf_cnt_read<=0;
579
      data_read_index<=0;
580
      in_dat_buffer_empty<=0;
581
    end
582
    READ_DAT: begin
583
     add_token<=1;
584
      crc_rst_read<=0;
585
      crc_en_read<=1;
586
      if (fifo_acces) begin
587
        if ( (in_buff_ptr_read - out_buff_ptr_read) >=2) begin
588
          data_read_index<=~data_read_index;
589
          case(data_read_index)
590
            0: begin
591
             sd_adr_o_read<=3;
592
             sd_we_o<=0;
593
             next_out[3:0]<=in_dat_buffer[out_buff_ptr_read ];
594
             next_out[7:4]<=in_dat_buffer[out_buff_ptr_read+1 ];
595
           end
596
           1: begin
597
              out_buff_ptr_read<=out_buff_ptr_read+2;
598
            sd_dat_o<=next_out;
599
            sd_we_o<=1;
600
            end
601
          endcase
602
          end
603
        else
604
           in_dat_buffer_empty<=1;
605
      end
606
     if (transf_cnt_read<1024) begin
607
       in_dat_buffer[in_buff_ptr_read]<=DAT_dat_i;
608
       crc_in_read<=DAT_dat_i;
609
       crc_ok<=1;
610
       transf_cnt_read<=transf_cnt_read+1;
611
       in_buff_ptr_read<=in_buff_ptr_read+1;
612
     end
613
     else if  ( transf_cnt_read <= (1024 +16)) begin
614
       transf_cnt_read<=transf_cnt_read+1;
615
       crc_en_read<=0;
616
       last_din_read <=DAT_dat_i;
617
       if (transf_cnt_read> 1024) begin
618
         crc_cnt_read <=crc_cnt_read-1;
619
          if  (crc_out_read[0][crc_cnt_read] != last_din[0])
620
           crc_ok<=0;
621
          if  (crc_out_read[1][crc_cnt_read] != last_din[1])
622
           crc_ok<=0;
623
          if  (crc_out_read[2][crc_cnt_read] != last_din[2])
624
           crc_ok<=0;
625
          if  (crc_out_read[3][crc_cnt_read] != last_din[3])
626
           crc_ok<=0;
627
         if (crc_cnt_read==0) begin
628
         end
629
      end
630
    end
631
    end
632
    READ_CRC: begin
633
       if (crc_read_count<3'b111) begin
634
         crc_read_count<=crc_read_count+1;
635
         tmp_crc_token[crc_read_count]  <= DAT_dat_i[0];
636
        end
637
      busy_int <=DAT_dat_i[0];
638
    end
639
    WRITE_CRC: begin
640
      add_token<=1;
641
      sd_adr_o_read<=3;
642
      sd_we_o<=1;
643
      sd_dat_o<=tmp_crc_token;
644
    end
645
  endcase
646
end
647
end
648
endmodule

powered by: WebSVN 2.1.0

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