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/] [bench/] [sdc_dma/] [verilog/] [sdModel.v] - Blame information for rev 97

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

Line No. Rev Author Line
1 79 tac2
//`include "timescale.v"
2 96 tac2
`include "SD_defines.v"
3 79 tac2
`define tTLH 10 //Clock rise time
4
`define tHL 10 //Clock fall time
5
`define tISU 6 //Input setup time
6
`define tIH 0 //Input hold time
7
`define tODL 14 //Output delay
8
 
9
`define BLOCKSIZE 512
10 96 tac2
`define MEMSIZE 2048 // 4 block
11 79 tac2
`define BLOCK_BUFFER_SIZE 1
12
`define TIME_BUSY 64
13
 
14 96 tac2
`define PRG 7
15
`define RCV 6
16
`define DATAS 5
17
`define TRAN 4
18 79 tac2
module sdModel(
19
  input sdClk,
20
  tri cmd,
21
  tri [3:0] dat
22
 
23
);
24
 
25
 
26
reg oeCmd;
27
reg oeDat;
28
reg cmdOut;
29 96 tac2
reg [3:0] datOut;
30
reg [10:0] transf_cnt;
31 79 tac2
 
32 96 tac2
 
33
 
34 79 tac2
reg [5:0] lastCMD;
35
reg cardIdentificationState;
36 96 tac2
reg CardTransferActive;
37
reg [2:0] BusWidth;
38 79 tac2
 
39
assign cmd = oeCmd ? cmdOut : 1'bz;
40
assign dat = oeDat ? datOut : 4'bz;
41
 
42 96 tac2
reg InbuffStatus;
43
reg [31:0] BlockAddr;
44
reg [7:0] Inbuff [0:511];
45
reg [7:0] FLASHmem [0:`MEMSIZE];
46 79 tac2
 
47
 
48
reg [46:0]inCmd;
49
reg [5:0]cmdRead;
50
reg [7:0] cmdWrite;
51
reg crcIn;
52
reg crcEn;
53
reg crcRst;
54
reg [31:0] CardStatus;
55
reg [15:0] RCA;
56
reg [31:0] OCR;
57
reg [120:0] CID;
58
reg Busy; //0 when busy
59
wire [6:0] crcOut;
60 96 tac2
reg [3:0] crc_c;
61
 
62
reg [3:0] CurrentState;
63
reg [3:0] DataCurrentState;
64 79 tac2
`define RCASTART 16'h20
65
`define OCRSTART 32'hff8000
66
`define STATUSSTART 32'h0
67
`define CIDSTART 128'h00ffffffddddddddaaaaaaaa99999999  //Just some random data not really usefull anyway 
68
 
69
`define outDelay 4
70
reg [2:0] outDelayCnt;
71 96 tac2
reg [9:0] flash_write_cnt;
72
reg [8:0] flash_blockwrite_cnt;
73
 
74 79 tac2
parameter SIZE = 10;
75
parameter CONTENT_SIZE = 40;
76
parameter
77
    IDLE   =  10'b0000_0000_01,
78
    READ_CMD   =  10'b0000_0000_10,
79
    ANALYZE_CMD     =  10'b0000_0001_00,
80
    SEND_CMD        =  10'b0000_0010_00;
81
reg [SIZE-1:0] state;
82
reg [SIZE-1:0] next_state;
83
 
84 96 tac2
parameter
85
    DATA_IDLE   =10'b0000_0000_01,
86
    READ_WAITS  =10'b0000_0000_10,
87
    READ_DATA  = 10'b0000_0001_00,
88
    WRITE_FLASH =10'b0000_0010_00,
89
    WRITE_DATA  =10'b0000_0100_00;
90
parameter okcrctoken = 4'b0101;
91
parameter invalidcrctoken = 4'b1111;
92
reg [SIZE-1:0] dataState;
93
reg [SIZE-1:0] next_datastate;
94
 
95 79 tac2
reg ValidCmd;
96
reg inValidCmd;
97
 
98
reg [7:0] response_S;
99
reg [135:0] response_CMD;
100
integer responseType;
101 96 tac2
 
102
     reg [9:0] block_cnt;
103
     reg wptr;
104
     reg crc_ok;
105
     reg [3:0] last_din;
106
 
107
 
108
 
109
reg crcDat_rst;
110
reg crcDat_en;
111
reg [3:0] crcDat_in;
112
wire [15:0] crcDat_out [3:0];
113
 
114
genvar i;
115
generate
116
for(i=0; i<4; i=i+1) begin:CRC_16_gen
117 97 tac2
  SD_CRC_16 CRC_16_i (crcDat_in[i],crcDat_en, sdClk, crcDat_rst, crcDat_out[i]);
118 96 tac2
end
119
endgenerate
120
SD_CRC_7 CRC_7(
121 79 tac2
crcIn,
122
crcEn,
123
sdClk,
124
crcRst,
125
crcOut);
126 96 tac2
 
127
 
128 79 tac2
reg appendCrc;
129
reg [5:0] startUppCnt;
130
 
131 96 tac2
reg q_start_bit;
132 79 tac2
//Card initinCMd
133
initial $readmemh("FLASH.txt",FLASHmem);
134
 
135
integer k;
136
initial begin
137
        $display("Contents of Mem after reading data file:");
138
        for (k=0; k<10; k=k+1) $display("%d:%h",k,FLASHmem[k]);
139
end
140
reg qCmd;
141
reg [2:0] crcCnt;
142
initial begin
143
  cardIdentificationState<=1;
144
  state<=IDLE;
145 96 tac2
  dataState<=DATA_IDLE;
146 79 tac2
  Busy<=0;
147
  oeCmd<=0;
148
  crcCnt<=0;
149 96 tac2
  CardTransferActive<=0;
150 79 tac2
  qCmd<=1;
151
  oeDat<=0;
152
  cmdOut<=0;
153
  cmdWrite<=0;
154 96 tac2
 
155
  InbuffStatus<=0;
156 79 tac2
  datOut<=0;
157
  inCmd<=0;
158 96 tac2
  BusWidth<=1;
159 79 tac2
  responseType=0;
160
  crcIn<=0;
161
  response_S<=0;
162
  crcEn<=0;
163
  crcRst<=0;
164
  cmdRead<=0;
165
  ValidCmd<=0;
166
  inValidCmd=0;
167
  appendCrc<=0;
168
  RCA<= `RCASTART;
169
  OCR<= `OCRSTART;
170
  CardStatus <= `STATUSSTART;
171
  CID<=`CIDSTART;
172
  response_CMD<=0;
173
  outDelayCnt<=0;
174 96 tac2
  crcDat_rst<=1;
175
  crcDat_en<=0;
176
  crcDat_in<=0;
177
  transf_cnt<=0;
178
  BlockAddr<=0;
179
  block_cnt <=0;
180
     wptr<=0;
181
     transf_cnt<=0;
182
     crcDat_rst<=1;
183
     crcDat_en<=0;
184
     crcDat_in<=0;
185
     flash_write_cnt<=0;
186
flash_blockwrite_cnt<=0;
187 79 tac2
end
188
 
189
//CARD logic
190
 
191
always @ (state or cmd or cmdRead or ValidCmd or inValidCmd or cmdWrite or outDelayCnt)
192
begin : FSM_COMBO
193
 next_state  = 0;
194
case(state)
195
IDLE: begin
196
   if (!cmd)
197
     next_state = READ_CMD;
198
  else
199
     next_state = IDLE;
200
end
201
READ_CMD: begin
202
  if (cmdRead>= 47)
203
     next_state = ANALYZE_CMD;
204
  else
205
     next_state =  READ_CMD;
206
 end
207
 ANALYZE_CMD: begin
208
  if ((ValidCmd  )   && (outDelayCnt >= `outDelay ))
209
     next_state = SEND_CMD;
210
  else if (inValidCmd)
211
     next_state =  IDLE;
212
 else
213
    next_state =  ANALYZE_CMD;
214
 end
215
 SEND_CMD: begin
216
    if (cmdWrite>= response_S)
217
     next_state = IDLE;
218
  else
219
     next_state =  SEND_CMD;
220
 
221
 end
222
 
223
 
224
 endcase
225
end
226
 
227 96 tac2
always @ (dataState or CardStatus or crc_c or flash_write_cnt or q_start_bit)
228
begin : FSM_COMBODAT
229
 next_datastate  = 0;
230
case(dataState)
231
 DATA_IDLE: begin
232
   if (CardStatus[12:9]==`RCV )
233
     next_datastate = READ_WAITS;
234
   else if (CardStatus[12:9]==`DATAS )
235
     next_datastate = WRITE_DATA;
236
   else
237
     next_datastate = DATA_IDLE;
238
 end
239
 
240
 READ_WAITS: begin
241
   if (q_start_bit == 1'b0 )
242
     next_datastate =  READ_DATA;
243
   else
244
     next_datastate =  READ_WAITS;
245
 end
246
 
247
 READ_DATA : begin
248
  if (crc_c==0  )
249
     next_datastate =  WRITE_FLASH;
250
  else
251
     next_datastate =  READ_DATA;
252
 end
253
  WRITE_FLASH : begin
254
  if (flash_write_cnt>265 )
255
     next_datastate =  DATA_IDLE;
256
  else
257
     next_datastate =  WRITE_FLASH;
258
 
259
 
260
end
261
 
262
 
263
 
264
 
265
 
266
 endcase
267
end
268
 
269 79 tac2
always @ (posedge sdClk  )
270 96 tac2
 begin
271
 
272
    q_start_bit <= dat[0];
273
 end
274
 
275
always @ (posedge sdClk  )
276 79 tac2
begin : FSM_SEQ
277 96 tac2
    state <= next_state;
278 79 tac2
end
279
 
280 96 tac2
always @ (posedge sdClk  )
281
begin : FSM_SEQDAT
282
    dataState <= next_datastate;
283
end
284 79 tac2
 
285 96 tac2
 
286
 
287 79 tac2
always @ (posedge sdClk) begin
288 96 tac2
if (CardTransferActive) begin
289
 if (InbuffStatus==0) //empty
290
   CardStatus[8]<=1;
291
  else
292
   CardStatus[8]<=0;
293
  end
294
else
295
  CardStatus[8]<=0;
296
 
297 79 tac2
 startUppCnt<=startUppCnt+1;
298
 OCR[31]<=Busy;
299
 if (startUppCnt == `TIME_BUSY)
300
   Busy <=1;
301
end
302
 
303
 
304
always @ (posedge sdClk) begin
305
   qCmd<=cmd;
306
end
307
 
308
//read data and cmd on rising edge
309
always @ (posedge sdClk) begin
310
 case(state)
311
   IDLE: begin
312
 
313
      crcIn<=0;
314
      crcEn<=0;
315
      crcRst<=1;
316
      oeCmd<=0;
317
      oeDat<=0;
318
      cmdRead<=0;
319
      appendCrc<=0;
320
      ValidCmd<=0;
321
      inValidCmd=0;
322
      cmdWrite<=0;
323
      crcCnt<=0;
324
      response_CMD<=0;
325
      response_S<=0;
326
      outDelayCnt<=0;
327
      responseType=0;
328
    end
329
   READ_CMD: begin //read cmd
330
      crcEn<=1;
331
      crcRst<=0;
332
      crcIn <= #`tIH qCmd;
333
      inCmd[47-cmdRead]  <= #`tIH qCmd;
334
      cmdRead <= #1 cmdRead+1;
335
      if (cmdRead >= 40)
336
         crcEn<=0;
337
 
338
      if (cmdRead == 46) begin
339
          oeCmd<=1;
340
     cmdOut<=1;
341
      end
342
   end
343
 
344
   ANALYZE_CMD: begin//check for valid cmd
345
   //Wrong CRC go idle
346
    if (inCmd[46] == 0) //start
347
      inValidCmd=1;
348
    else if (inCmd[7:1] != crcOut) begin
349
      inValidCmd=1;
350
      $fdisplay(sdModel_file_desc, "**sd_Model Commando CRC Error") ;
351
      $display(sdModel_file_desc, "**sd_Model Commando CRC Error") ;
352
    end
353
    else if  (inCmd[0] != 1)  begin//stop 
354
      inValidCmd=1;
355
      $fdisplay(sdModel_file_desc, "**sd_Model Commando No Stop Bit Error") ;
356
      $display(sdModel_file_desc, "**sd_Model Commando No Stop Bit Error") ;
357
    end
358
    else begin
359 96 tac2
      if(outDelayCnt ==0)
360
        CardStatus[3]<=0;
361 79 tac2
      case(inCmd[45:40])
362
 
363
        2 : response_S <= 136;
364
        3 : response_S <= 48;
365
        7 : response_S <= 48;
366
        8 : response_S <= 0;
367
        14 : response_S <= 0;
368 96 tac2
        16 : response_S <= 48;
369 79 tac2
        17 : response_S <= 48;
370
        24 : response_S <= 48;
371
        33 : response_S <= 48;
372
        55 : response_S <= 48;
373
        41 : response_S <= 48;
374
    endcase
375
         case(inCmd[45:40])
376
 
377
            response_CMD <= 0;
378
            cardIdentificationState<=1;
379
            ResetCard;
380
        end
381
        2 : begin
382
         if (lastCMD != 41 && outDelayCnt==0) begin
383
               $fdisplay(sdModel_file_desc, "**Error in sequnce, ACMD 41 should precede 2 in Startup state") ;
384
               $display(sdModel_file_desc, "**Error in sequnce, ACMD 41 should precede 2 in Startup state") ;
385
               CardStatus[3]<=1;
386
            end
387
        response_CMD[127:8] <= CID;
388
        appendCrc<=0;
389
        CardStatus[12:9] <=2;
390
        end
391
        3 :  begin
392 96 tac2
           if (lastCMD != 2 && outDelayCnt==0 ) begin
393 79 tac2
               $fdisplay(sdModel_file_desc, "**Error in sequnce, CMD 2 should precede 3 in Startup state") ;
394
               $display(sdModel_file_desc, "**Error in sequnce, CMD 2 should precede 3 in Startup state") ;
395
               CardStatus[3]<=1;
396
            end
397
        response_CMD[127:112] <= RCA[15:0] ;
398
        response_CMD[111:96] <= CardStatus[15:0] ;
399
        appendCrc<=1;
400
        CardStatus[12:9] <=3;
401
        cardIdentificationState<=0;
402 96 tac2
       end
403
        6 : begin
404
           if (lastCMD == 55 && outDelayCnt==0) begin
405
              if (inCmd[9:8] == 2'b10) begin
406
               BusWidth <=4;
407
                    $display(sdModel_file_desc, "**BUS WIDTH 4 ") ;
408
               end
409
              else
410
               BusWidth <=1;
411
 
412
              response_S<=48;
413
              response_CMD[127:96] <= CardStatus;
414
           end
415
           else if (outDelayCnt==0)begin
416
             response_CMD <= 0;
417
             response_S<=0;
418
             $fdisplay(sdModel_file_desc, "**Error Invalid CMD, %h",inCmd[45:40]) ;
419
             $display(sdModel_file_desc, "**Error Invalid CMD, %h",inCmd[45:40]) ;
420
            end
421
        end
422
        7: begin
423
         if (outDelayCnt==0) begin
424
          if (inCmd[39:24]== RCA[15:0]) begin
425
              CardTransferActive <= 1;
426
              response_CMD[127:96] <= CardStatus ;
427
              CardStatus[12:9] <=`TRAN;
428
          end
429
          else begin
430
               CardTransferActive <= 0;
431
               response_CMD[127:96] <= CardStatus ;
432
               CardStatus[12:9] <=3;
433
          end
434
         end
435
        end
436 79 tac2
        8 : response_CMD[127:96] <= 0; //V1.0 card
437 96 tac2
        16 : begin
438
          response_CMD[127:96] <= CardStatus ;
439
 
440
        end
441 79 tac2
        17 : response_CMD[127:96]<= 48;
442 96 tac2
        24 : begin
443
          if (outDelayCnt==0) begin
444
            if (CardStatus[12:9] == 4) begin //If card is in transferstate
445
              if (CardStatus[8]) begin //If Free write buffer           
446
                CardStatus[12:9] <=`RCV;//Put card in Rcv state
447
                response_CMD[127:96] <= CardStatus ;
448
                BlockAddr = inCmd[39:8];
449
                if (BlockAddr%512 !=0)
450
                  $display("**Block Misalign Error");
451
              end
452
              else begin
453
                response_CMD[127:96] <= CardStatus;
454
                 $fdisplay(sdModel_file_desc, "**Error Try to blockwrite when No Free Writebuffer") ;
455
                 $display("**Error Try to blockwrite when No Free Writebuffer") ;
456
             end
457
           end
458
           else begin
459
             response_S <= 0;
460
             response_CMD[127:96] <= 0;
461
           end
462
         end
463
 
464
       end
465 79 tac2
        33 : response_CMD[127:96] <= 48;
466
        55 :
467
        begin
468
          response_CMD[127:96] <= CardStatus ;
469
          CardStatus[5] <=1;      //Next CMD is AP specific CMD
470
          appendCrc<=1;
471
        end
472
        41 :
473
        begin
474
         if (cardIdentificationState) begin
475
            if (lastCMD != 55 && outDelayCnt==0) begin
476
               $fdisplay(sdModel_file_desc, "**Error in sequnce, CMD 55 should precede 41 in Startup state") ;
477 96 tac2
               $display( "**Error in sequnce, CMD 55 should precede 41 in Startup state") ;
478 79 tac2
               CardStatus[3]<=1;
479
            end
480
            else begin
481
             responseType=3;
482
             response_CMD[127:96] <= OCR;
483
             appendCrc<=0;
484
             CardStatus[5] <=0;
485
            if (Busy==1)
486
              CardStatus[12:9] <=1;
487
           end
488
        end
489
       end
490
 
491
    endcase
492
     ValidCmd<=1;
493
     crcIn<=0;
494
 
495
     outDelayCnt<=outDelayCnt+1;
496
     if (outDelayCnt==`outDelay)
497
       crcRst<=1;
498
     oeCmd<=1;
499
     cmdOut<=1;
500
     response_CMD[135:134] <=0;
501
 
502
    if (responseType != 3)
503
       response_CMD[133:128] <=inCmd[45:40];
504
    if (responseType == 3)
505
       response_CMD[133:128] <=6'b111111;
506
 
507
     lastCMD <=inCmd[45:40];
508
    end
509
   end
510
 
511
 
512
 
513
 endcase
514
end
515
 
516
always @ ( negedge sdClk) begin
517
 case(state)
518
 
519
SEND_CMD: begin
520
     crcRst<=0;
521
     crcEn<=1;
522
    cmdWrite<=cmdWrite+1;
523
    if (response_S!=0)
524
     cmdOut<=0;
525
   else
526
      cmdOut<=1;
527
 
528
    if ((cmdWrite>0) &&  (cmdWrite < response_S-8)) begin
529
      cmdOut<=response_CMD[135-cmdWrite];
530
      crcIn<=response_CMD[134-cmdWrite];
531
      if (cmdWrite >= response_S-9)
532
       crcEn<=0;
533
    end
534
   else if (cmdWrite!=0) begin
535
     crcEn<=0;
536
     cmdOut<=crcOut[6-crcCnt];
537
     crcCnt<=crcCnt+1;
538
      if (responseType == 3)
539
           cmdOut<=1;
540
   end
541
  if (cmdWrite == response_S-1)
542
    cmdOut<=1;
543
 
544
  end
545
 endcase
546
end
547
 
548 96 tac2
always @ (posedge sdClk) begin
549
 
550
  case (dataState)
551
  DATA_IDLE: begin
552
      oeDat<=0;
553
  end
554
 
555
  READ_WAITS: begin
556
      oeDat<=0;
557
      crcDat_rst<=0;
558
      crcDat_en<=1;
559
      crcDat_in<=0;
560
      crc_c<=15;//
561
      crc_ok<=1;
562
  end
563
  READ_DATA: begin
564
 
565
 
566
    InbuffStatus<=1;
567
    if (transf_cnt<`BIT_BLOCK_REC) begin
568
       if (wptr)
569
         Inbuff[block_cnt][7:4] <= dat;
570
       else
571
          Inbuff[block_cnt][3:0] <= dat;
572
 
573
       crcDat_in<=dat;
574
       crc_ok<=1;
575
       transf_cnt<=transf_cnt+1;
576
       if (wptr)
577
         block_cnt<=block_cnt+1;
578
       wptr<=~wptr;
579
    end
580
    else if  ( transf_cnt <= (`BIT_BLOCK_REC +`BIT_CRC_CYCLE-1)) begin
581
       transf_cnt<=transf_cnt+1;
582
       crcDat_en<=0;
583
       last_din <=dat;
584
 
585 97 tac2
       if (transf_cnt> `BIT_BLOCK_REC) begin
586 96 tac2
        crc_c<=crc_c-1;
587
 
588
          if (crcDat_out[0][crc_c] != last_din[0])
589
           crc_ok<=0;
590
          if  (crcDat_out[1][crc_c] != last_din[1])
591
           crc_ok<=0;
592
          if  (crcDat_out[2][crc_c] != last_din[2])
593
           crc_ok<=0;
594
          if  (crcDat_out[3][crc_c] != last_din[3])
595
           crc_ok<=0;
596
      end
597
    end
598
  end
599
  WRITE_FLASH: begin
600
     oeDat<=1;
601
     block_cnt <=0;
602
     wptr<=0;
603
     transf_cnt<=0;
604
     crcDat_rst<=1;
605
     crcDat_en<=0;
606
     crcDat_in<=0;
607
 
608
 
609
  end
610
 
611
  endcase
612
 
613
 
614
end
615
 
616
 
617
 
618
 
619
always @ (posedge sdClk) begin
620
 
621
  case (dataState)
622
  IDLE: begin
623
 
624
 
625
 
626
  end
627
  WRITE_FLASH: begin
628
    flash_write_cnt<=flash_write_cnt+1;
629
     CardStatus[12:9] <= `PRG;
630
    if (flash_write_cnt == 0)
631
      datOut<=1;
632
    else if(flash_write_cnt == 1)
633
     datOut[0]<=0;
634 97 tac2
 
635
    else if ((flash_write_cnt > 1) && (flash_write_cnt < 6)) begin
636 96 tac2
      if (crc_ok)
637 97 tac2
        datOut[0] <=okcrctoken[5-flash_write_cnt];
638 96 tac2
      else
639 97 tac2
        datOut[0] <= invalidcrctoken[5-flash_write_cnt];
640 96 tac2
    end
641 97 tac2
    else if  ((flash_write_cnt >= 6) && (flash_write_cnt < 263)) begin
642 96 tac2
       datOut[0]<=0;
643
       datOut[1]<=1;
644
       datOut[2]<=1;
645
       datOut[3]<=1;
646
      flash_blockwrite_cnt<=flash_blockwrite_cnt+2;
647
       FLASHmem[BlockAddr+(flash_blockwrite_cnt)]<=Inbuff[flash_blockwrite_cnt];
648
       FLASHmem[BlockAddr+(flash_blockwrite_cnt+1)]<=Inbuff[flash_blockwrite_cnt+1];
649
    end
650
    else begin
651
      datOut<=1;
652
      InbuffStatus<=0;
653
      CardStatus[12:9] <= `TRAN;
654
    end
655
  end
656
endcase
657
end
658
 
659 79 tac2
integer sdModel_file_desc;
660 96 tac2
 
661 79 tac2
initial
662
begin
663
  sdModel_file_desc = $fopen("log/sd_model.log");
664
  if (sdModel_file_desc < 2)
665
  begin
666 96 tac2
    $display("*E Could not open/create testbench log file in /log/ directory!");
667 79 tac2
    $finish;
668
  end
669
end
670
 
671
task ResetCard; //  MAC registers
672
begin
673 96 tac2
 cardIdentificationState<=1;
674 79 tac2
  state<=IDLE;
675 96 tac2
  dataState<=DATA_IDLE;
676 79 tac2
  Busy<=0;
677
  oeCmd<=0;
678
  crcCnt<=0;
679 96 tac2
  CardTransferActive<=0;
680 79 tac2
  qCmd<=1;
681
  oeDat<=0;
682
  cmdOut<=0;
683
  cmdWrite<=0;
684 96 tac2
 
685
  InbuffStatus<=0;
686 79 tac2
  datOut<=0;
687
  inCmd<=0;
688 96 tac2
  BusWidth<=1;
689 79 tac2
  responseType=0;
690
  crcIn<=0;
691
  response_S<=0;
692
  crcEn<=0;
693
  crcRst<=0;
694
  cmdRead<=0;
695
  ValidCmd<=0;
696
  inValidCmd=0;
697
  appendCrc<=0;
698
  RCA<= `RCASTART;
699
  OCR<= `OCRSTART;
700
  CardStatus <= `STATUSSTART;
701
  CID<=`CIDSTART;
702
  response_CMD<=0;
703
  outDelayCnt<=0;
704 96 tac2
  crcDat_rst<=1;
705
  crcDat_en<=0;
706
  crcDat_in<=0;
707
  transf_cnt<=0;
708
  BlockAddr<=0;
709
  block_cnt <=0;
710
     wptr<=0;
711
     transf_cnt<=0;
712
     crcDat_rst<=1;
713
     crcDat_en<=0;
714
     crcDat_in<=0;
715
     flash_write_cnt<=0;
716
flash_blockwrite_cnt<=0;
717 79 tac2
end
718
endtask
719
 
720
 
721
endmodule

powered by: WebSVN 2.1.0

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