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

Subversion Repositories apbi2c

[/] [apbi2c/] [trunk/] [rtl/] [module_i2c.v] - Blame information for rev 18

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

Line No. Rev Author Line
1 2 redbear
//////////////////////////////////////////////////////////////////
2
////
3
////
4
////    TOP I2C BLOCK to I2C Core
5
////
6
////
7
////
8
//// This file is part of the APB to I2C project
9
////
10
//// http://www.opencores.org/cores/apbi2c/
11
////
12
////
13
////
14
//// Description
15
////
16
//// Implementation of APB IP core according to
17
////
18
//// apbi2c_spec IP core specification document.
19
////
20
////
21
////
22
//// To Do: Things are right here but always all block can suffer changes
23
////
24
////
25
////
26
////
27
////
28
//// Author(s): - Felipe Fernandes Da Costa, fefe2560@gmail.com
29 4 redbear
////              Ronal Dario Celaya ,rcelaya.dario@gmail.com
30 2 redbear
////
31
///////////////////////////////////////////////////////////////// 
32
////
33
////
34
//// Copyright (C) 2009 Authors and OPENCORES.ORG
35
////
36
////
37
////
38
//// This source file may be used and distributed without
39
////
40
//// restriction provided that this copyright statement is not
41
////
42
//// removed from the file and that any derivative work contains
43
//// the original copyright notice and the associated disclaimer.
44
////
45
////
46
//// This source file is free software; you can redistribute it
47
////
48
//// and/or modify it under the terms of the GNU Lesser General
49
////
50
//// Public License as published by the Free Software Foundation;
51
//// either version 2.1 of the License, or (at your option) any
52
////
53
//// later version.
54
////
55
////
56
////
57
//// This source is distributed in the hope that it will be
58
////
59
//// useful, but WITHOUT ANY WARRANTY; without even the implied
60
////
61
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
62
////
63
//// PURPOSE. See the GNU Lesser General Public License for more
64
//// details.
65
////
66
////
67
////
68
//// You should have received a copy of the GNU Lesser General
69
////
70
//// Public License along with this source; if not, download it
71
////
72
//// from http://www.opencores.org/lgpl.shtml
73
////
74
////
75
///////////////////////////////////////////////////////////////////
76
 
77
 
78
`timescale 1ns/1ps //timescale 
79
 
80
module module_i2c#(
81
                        //THIS IS USED ONLY LIKE PARAMETER TO BEM CONFIGURABLE
82
                        parameter integer DWIDTH = 32,
83
                        parameter integer AWIDTH = 14
84
                )
85
                (
86
                //I2C INTERFACE WITH ANOTHER BLOCKS
87
                 input PCLK,
88
                 input PRESETn,
89
 
90
                //INTERFACE WITH FIFO TRANSMISSION
91
                 input fifo_tx_f_full,
92
                 input fifo_tx_f_empty,
93
                 input [DWIDTH-1:0] fifo_tx_data_out,
94
 
95
                //INTERFACE WITH FIFO RECEIVER
96
                 input fifo_rx_f_full,
97
                 input fifo_rx_f_empty,
98 6 redbear
                 output reg fifo_rx_wr_en,
99
                 output reg [DWIDTH-1:0] fifo_rx_data_in,
100 2 redbear
 
101
                //INTERFACE WITH REGISTER CONFIGURATION
102
                 input [AWIDTH-1:0] DATA_CONFIG_REG,
103
 
104
                //INTERFACE TO APB AND READ FOR FIFO TX
105
                 output reg fifo_tx_rd_en,
106
                 output TX_EMPTY,
107
                 output RX_EMPTY,
108
                 output ERROR,
109
 
110
                //I2C BI DIRETIONAL PORTS
111
                inout SDA,
112
                inout SCL
113
 
114
 
115
                 );
116
 
117
//THIS IS USED TO GENERATE INTERRUPTIONS
118
assign TX_EMPTY = (fifo_tx_f_empty == 1'b1)? 1'b1:1'b0;
119
assign RX_EMPTY = (fifo_rx_f_empty == 1'b1)? 1'b1:1'b0;
120
 
121
        //THIS COUNT IS USED TO CONTROL DATA ACCROSS FSM        
122 6 redbear
        reg [1:0] count_tx;
123 2 redbear
        //CONTROL CLOCK AND COUNTER
124
        reg [11:0] count_send_data;
125
        reg BR_CLK_O;
126
        reg SDA_OUT;
127
 
128
        //RESPONSE USED TO HOLD SIGNAL TO ACK OR NACK
129
        reg RESPONSE;
130
 
131
// TX PARAMETERS USED TO STATE MACHINE
132
 
133
localparam [5:0] TX_IDLE = 6'd0, //IDLE
134
 
135
           TX_START = 6'd1,//START BIT
136
 
137
           TX_CONTROLIN_1 = 6'd2, //START BYTE
138
           TX_CONTROLIN_2 = 6'd3,
139
           TX_CONTROLIN_3 = 6'd4,
140
           TX_CONTROLIN_4 = 6'd5,
141
           TX_CONTROLIN_5 = 6'd6,
142
           TX_CONTROLIN_6 = 6'd7,
143
           TX_CONTROLIN_7 = 6'd8,
144
           TX_CONTROLIN_8 = 6'd9, //END FIRST BYTE
145
 
146
           TX_RESPONSE_CIN =6'd10, //RESPONSE
147
 
148
           TX_ADRESS_1 = 6'd11,//START BYTE
149
           TX_ADRESS_2 = 6'd12,
150
           TX_ADRESS_3 = 6'd13,
151
           TX_ADRESS_4 = 6'd14,
152
           TX_ADRESS_5 = 6'd15,
153
           TX_ADRESS_6 = 6'd16,
154
           TX_ADRESS_7 = 6'd17,
155
           TX_ADRESS_8 = 6'd18,//END FIRST BYTE
156
 
157
           TX_RESPONSE_ADRESS =6'd19, //RESPONSE
158
 
159
           TX_DATA0_1 = 6'd20,//START BYTE
160
           TX_DATA0_2 = 6'd21,
161
           TX_DATA0_3 = 6'd22,
162
           TX_DATA0_4 = 6'd23,
163
           TX_DATA0_5 = 6'd24,
164
           TX_DATA0_6 = 6'd25,
165
           TX_DATA0_7 = 6'd26,
166
           TX_DATA0_8 = 6'd27,//END FIRST BYTE
167
 
168
           TX_RESPONSE_DATA0_1 = 6'd28,  //RESPONSE
169
 
170
           TX_DATA1_1 = 6'd29,//START BYTE
171
           TX_DATA1_2 = 6'd30,
172
           TX_DATA1_3 = 6'd31,
173
           TX_DATA1_4 = 6'd32,
174
           TX_DATA1_5 = 6'd33,
175
           TX_DATA1_6 = 6'd34,
176
           TX_DATA1_7 = 6'd35,
177
           TX_DATA1_8 = 6'd36,//END FIRST BYTE
178
 
179
           TX_RESPONSE_DATA1_1 = 6'd37,//RESPONSE
180
 
181
           TX_DELAY_BYTES = 6'd38,//USED ONLY IN ACK TO DELAY BETWEEN
182
           TX_NACK = 6'd39,//USED ONLY IN ACK TO DELAY BETWEEN BYTES
183
           TX_STOP = 6'd40;//USED TO SEND STOP BIT
184
 
185
        //STATE CONTROL 
186
        reg [5:0] state_tx;
187
        reg [5:0] next_state_tx;
188
 
189
//ASSIGN REGISTERS TO BIDIRETIONAL PORTS
190 11 redbear
assign SDA = (DATA_CONFIG_REG[0] == 1'b1 & DATA_CONFIG_REG[1] == 1'b0)?SDA_OUT:1'b0;
191
assign SCL = (DATA_CONFIG_REG[0] == 1'b1 & DATA_CONFIG_REG[1] == 1'b0)?BR_CLK_O:1'b0;
192 2 redbear
 
193 4 redbear
//STANDARD ERROR
194
assign ERROR = (DATA_CONFIG_REG[0] == 1'b1 & DATA_CONFIG_REG[1] == 1'b1)?1'b1:1'b0;
195 2 redbear
 
196
//COMBINATIONAL BLOCK TO TX
197
always@(*)
198
begin
199
 
200
        //THE FUN START HERE :-)
201
        //COMBINATIONAL UPDATE STATE BE CAREFUL WITH WHAT YOU MAKE HERE
202
        next_state_tx = state_tx;
203
 
204
        case(state_tx)//STATE_TX IS MORE SECURE CHANGE ONLY IF YOU KNOW WHAT ARE YOU DOING 
205
        TX_IDLE:
206
        begin
207
                //OBEYING SPEC
208 18 redbear
                if(DATA_CONFIG_REG[0] == 1'b0 && (fifo_tx_f_full == 1'b1 || fifo_tx_f_empty == 1'b0) && DATA_CONFIG_REG[1] == 1'b0)
209 2 redbear
                begin
210
                        next_state_tx = TX_IDLE;
211
                end
212 18 redbear
                else if(DATA_CONFIG_REG[0] == 1'b1 && (fifo_tx_f_full == 1'b1 || fifo_tx_f_empty == 1'b0) && DATA_CONFIG_REG[1] == 1'b1)
213 2 redbear
                begin
214 4 redbear
                        next_state_tx = TX_IDLE;
215
                end
216 18 redbear
                else if(DATA_CONFIG_REG[0] == 1'b1 && (fifo_tx_f_full == 1'b1 || fifo_tx_f_empty == 1'b0) && DATA_CONFIG_REG[1] == 1'b0)
217 4 redbear
                begin
218 2 redbear
                        next_state_tx = TX_START;
219
                end
220
 
221
 
222
        end
223
        TX_START://THIS IS USED TOO ALL STATE MACHINES THE COUNTER_SEND_DATA
224
        begin
225
                if(count_send_data != DATA_CONFIG_REG[13:2])
226
                begin
227
                        next_state_tx = TX_START;
228
                end
229
                else
230
                begin
231
                        next_state_tx = TX_CONTROLIN_1;
232
                end
233
 
234
        end
235
        TX_CONTROLIN_1:
236
        begin
237
                if(count_send_data != DATA_CONFIG_REG[13:2])
238
                begin
239
                        next_state_tx = TX_CONTROLIN_1;
240
                end
241
                else
242
                begin
243
                        next_state_tx = TX_CONTROLIN_2;
244
                end
245
 
246
        end
247
        TX_CONTROLIN_2:
248
        begin
249
 
250
                if(count_send_data != DATA_CONFIG_REG[13:2])
251
                begin
252
                        next_state_tx =TX_CONTROLIN_2;
253
                end
254
                else
255
                begin
256
                        next_state_tx = TX_CONTROLIN_3;
257
                end
258
 
259
        end
260
        TX_CONTROLIN_3:
261
        begin
262
 
263
                if(count_send_data != DATA_CONFIG_REG[13:2])
264
                begin
265
                        next_state_tx = TX_CONTROLIN_3;
266
                end
267
                else
268
                begin
269
                        next_state_tx = TX_CONTROLIN_4;
270
                end
271
        end
272
        TX_CONTROLIN_4:
273
        begin
274
 
275
                if(count_send_data != DATA_CONFIG_REG[13:2])
276
                begin
277
                        next_state_tx = TX_CONTROLIN_4;
278
                end
279
                else
280
                begin
281
                        next_state_tx = TX_CONTROLIN_5;
282
                end
283
        end
284
        TX_CONTROLIN_5:
285
        begin
286
 
287
                if(count_send_data != DATA_CONFIG_REG[13:2])
288
                begin
289
                        next_state_tx = TX_CONTROLIN_5;
290
                end
291
                else
292
                begin
293
                        next_state_tx = TX_CONTROLIN_6;
294
                end
295
        end
296
        TX_CONTROLIN_6:
297
        begin
298
 
299
                if(count_send_data != DATA_CONFIG_REG[13:2])
300
                begin
301
                        next_state_tx = TX_CONTROLIN_6;
302
                end
303
                else
304
                begin
305
                        next_state_tx = TX_CONTROLIN_7;
306
                end
307
        end
308
        TX_CONTROLIN_7:
309
        begin
310
 
311
                if(count_send_data != DATA_CONFIG_REG[13:2])
312
                begin
313
                        next_state_tx = TX_CONTROLIN_7;
314
                end
315
                else
316
                begin
317
                        next_state_tx = TX_CONTROLIN_8;
318
                end
319
        end
320
        TX_CONTROLIN_8:
321
        begin
322
 
323
                if(count_send_data != DATA_CONFIG_REG[13:2])
324
                begin
325
                        next_state_tx = TX_CONTROLIN_8;
326
                end
327
                else
328
                begin
329
                        next_state_tx = TX_RESPONSE_CIN;
330
                end
331
        end
332
        TX_RESPONSE_CIN:
333
        begin
334
 
335
                if(count_send_data != DATA_CONFIG_REG[13:2])
336
                begin
337
                        next_state_tx = TX_RESPONSE_CIN;
338
                end
339
                else if(RESPONSE == 1'b0)//ACK
340
                begin
341
                        next_state_tx = TX_DELAY_BYTES;
342
                end
343
                else if(RESPONSE == 1'b1)//NACK
344
                begin
345
                        next_state_tx = TX_NACK;
346
                end
347
 
348
        end
349
 
350
        //NOW SENDING ADDRESS
351
        TX_ADRESS_1:
352
        begin
353
                if(count_send_data != DATA_CONFIG_REG[13:2])
354
                begin
355
                        next_state_tx = TX_ADRESS_1;
356
                end
357
                else
358
                begin
359
                        next_state_tx = TX_ADRESS_2;
360
                end
361
        end
362
        TX_ADRESS_2:
363
        begin
364
                if(count_send_data != DATA_CONFIG_REG[13:2])
365
                begin
366
                        next_state_tx = TX_ADRESS_2;
367
                end
368
                else
369
                begin
370
                        next_state_tx = TX_ADRESS_3;
371
                end
372
        end
373
        TX_ADRESS_3:
374
        begin
375
                if(count_send_data != DATA_CONFIG_REG[13:2])
376
                begin
377
                        next_state_tx = TX_ADRESS_3;
378
                end
379
                else
380
                begin
381
                        next_state_tx = TX_ADRESS_4;
382
                end
383
        end
384
        TX_ADRESS_4:
385
        begin
386
                if(count_send_data != DATA_CONFIG_REG[13:2])
387
                begin
388
                        next_state_tx = TX_ADRESS_4;
389
                end
390
                else
391
                begin
392
                        next_state_tx = TX_ADRESS_5;
393
                end
394
        end
395
        TX_ADRESS_5:
396
        begin
397
                if(count_send_data != DATA_CONFIG_REG[13:2])
398
                begin
399
                        next_state_tx = TX_ADRESS_5;
400
                end
401
                else
402
                begin
403
                        next_state_tx = TX_ADRESS_6;
404
                end
405
        end
406
        TX_ADRESS_6:
407
        begin
408
                if(count_send_data != DATA_CONFIG_REG[13:2])
409
                begin
410
                        next_state_tx = TX_ADRESS_6;
411
                end
412
                else
413
                begin
414
                        next_state_tx = TX_ADRESS_7;
415
                end
416
        end
417
        TX_ADRESS_7:
418
        begin
419
                if(count_send_data != DATA_CONFIG_REG[13:2])
420
                begin
421
                        next_state_tx = TX_ADRESS_7;
422
                end
423
                else
424
                begin
425
                        next_state_tx = TX_ADRESS_8;
426
                end
427
        end
428
        TX_ADRESS_8:
429
        begin
430
                if(count_send_data != DATA_CONFIG_REG[13:2])
431
                begin
432
                        next_state_tx = TX_ADRESS_8;
433
                end
434
                else
435
                begin
436
                        next_state_tx = TX_RESPONSE_ADRESS;
437
                end
438
        end
439
        TX_RESPONSE_ADRESS:
440
        begin
441
                if(count_send_data != DATA_CONFIG_REG[13:2])
442
                begin
443
                        next_state_tx = TX_RESPONSE_ADRESS;
444
                end
445
                else if(RESPONSE == 1'b0)//ACK
446
                begin
447
                        next_state_tx = TX_DELAY_BYTES;
448
                end
449
                else if(RESPONSE == 1'b1)//NACK --> RESTART CONDITION AND BACK TO START BYTE AGAIN
450
                begin
451
                        next_state_tx = TX_NACK;
452
                end
453
        end
454
 
455
        //data in
456
        TX_DATA0_1:
457
        begin
458
                if(count_send_data != DATA_CONFIG_REG[13:2])
459
                begin
460
                        next_state_tx = TX_DATA0_1;
461
                end
462
                else
463
                begin
464
                        next_state_tx = TX_DATA0_2;
465
                end
466
        end
467
        TX_DATA0_2:
468
        begin
469
                if(count_send_data != DATA_CONFIG_REG[13:2])
470
                begin
471
                        next_state_tx = TX_DATA0_2;
472
                end
473
                else
474
                begin
475
                        next_state_tx = TX_DATA0_3;
476
                end
477
        end
478
        TX_DATA0_3:
479
        begin
480
                if(count_send_data != DATA_CONFIG_REG[13:2])
481
                begin
482
                        next_state_tx = TX_DATA0_3;
483
                end
484
                else
485
                begin
486
                        next_state_tx = TX_DATA0_4;
487
                end
488
        end
489
        TX_DATA0_4:
490
        begin
491
                if(count_send_data != DATA_CONFIG_REG[13:2])
492
                begin
493
                        next_state_tx = TX_DATA0_4;
494
                end
495
                else
496
                begin
497
                        next_state_tx = TX_DATA0_5;
498
                end
499
        end
500
        TX_DATA0_5:
501
        begin
502
                if(count_send_data != DATA_CONFIG_REG[13:2])
503
                begin
504
                        next_state_tx = TX_DATA0_5;
505
                end
506
                else
507
                begin
508
                        next_state_tx = TX_DATA0_6;
509
                end
510
        end
511
        TX_DATA0_6:
512
        begin
513
                if(count_send_data != DATA_CONFIG_REG[13:2])
514
                begin
515
                        next_state_tx = TX_DATA0_6;
516
                end
517
                else
518
                begin
519
                        next_state_tx = TX_DATA0_7;
520
                end
521
        end
522
        TX_DATA0_7:
523
        begin
524
                if(count_send_data != DATA_CONFIG_REG[13:2])
525
                begin
526
                        next_state_tx = TX_DATA0_7;
527
                end
528
                else
529
                begin
530
                        next_state_tx = TX_DATA0_8;
531
                end
532
        end
533
        TX_DATA0_8:
534
        begin
535
                if(count_send_data != DATA_CONFIG_REG[13:2])
536
                begin
537
                        next_state_tx = TX_DATA0_8;
538
                end
539
                else
540
                begin
541
                        next_state_tx = TX_RESPONSE_DATA0_1;
542
                end
543
        end
544
        TX_RESPONSE_DATA0_1:
545
        begin
546
                if(count_send_data != DATA_CONFIG_REG[13:2])
547
                begin
548
                        next_state_tx = TX_RESPONSE_DATA0_1;
549
                end
550
                else if(RESPONSE == 1'b0)//ACK
551
                begin
552
                        next_state_tx = TX_DELAY_BYTES;
553
                end
554
                else if(RESPONSE == 1'b1)//NACK
555
                begin
556
                        next_state_tx = TX_NACK;
557
                end
558
        end
559
 
560
        //second byte
561
        TX_DATA1_1:
562
        begin
563
                if(count_send_data != DATA_CONFIG_REG[13:2])
564
                begin
565
                        next_state_tx = TX_DATA1_1;
566
                end
567
                else
568
                begin
569
                        next_state_tx = TX_DATA1_2;
570
                end
571
        end
572
        TX_DATA1_2:
573
        begin
574
                if(count_send_data != DATA_CONFIG_REG[13:2])
575
                begin
576
                        next_state_tx = TX_DATA1_2;
577
                end
578
                else
579
                begin
580
                        next_state_tx = TX_DATA1_3;
581
                end
582
        end
583
        TX_DATA1_3:
584
        begin
585
                if(count_send_data != DATA_CONFIG_REG[13:2])
586
                begin
587
                        next_state_tx = TX_DATA1_3;
588
                end
589
                else
590
                begin
591
                        next_state_tx = TX_DATA1_4;
592
                end
593
        end
594
        TX_DATA1_4:
595
        begin
596
                if(count_send_data != DATA_CONFIG_REG[13:2])
597
                begin
598
                        next_state_tx = TX_DATA1_4;
599
                end
600
                else
601
                begin
602
                        next_state_tx = TX_DATA1_5;
603
                end
604
        end
605
        TX_DATA1_5:
606
        begin
607
                if(count_send_data != DATA_CONFIG_REG[13:2])
608
                begin
609
                        next_state_tx = TX_DATA1_5;
610
                end
611
                else
612
                begin
613
                        next_state_tx = TX_DATA1_6;
614
                end
615
        end
616
        TX_DATA1_6:
617
        begin
618
                if(count_send_data != DATA_CONFIG_REG[13:2])
619
                begin
620
                        next_state_tx = TX_DATA1_6;
621
                end
622
                else
623
                begin
624
                        next_state_tx = TX_DATA1_7;
625
                end
626
        end
627
        TX_DATA1_7:
628
        begin
629
                if(count_send_data != DATA_CONFIG_REG[13:2])
630
                begin
631
                        next_state_tx = TX_DATA1_7;
632
                end
633
                else
634
                begin
635
                        next_state_tx = TX_DATA1_8;
636
                end
637
        end
638
        TX_DATA1_8:
639
        begin
640
                if(count_send_data != DATA_CONFIG_REG[13:2])
641
                begin
642
                        next_state_tx = TX_DATA1_8;
643
                end
644
                else
645
                begin
646
                        next_state_tx = TX_RESPONSE_DATA1_1;
647
                end
648
        end
649
        TX_RESPONSE_DATA1_1:
650
        begin
651
                if(count_send_data != DATA_CONFIG_REG[13:2])
652
                begin
653
                        next_state_tx = TX_RESPONSE_DATA1_1;
654
                end
655
                else if(RESPONSE == 1'b0)//ACK
656
                begin
657
                        next_state_tx = TX_DELAY_BYTES;
658
                end
659
                else if(RESPONSE == 1'b1)//NACK
660
                begin
661
                        next_state_tx = TX_NACK;
662
                end
663
        end
664
        TX_DELAY_BYTES://THIS FORM WORKS 
665
        begin
666
 
667
 
668
                if(count_send_data != DATA_CONFIG_REG[13:2])
669
                begin
670
                        next_state_tx = TX_DELAY_BYTES;
671
                end
672
                else
673
                begin
674
 
675 6 redbear
                        if(count_tx == 2'd0)
676 2 redbear
                        begin
677
                                next_state_tx = TX_ADRESS_1;
678
                        end
679 6 redbear
                        else if(count_tx == 2'd1)
680 2 redbear
                        begin
681
                                next_state_tx = TX_DATA0_1;
682
                        end
683 6 redbear
                        else if(count_tx == 2'd2)
684 2 redbear
                        begin
685
                                next_state_tx = TX_DATA1_1;
686
                        end
687 6 redbear
                        else if(count_tx == 2'd3)
688 2 redbear
                        begin
689
                                next_state_tx = TX_STOP;
690
                        end
691
 
692
                end
693
 
694
        end
695
        TX_NACK://NOT TESTED YET !!!!
696
        begin
697
                if(count_send_data != DATA_CONFIG_REG[13:2]*2'd2)
698
                begin
699
                        next_state_tx = TX_NACK;
700
                end
701
                else
702
                begin
703 6 redbear
                        if(count_tx == 2'd0)
704 2 redbear
                        begin
705
                                next_state_tx = TX_CONTROLIN_1;
706
                        end
707 6 redbear
                        else if(count_tx == 2'd1)
708 2 redbear
                        begin
709
                                next_state_tx = TX_ADRESS_1;
710
                        end
711 6 redbear
                        else if(count_tx == 2'd2)
712 2 redbear
                        begin
713
                                next_state_tx = TX_DATA0_1;
714
                        end
715 6 redbear
                        else if(count_tx == 2'd3)
716 2 redbear
                        begin
717
                                next_state_tx = TX_DATA1_1;
718
                        end
719
                end
720
        end
721
        TX_STOP://THIS WORK
722
        begin
723
                if(count_send_data != DATA_CONFIG_REG[13:2])
724
                begin
725
                        next_state_tx = TX_STOP;
726
                end
727
                else
728
                begin
729
                        next_state_tx = TX_IDLE;
730
                end
731
        end
732
        default:
733
        begin
734
                next_state_tx = TX_IDLE;
735
        end
736
        endcase
737
 
738
 
739
end
740 6 redbear
//SEQUENTIAL TX
741 2 redbear
always@(posedge PCLK)
742
begin
743
 
744
        //RESET SYNC
745
        if(!PRESETn)
746
        begin
747
                //SIGNALS MUST BE RESETED
748
                count_send_data <= 12'd0;
749
                state_tx <= TX_IDLE;
750
                SDA_OUT<= 1'b1;
751
                fifo_tx_rd_en <= 1'b0;
752 6 redbear
                count_tx <= 2'd0;
753 2 redbear
                BR_CLK_O <= 1'b1;
754
                RESPONSE<= 1'b0;
755
        end
756
        else
757
        begin
758
 
759
                // SEQUENTIAL FUN START
760
                state_tx <= next_state_tx;
761
 
762
                case(state_tx)
763
                TX_IDLE:
764
                begin
765
 
766
                        fifo_tx_rd_en <= 1'b0;
767
 
768
 
769 18 redbear
                        if(DATA_CONFIG_REG[0] == 1'b0 && (fifo_tx_f_full == 1'b1 ||fifo_tx_f_empty == 1'b0) && DATA_CONFIG_REG[1] == 1'b0)
770 2 redbear
                        begin
771
                                count_send_data <= 12'd0;
772
                                SDA_OUT<= 1'b1;
773
                                BR_CLK_O <= 1'b1;
774
                        end
775 18 redbear
                        else if(DATA_CONFIG_REG[0] == 1'b1 && (fifo_tx_f_full == 1'b1 ||fifo_tx_f_empty == 1'b0) && DATA_CONFIG_REG[1] == 1'b0)
776 2 redbear
                        begin
777
                                count_send_data <= count_send_data + 12'd1;
778
                                SDA_OUT<=1'b0;
779 4 redbear
                        end
780 18 redbear
                        else if(DATA_CONFIG_REG[0] == 1'b1 && (fifo_tx_f_full == 1'b1 ||fifo_tx_f_empty == 1'b0) && DATA_CONFIG_REG[1] == 1'b1)
781 4 redbear
                        begin
782
                                count_send_data <= 12'd0;
783
                                SDA_OUT<= 1'b1;
784
                                BR_CLK_O <= 1'b1;
785 2 redbear
                        end
786
 
787
                end
788
                TX_START:
789
                begin
790
 
791
                        if(count_send_data < DATA_CONFIG_REG[13:2])
792
                        begin
793
                                count_send_data <= count_send_data + 12'd1;
794
                                BR_CLK_O <= 1'b0;
795
                        end
796
                        else
797
                        begin
798 7 redbear
                                count_send_data <= 12'd0;
799 2 redbear
                        end
800
 
801
                        if(count_send_data == DATA_CONFIG_REG[13:2]- 12'd1)
802
                        begin
803 6 redbear
                                SDA_OUT<=fifo_tx_data_out[0:0];
804
                                count_tx <= 2'd0;
805 2 redbear
                        end
806
 
807
                end
808
                TX_CONTROLIN_1:
809
                begin
810
 
811
 
812
 
813
                        if(count_send_data < DATA_CONFIG_REG[13:2])
814
                        begin
815
 
816
                                count_send_data <= count_send_data + 12'd1;
817
                                SDA_OUT<=fifo_tx_data_out[0:0];
818
 
819 7 redbear
 
820
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
821 2 redbear
                                begin
822 7 redbear
                                        BR_CLK_O <= 1'b0;
823
                                end
824
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
825
                                begin
826 2 redbear
                                        BR_CLK_O <= 1'b1;
827
                                end
828 7 redbear
                                else
829 2 redbear
                                begin
830
                                        BR_CLK_O <= 1'b0;
831
                                end
832
                        end
833
                        else
834
                        begin
835
                                count_send_data <= 12'd0;
836
                                SDA_OUT<=fifo_tx_data_out[1:1];
837
                        end
838
 
839
 
840
                end
841
 
842
                TX_CONTROLIN_2:
843
                begin
844
 
845
 
846
 
847
                        if(count_send_data < DATA_CONFIG_REG[13:2])
848
                        begin
849
                                count_send_data <= count_send_data + 12'd1;
850
                                SDA_OUT<=fifo_tx_data_out[1:1];
851
 
852 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
853 2 redbear
                                begin
854 7 redbear
                                        BR_CLK_O <= 1'b0;
855
                                end
856
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
857
                                begin
858 2 redbear
                                        BR_CLK_O <= 1'b1;
859
                                end
860 7 redbear
                                else
861 2 redbear
                                begin
862
                                        BR_CLK_O <= 1'b0;
863 7 redbear
                                end
864 2 redbear
                        end
865
                        else
866
                        begin
867
                                count_send_data <= 12'd0;
868
                                SDA_OUT<=fifo_tx_data_out[2:2];
869
                        end
870
 
871
                end
872
 
873
                TX_CONTROLIN_3:
874
                begin
875
 
876
 
877
 
878
                        if(count_send_data < DATA_CONFIG_REG[13:2])
879
                        begin
880
                                count_send_data <= count_send_data + 12'd1;
881
                                SDA_OUT<=fifo_tx_data_out[2:2];
882
 
883 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
884 2 redbear
                                begin
885 7 redbear
                                        BR_CLK_O <= 1'b0;
886
                                end
887
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
888
                                begin
889 2 redbear
                                        BR_CLK_O <= 1'b1;
890
                                end
891 7 redbear
                                else
892 2 redbear
                                begin
893
                                        BR_CLK_O <= 1'b0;
894 7 redbear
                                end
895 2 redbear
                        end
896
                        else
897
                        begin
898
                                count_send_data <= 12'd0;
899
                                SDA_OUT<=fifo_tx_data_out[3:3];
900
                        end
901
 
902
 
903
 
904
                end
905
                TX_CONTROLIN_4:
906
                begin
907
 
908
 
909
 
910
                        if(count_send_data < DATA_CONFIG_REG[13:2])
911
                        begin
912
                                count_send_data <= count_send_data + 12'd1;
913
                                SDA_OUT<=fifo_tx_data_out[3:3];
914
 
915 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
916 2 redbear
                                begin
917 7 redbear
                                        BR_CLK_O <= 1'b0;
918
                                end
919
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
920
                                begin
921 2 redbear
                                        BR_CLK_O <= 1'b1;
922
                                end
923 7 redbear
                                else
924 2 redbear
                                begin
925
                                        BR_CLK_O <= 1'b0;
926 7 redbear
                                end
927 2 redbear
                        end
928
                        else
929
                        begin
930
                                count_send_data <= 12'd0;
931
                                SDA_OUT<=fifo_tx_data_out[4:4];
932
                        end
933
 
934
                end
935
 
936
                TX_CONTROLIN_5:
937
                begin
938
 
939
 
940
 
941
                        if(count_send_data < DATA_CONFIG_REG[13:2])
942
                        begin
943
                                count_send_data <= count_send_data + 12'd1;
944
                                SDA_OUT<=fifo_tx_data_out[4:4];
945
 
946 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
947 2 redbear
                                begin
948 7 redbear
                                        BR_CLK_O <= 1'b0;
949
                                end
950
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
951
                                begin
952 2 redbear
                                        BR_CLK_O <= 1'b1;
953
                                end
954 7 redbear
                                else
955 2 redbear
                                begin
956
                                        BR_CLK_O <= 1'b0;
957 7 redbear
                                end
958 2 redbear
                        end
959
                        else
960
                        begin
961
                                count_send_data <= 12'd0;
962
                                SDA_OUT<=fifo_tx_data_out[5:5];
963
                        end
964
 
965
                end
966
 
967
 
968
                TX_CONTROLIN_6:
969
                begin
970
 
971
                        if(count_send_data < DATA_CONFIG_REG[13:2])
972
                        begin
973
                                count_send_data <= count_send_data + 12'd1;
974
                                SDA_OUT<=fifo_tx_data_out[5:5];
975
 
976 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
977 2 redbear
                                begin
978 7 redbear
                                        BR_CLK_O <= 1'b0;
979
                                end
980
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
981
                                begin
982 2 redbear
                                        BR_CLK_O <= 1'b1;
983
                                end
984 7 redbear
                                else
985 2 redbear
                                begin
986
                                        BR_CLK_O <= 1'b0;
987
                                end
988
                        end
989
                        else
990
                        begin
991
                                count_send_data <= 12'd0;
992
                                SDA_OUT<=fifo_tx_data_out[6:6];
993
                        end
994
 
995
 
996
                end
997
 
998
                TX_CONTROLIN_7:
999
                begin
1000
 
1001
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1002
                        begin
1003
                                count_send_data <= count_send_data + 12'd1;
1004
                                SDA_OUT<=fifo_tx_data_out[6:6];
1005
 
1006 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1007 2 redbear
                                begin
1008 7 redbear
                                        BR_CLK_O <= 1'b0;
1009
                                end
1010
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1011
                                begin
1012 2 redbear
                                        BR_CLK_O <= 1'b1;
1013
                                end
1014 7 redbear
                                else
1015 2 redbear
                                begin
1016
                                        BR_CLK_O <= 1'b0;
1017
                                end
1018
                        end
1019
                        else
1020
                        begin
1021
                                count_send_data <= 12'd0;
1022
                                SDA_OUT<=fifo_tx_data_out[7:7];
1023
                        end
1024
 
1025
 
1026
                end
1027
                TX_CONTROLIN_8:
1028
                begin
1029
 
1030
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1031
                        begin
1032
                                count_send_data <= count_send_data + 12'd1;
1033
                                SDA_OUT<=fifo_tx_data_out[7:7];
1034
 
1035 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1036 2 redbear
                                begin
1037 7 redbear
                                        BR_CLK_O <= 1'b0;
1038
                                end
1039
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1040
                                begin
1041 2 redbear
                                        BR_CLK_O <= 1'b1;
1042
                                end
1043 7 redbear
                                else
1044 2 redbear
                                begin
1045
                                        BR_CLK_O <= 1'b0;
1046 7 redbear
                                end
1047 2 redbear
                        end
1048
                        else
1049
                        begin
1050
                                count_send_data <= 12'd0;
1051
                                SDA_OUT<= 1'b0;
1052
                        end
1053
 
1054
 
1055
                end
1056
                TX_RESPONSE_CIN:
1057
                begin
1058
 
1059
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1060
                        begin
1061
                                count_send_data <= count_send_data + 12'd1;
1062
 
1063
                                //LETS TRY USE THIS BUT I DONT THINK IF WORKS  
1064
                                RESPONSE<= SDA;
1065
 
1066 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1067 2 redbear
                                begin
1068 7 redbear
                                        BR_CLK_O <= 1'b0;
1069
                                end
1070
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1071
                                begin
1072 2 redbear
                                        BR_CLK_O <= 1'b1;
1073
                                end
1074 7 redbear
                                else
1075 2 redbear
                                begin
1076
                                        BR_CLK_O <= 1'b0;
1077 7 redbear
                                end
1078 2 redbear
                        end
1079
                        else
1080
                        begin
1081
                                count_send_data <= 12'd0;
1082
                        end
1083
 
1084
 
1085
                end
1086
                TX_ADRESS_1:
1087
                begin
1088
 
1089
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1090
                        begin
1091
                                count_send_data <= count_send_data + 12'd1;
1092
                                SDA_OUT<=fifo_tx_data_out[8:8];
1093
 
1094 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1095 2 redbear
                                begin
1096 7 redbear
                                        BR_CLK_O <= 1'b0;
1097
                                end
1098
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1099
                                begin
1100 2 redbear
                                        BR_CLK_O <= 1'b1;
1101
                                end
1102 7 redbear
                                else
1103 2 redbear
                                begin
1104
                                        BR_CLK_O <= 1'b0;
1105 7 redbear
                                end
1106 2 redbear
                        end
1107
                        else
1108
                        begin
1109
                                count_send_data <= 12'd0;
1110
                                SDA_OUT<=fifo_tx_data_out[9:9];
1111
                        end
1112
 
1113
                end
1114
                TX_ADRESS_2:
1115
                begin
1116
 
1117
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1118
                        begin
1119
                                count_send_data <= count_send_data + 12'd1;
1120
                                SDA_OUT<=fifo_tx_data_out[9:9];
1121
 
1122 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1123 2 redbear
                                begin
1124 7 redbear
                                        BR_CLK_O <= 1'b0;
1125
                                end
1126
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1127
                                begin
1128 2 redbear
                                        BR_CLK_O <= 1'b1;
1129
                                end
1130 7 redbear
                                else
1131 2 redbear
                                begin
1132
                                        BR_CLK_O <= 1'b0;
1133 7 redbear
                                end
1134 2 redbear
                        end
1135
                        else
1136
                        begin
1137
                                count_send_data <= 12'd0;
1138
                                SDA_OUT<=fifo_tx_data_out[10:10];
1139
                        end
1140
 
1141
                end
1142
                TX_ADRESS_3:
1143
                begin
1144
 
1145
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1146
                        begin
1147
                                count_send_data <= count_send_data + 12'd1;
1148
                                SDA_OUT<=fifo_tx_data_out[10:10];
1149
 
1150 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1151 2 redbear
                                begin
1152 7 redbear
                                        BR_CLK_O <= 1'b0;
1153
                                end
1154
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1155
                                begin
1156 2 redbear
                                        BR_CLK_O <= 1'b1;
1157
                                end
1158 7 redbear
                                else
1159 2 redbear
                                begin
1160
                                        BR_CLK_O <= 1'b0;
1161 7 redbear
                                end
1162 2 redbear
                        end
1163
                        else
1164
                        begin
1165
                                count_send_data <= 12'd0;
1166
                                SDA_OUT<=fifo_tx_data_out[11:11];
1167
                        end
1168
 
1169
                end
1170
                TX_ADRESS_4:
1171
                begin
1172
 
1173
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1174
                        begin
1175
                                count_send_data <= count_send_data + 12'd1;
1176
                                SDA_OUT<=fifo_tx_data_out[11:11];
1177
 
1178 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1179 2 redbear
                                begin
1180 7 redbear
                                        BR_CLK_O <= 1'b0;
1181
                                end
1182
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1183
                                begin
1184 2 redbear
                                        BR_CLK_O <= 1'b1;
1185
                                end
1186 7 redbear
                                else
1187 2 redbear
                                begin
1188
                                        BR_CLK_O <= 1'b0;
1189 7 redbear
                                end
1190 2 redbear
                        end
1191
                        else
1192
                        begin
1193
                                count_send_data <= 12'd0;
1194
                                SDA_OUT<=fifo_tx_data_out[12:12];
1195
                        end
1196
                end
1197
                TX_ADRESS_5:
1198
                begin
1199
 
1200
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1201
                        begin
1202
                                count_send_data <= count_send_data + 12'd1;
1203
                                SDA_OUT<=fifo_tx_data_out[12:12];
1204
 
1205 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1206 2 redbear
                                begin
1207 7 redbear
                                        BR_CLK_O <= 1'b0;
1208
                                end
1209
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1210
                                begin
1211 2 redbear
                                        BR_CLK_O <= 1'b1;
1212
                                end
1213 7 redbear
                                else
1214 2 redbear
                                begin
1215
                                        BR_CLK_O <= 1'b0;
1216 7 redbear
                                end
1217 2 redbear
                        end
1218
                        else
1219
                        begin
1220
                                count_send_data <= 12'd0;
1221
                                SDA_OUT<=fifo_tx_data_out[13:13];
1222
                        end
1223
 
1224
 
1225
                end
1226
                TX_ADRESS_6:
1227
                begin
1228
 
1229
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1230
                        begin
1231
                                count_send_data <= count_send_data + 12'd1;
1232
                                SDA_OUT<=fifo_tx_data_out[13:13];
1233
 
1234 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1235 2 redbear
                                begin
1236 7 redbear
                                        BR_CLK_O <= 1'b0;
1237
                                end
1238
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1239
                                begin
1240 2 redbear
                                        BR_CLK_O <= 1'b1;
1241
                                end
1242 7 redbear
                                else
1243 2 redbear
                                begin
1244
                                        BR_CLK_O <= 1'b0;
1245
                                end
1246
                        end
1247
                        else
1248
                        begin
1249 7 redbear
                                count_send_data <= 12'd0;
1250 2 redbear
                                SDA_OUT<=fifo_tx_data_out[14:14];
1251
                        end
1252
 
1253
                end
1254
                TX_ADRESS_7:
1255
                begin
1256
 
1257
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1258
                        begin
1259
                                count_send_data <= count_send_data + 12'd1;
1260
                                SDA_OUT<=fifo_tx_data_out[14:14];
1261
 
1262 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1263 2 redbear
                                begin
1264 7 redbear
                                        BR_CLK_O <= 1'b0;
1265
                                end
1266
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1267
                                begin
1268 2 redbear
                                        BR_CLK_O <= 1'b1;
1269
                                end
1270 7 redbear
                                else
1271 2 redbear
                                begin
1272
                                        BR_CLK_O <= 1'b0;
1273 7 redbear
                                end
1274 2 redbear
                        end
1275
                        else
1276
                        begin
1277
                                count_send_data <= 12'd0;
1278
                                SDA_OUT<=fifo_tx_data_out[15:15];
1279
                        end
1280
 
1281
 
1282
                end
1283
                TX_ADRESS_8:
1284
                begin
1285
 
1286
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1287
                        begin
1288
                                count_send_data <= count_send_data + 12'd1;
1289
                                SDA_OUT<=fifo_tx_data_out[15:15];
1290
 
1291 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1292 2 redbear
                                begin
1293 7 redbear
                                        BR_CLK_O <= 1'b0;
1294
                                end
1295
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1296
                                begin
1297 2 redbear
                                        BR_CLK_O <= 1'b1;
1298
                                end
1299 7 redbear
                                else
1300 2 redbear
                                begin
1301
                                        BR_CLK_O <= 1'b0;
1302
                                end
1303
                        end
1304
                        else
1305
                        begin
1306
                                count_send_data <= 12'd0;
1307 18 redbear
                                SDA_OUT<=1'b0;
1308 2 redbear
                        end
1309
 
1310
                end
1311
                TX_RESPONSE_ADRESS:
1312
                begin
1313
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1314
                        begin
1315
                                count_send_data <= count_send_data + 12'd1;
1316
 
1317
                                //LETS TRY USE THIS BUT I DONT THINK IF WORKS  
1318
                                RESPONSE<= SDA;
1319
 
1320 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1321 2 redbear
                                begin
1322 7 redbear
                                        BR_CLK_O <= 1'b0;
1323
                                end
1324
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1325
                                begin
1326 2 redbear
                                        BR_CLK_O <= 1'b1;
1327
                                end
1328 7 redbear
                                else
1329 2 redbear
                                begin
1330
                                        BR_CLK_O <= 1'b0;
1331
                                end
1332
                        end
1333
                        else
1334
                        begin
1335
                                count_send_data <= 12'd0;
1336
                        end
1337
 
1338
                end
1339
                TX_DATA0_1:
1340
                begin
1341
 
1342
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1343
                        begin
1344
                                count_send_data <= count_send_data + 12'd1;
1345
                                SDA_OUT<=fifo_tx_data_out[16:16];
1346
 
1347 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1348 2 redbear
                                begin
1349 7 redbear
                                        BR_CLK_O <= 1'b0;
1350
                                end
1351
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1352
                                begin
1353 2 redbear
                                        BR_CLK_O <= 1'b1;
1354
                                end
1355 7 redbear
                                else
1356 2 redbear
                                begin
1357
                                        BR_CLK_O <= 1'b0;
1358
                                end
1359
                        end
1360
                        else
1361
                        begin
1362
                                count_send_data <= 12'd0;
1363
                                SDA_OUT<=fifo_tx_data_out[17:17];
1364
                        end
1365
 
1366
 
1367
                end
1368
                TX_DATA0_2:
1369
                begin
1370
 
1371
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1372
                        begin
1373
                                count_send_data <= count_send_data + 12'd1;
1374
                                SDA_OUT<=fifo_tx_data_out[17:17];
1375
 
1376 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1377 2 redbear
                                begin
1378 7 redbear
                                        BR_CLK_O <= 1'b0;
1379
                                end
1380
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1381
                                begin
1382 2 redbear
                                        BR_CLK_O <= 1'b1;
1383
                                end
1384 7 redbear
                                else
1385 2 redbear
                                begin
1386
                                        BR_CLK_O <= 1'b0;
1387 7 redbear
                                end
1388 2 redbear
                        end
1389
                        else
1390
                        begin
1391
                                count_send_data <= 12'd0;
1392
                                SDA_OUT<=fifo_tx_data_out[18:18];
1393
                        end
1394
 
1395
 
1396
                end
1397
                TX_DATA0_3:
1398
                begin
1399
 
1400
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1401
                        begin
1402
                                count_send_data <= count_send_data + 12'd1;
1403
                                SDA_OUT<=fifo_tx_data_out[18:18];
1404
 
1405 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1406 2 redbear
                                begin
1407 7 redbear
                                        BR_CLK_O <= 1'b0;
1408
                                end
1409
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1410
                                begin
1411 2 redbear
                                        BR_CLK_O <= 1'b1;
1412
                                end
1413 7 redbear
                                else
1414 2 redbear
                                begin
1415
                                        BR_CLK_O <= 1'b0;
1416 7 redbear
                                end
1417 2 redbear
                        end
1418
                        else
1419
                        begin
1420
                                count_send_data <= 12'd0;
1421
                                SDA_OUT<=fifo_tx_data_out[19:19];
1422
                        end
1423
 
1424
                end
1425
                TX_DATA0_4:
1426
                begin
1427
 
1428
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1429
                        begin
1430
                                count_send_data <= count_send_data + 12'd1;
1431
                                SDA_OUT<=fifo_tx_data_out[19:19];
1432
 
1433 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1434 2 redbear
                                begin
1435 7 redbear
                                        BR_CLK_O <= 1'b0;
1436
                                end
1437
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1438
                                begin
1439 2 redbear
                                        BR_CLK_O <= 1'b1;
1440
                                end
1441 7 redbear
                                else
1442 2 redbear
                                begin
1443
                                        BR_CLK_O <= 1'b0;
1444 7 redbear
                                end
1445 2 redbear
                        end
1446
                        else
1447
                        begin
1448
                                count_send_data <= 12'd0;
1449
                                SDA_OUT<=fifo_tx_data_out[20:20];
1450
                        end
1451
 
1452
                end
1453
                TX_DATA0_5:
1454
                begin
1455
 
1456
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1457
                        begin
1458
                                count_send_data <= count_send_data + 12'd1;
1459
                                SDA_OUT<=fifo_tx_data_out[20:20];
1460
 
1461 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1462 2 redbear
                                begin
1463 7 redbear
                                        BR_CLK_O <= 1'b0;
1464
                                end
1465
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1466
                                begin
1467 2 redbear
                                        BR_CLK_O <= 1'b1;
1468
                                end
1469 7 redbear
                                else
1470 2 redbear
                                begin
1471
                                        BR_CLK_O <= 1'b0;
1472
                                end
1473
                        end
1474
                        else
1475
                        begin
1476
                                count_send_data <= 12'd0;
1477
                                SDA_OUT<=fifo_tx_data_out[21:21];
1478
                        end
1479
 
1480
                end
1481
                TX_DATA0_6:
1482
                begin
1483
 
1484
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1485
                        begin
1486
                                count_send_data <= count_send_data + 12'd1;
1487
                                SDA_OUT<=fifo_tx_data_out[21:21];
1488
 
1489 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1490 2 redbear
                                begin
1491 7 redbear
                                        BR_CLK_O <= 1'b0;
1492
                                end
1493
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1494
                                begin
1495 2 redbear
                                        BR_CLK_O <= 1'b1;
1496
                                end
1497 7 redbear
                                else
1498 2 redbear
                                begin
1499
                                        BR_CLK_O <= 1'b0;
1500
                                end
1501
                        end
1502
                        else
1503
                        begin
1504
                                count_send_data <= 12'd0;
1505
                                SDA_OUT<=fifo_tx_data_out[22:22];
1506
                        end
1507
 
1508
                end
1509
                TX_DATA0_7:
1510
                begin
1511
 
1512
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1513
                        begin
1514
                                count_send_data <= count_send_data + 12'd1;
1515
                                SDA_OUT<=fifo_tx_data_out[22:22];
1516
 
1517 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1518 2 redbear
                                begin
1519 7 redbear
                                        BR_CLK_O <= 1'b0;
1520
                                end
1521
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1522
                                begin
1523 2 redbear
                                        BR_CLK_O <= 1'b1;
1524
                                end
1525 7 redbear
                                else
1526 2 redbear
                                begin
1527
                                        BR_CLK_O <= 1'b0;
1528 7 redbear
                                end
1529 2 redbear
                        end
1530
                        else
1531
                        begin
1532
                                count_send_data <= 12'd0;
1533
                                SDA_OUT<=fifo_tx_data_out[23:23];
1534
                        end
1535
 
1536
                end
1537
                TX_DATA0_8:
1538
                begin
1539
 
1540
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1541
                        begin
1542
                                count_send_data <= count_send_data + 12'd1;
1543
                                SDA_OUT<=fifo_tx_data_out[23:23];
1544
 
1545 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1546 2 redbear
                                begin
1547 7 redbear
                                        BR_CLK_O <= 1'b0;
1548
                                end
1549
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1550
                                begin
1551 2 redbear
                                        BR_CLK_O <= 1'b1;
1552
                                end
1553 7 redbear
                                else
1554 2 redbear
                                begin
1555
                                        BR_CLK_O <= 1'b0;
1556
                                end
1557
 
1558
                        end
1559
                        else
1560
                        begin
1561
                                count_send_data <= 12'd0;
1562 18 redbear
                                SDA_OUT<=1'b0;
1563 2 redbear
                        end
1564
 
1565
                end
1566
                TX_RESPONSE_DATA0_1:
1567
                begin
1568
 
1569
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1570
                        begin
1571
                                count_send_data <= count_send_data + 12'd1;
1572
 
1573
                                //LETS TRY USE THIS BUT I DONT THINK IF WORKS  
1574
                                RESPONSE<= SDA;
1575
 
1576 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1577 2 redbear
                                begin
1578 7 redbear
                                        BR_CLK_O <= 1'b0;
1579
                                end
1580
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1581
                                begin
1582 2 redbear
                                        BR_CLK_O <= 1'b1;
1583
                                end
1584 7 redbear
                                else
1585 2 redbear
                                begin
1586
                                        BR_CLK_O <= 1'b0;
1587 7 redbear
                                end
1588 2 redbear
                        end
1589
                        else
1590
                        begin
1591
                                count_send_data <= 12'd0;
1592
                        end
1593
 
1594
                end
1595
                TX_DATA1_1:
1596
                begin
1597
 
1598
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1599
                        begin
1600
                                count_send_data <= count_send_data + 12'd1;
1601
                                SDA_OUT<=fifo_tx_data_out[24:24];
1602
 
1603 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1604 2 redbear
                                begin
1605 7 redbear
                                        BR_CLK_O <= 1'b0;
1606
                                end
1607
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1608
                                begin
1609 2 redbear
                                        BR_CLK_O <= 1'b1;
1610
                                end
1611 7 redbear
                                else
1612 2 redbear
                                begin
1613
                                        BR_CLK_O <= 1'b0;
1614 7 redbear
                                end
1615 2 redbear
                        end
1616
                        else
1617
                        begin
1618
                                count_send_data <= 12'd0;
1619
                                SDA_OUT<=fifo_tx_data_out[25:25];
1620
 
1621
                        end
1622
 
1623
 
1624
                end
1625
                TX_DATA1_2:
1626
                begin
1627
 
1628
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1629
                        begin
1630
                                count_send_data <= count_send_data + 12'd1;
1631
                                SDA_OUT<=fifo_tx_data_out[25:25];
1632
 
1633 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1634 2 redbear
                                begin
1635 7 redbear
                                        BR_CLK_O <= 1'b0;
1636
                                end
1637
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1638
                                begin
1639 2 redbear
                                        BR_CLK_O <= 1'b1;
1640
                                end
1641 7 redbear
                                else
1642 2 redbear
                                begin
1643
                                        BR_CLK_O <= 1'b0;
1644 7 redbear
                                end
1645 2 redbear
                        end
1646
                        else
1647
                        begin
1648
                                count_send_data <= 12'd0;
1649
                                SDA_OUT<=fifo_tx_data_out[26:26];
1650
                        end
1651
 
1652
                end
1653
                TX_DATA1_3:
1654
                begin
1655
 
1656
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1657
                        begin
1658
                                count_send_data <= count_send_data + 12'd1;
1659
                                SDA_OUT<=fifo_tx_data_out[26:26];
1660
 
1661 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1662 2 redbear
                                begin
1663 7 redbear
                                        BR_CLK_O <= 1'b0;
1664
                                end
1665
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1666
                                begin
1667 2 redbear
                                        BR_CLK_O <= 1'b1;
1668
                                end
1669 7 redbear
                                else
1670 2 redbear
                                begin
1671
                                        BR_CLK_O <= 1'b0;
1672
                                end
1673
 
1674
                        end
1675
                        else
1676
                        begin
1677
                                count_send_data <= 12'd0;
1678
                                SDA_OUT<=fifo_tx_data_out[27:27];
1679
                        end
1680
 
1681
                end
1682
                TX_DATA1_4:
1683
                begin
1684
 
1685
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1686
                        begin
1687
                                count_send_data <= count_send_data + 12'd1;
1688
                                SDA_OUT<=fifo_tx_data_out[27:27];
1689
 
1690 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1691 2 redbear
                                begin
1692 7 redbear
                                        BR_CLK_O <= 1'b0;
1693
                                end
1694
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1695
                                begin
1696 2 redbear
                                        BR_CLK_O <= 1'b1;
1697
                                end
1698 7 redbear
                                else
1699 2 redbear
                                begin
1700
                                        BR_CLK_O <= 1'b0;
1701 7 redbear
                                end
1702 2 redbear
 
1703
                        end
1704
                        else
1705
                        begin
1706
                                count_send_data <= 12'd0;
1707
                                SDA_OUT<=fifo_tx_data_out[28:28];
1708
                        end
1709
 
1710
                end
1711
                TX_DATA1_5:
1712
                begin
1713
 
1714
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1715
                        begin
1716
                                count_send_data <= count_send_data + 12'd1;
1717
                                SDA_OUT<=fifo_tx_data_out[28:28];
1718
 
1719 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1720 2 redbear
                                begin
1721 7 redbear
                                        BR_CLK_O <= 1'b0;
1722
                                end
1723
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1724
                                begin
1725 2 redbear
                                        BR_CLK_O <= 1'b1;
1726
                                end
1727 7 redbear
                                else
1728 2 redbear
                                begin
1729
                                        BR_CLK_O <= 1'b0;
1730
                                end
1731
 
1732
                        end
1733
                        else
1734
                        begin
1735
                                count_send_data <= 12'd0;
1736
                                SDA_OUT<=fifo_tx_data_out[29:29];
1737
                        end
1738
 
1739
                end
1740
                TX_DATA1_6:
1741
                begin
1742
 
1743
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1744
                        begin
1745
                                count_send_data <= count_send_data + 12'd1;
1746
                                SDA_OUT<=fifo_tx_data_out[29:29];
1747
 
1748 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1749 2 redbear
                                begin
1750 7 redbear
                                        BR_CLK_O <= 1'b0;
1751
                                end
1752
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1753
                                begin
1754 2 redbear
                                        BR_CLK_O <= 1'b1;
1755
                                end
1756 7 redbear
                                else
1757 2 redbear
                                begin
1758
                                        BR_CLK_O <= 1'b0;
1759
                                end
1760
 
1761
                        end
1762
                        else
1763
                        begin
1764
                                count_send_data <= 12'd0;
1765
                                SDA_OUT<=fifo_tx_data_out[30:30];
1766
                        end
1767
 
1768
                end
1769
                TX_DATA1_7:
1770
                begin
1771
 
1772
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1773
                        begin
1774
                                count_send_data <= count_send_data + 12'd1;
1775
                                SDA_OUT<=fifo_tx_data_out[30:30];
1776
 
1777 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1778 2 redbear
                                begin
1779 7 redbear
                                        BR_CLK_O <= 1'b0;
1780
                                end
1781
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1782
                                begin
1783 2 redbear
                                        BR_CLK_O <= 1'b1;
1784
                                end
1785 7 redbear
                                else
1786 2 redbear
                                begin
1787
                                        BR_CLK_O <= 1'b0;
1788
                                end
1789
 
1790
                        end
1791
                        else
1792
                        begin
1793
                                count_send_data <= 12'd0;
1794
                                SDA_OUT<=fifo_tx_data_out[31:31];
1795
                        end
1796
 
1797
 
1798
                end
1799
                TX_DATA1_8:
1800
                begin
1801
 
1802
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1803
                        begin
1804
                                count_send_data <= count_send_data + 12'd1;
1805
                                SDA_OUT<=fifo_tx_data_out[31:31];
1806
 
1807 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1808 2 redbear
                                begin
1809 7 redbear
                                        BR_CLK_O <= 1'b0;
1810
                                end
1811
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1812
                                begin
1813 2 redbear
                                        BR_CLK_O <= 1'b1;
1814
                                end
1815 7 redbear
                                else
1816 2 redbear
                                begin
1817
                                        BR_CLK_O <= 1'b0;
1818
                                end
1819
 
1820
                        end
1821
                        else
1822
                        begin
1823
                                count_send_data <= 12'd0;
1824 18 redbear
                                SDA_OUT<=1'b0;
1825 2 redbear
                        end
1826
 
1827
                end
1828
                TX_RESPONSE_DATA1_1:
1829
                begin
1830
                        //fifo_tx_rd_en <= 1'b1;
1831
 
1832
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1833
                        begin
1834
                                count_send_data <= count_send_data + 12'd1;
1835
 
1836
                                //LETS TRY USE THIS BUT I DONT THINK IF WORKS  
1837
                                RESPONSE<= SDA;
1838
 
1839 7 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd4)
1840 2 redbear
                                begin
1841 7 redbear
                                        BR_CLK_O <= 1'b0;
1842
                                end
1843
                                else if(count_send_data >= DATA_CONFIG_REG[13:2]/12'd4 && count_send_data < (DATA_CONFIG_REG[13:2]-(DATA_CONFIG_REG[13:2]/12'd4))-12'd1)
1844
                                begin
1845 2 redbear
                                        BR_CLK_O <= 1'b1;
1846
                                end
1847 7 redbear
                                else
1848 2 redbear
                                begin
1849
                                        BR_CLK_O <= 1'b0;
1850 7 redbear
                                end
1851 2 redbear
                        end
1852
                        else
1853
                        begin
1854
                                count_send_data <= 12'd0;
1855
                                fifo_tx_rd_en <= 1'b1;
1856
                        end
1857
 
1858
                end
1859
                TX_DELAY_BYTES:
1860
                begin
1861
 
1862
                        fifo_tx_rd_en <= 1'b0;
1863
 
1864
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1865
                        begin
1866
 
1867
                                count_send_data <= count_send_data + 12'd1;
1868
                                BR_CLK_O <= 1'b0;
1869
                                SDA_OUT<=1'b0;
1870
                        end
1871
                        else
1872
                        begin
1873
 
1874
 
1875 6 redbear
                                if(count_tx == 2'd0)
1876 2 redbear
                                begin
1877 6 redbear
                                        count_tx <= count_tx + 2'd1;
1878 2 redbear
                                        SDA_OUT<=fifo_tx_data_out[8:8];
1879
                                end
1880 6 redbear
                                else if(count_tx == 2'd1)
1881 2 redbear
                                begin
1882 6 redbear
                                        count_tx <= count_tx + 2'd1;
1883 2 redbear
                                        SDA_OUT<=fifo_tx_data_out[16:16];
1884
                                end
1885 6 redbear
                                else if(count_tx == 2'd2)
1886 2 redbear
                                begin
1887 6 redbear
                                        count_tx <= count_tx + 2'd1;
1888 2 redbear
                                        SDA_OUT<=fifo_tx_data_out[24:24];
1889
                                end
1890 6 redbear
                                else if(count_tx == 2'd3)
1891 2 redbear
                                begin
1892 6 redbear
                                        count_tx <= 2'd0;
1893 2 redbear
                                end
1894
 
1895
                                count_send_data <= 12'd0;
1896
 
1897
                        end
1898
 
1899
                end
1900
                //THIS BLOCK MUST BE CHECKED WITH CARE
1901
                TX_NACK:// MORE A RESTART 
1902
                begin
1903
                        fifo_tx_rd_en <= 1'b0;
1904
 
1905
                        if(count_send_data < DATA_CONFIG_REG[13:2]*2'd2)
1906
                        begin
1907
                                count_send_data <= count_send_data + 12'd1;
1908
 
1909 6 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd2)
1910 2 redbear
                                begin
1911
                                        SDA_OUT<=1'b0;
1912
                                end
1913
                                else if(count_send_data > DATA_CONFIG_REG[13:2]/12'd2-12'd1 && count_send_data < DATA_CONFIG_REG[13:2])
1914
                                begin
1915
                                        SDA_OUT<=1'b1;
1916
                                end
1917
                                else if(count_send_data  == DATA_CONFIG_REG[13:2]*2'd2)
1918
                                begin
1919
                                        SDA_OUT<=1'b0;
1920
                                end
1921
 
1922 6 redbear
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd2)
1923 2 redbear
                                begin
1924
                                        BR_CLK_O <= 1'b1;
1925
                                end
1926
                                else if(count_send_data > DATA_CONFIG_REG[13:2]/12'd2-12'd1 && count_send_data < DATA_CONFIG_REG[13:2])
1927
                                begin
1928
                                        BR_CLK_O <= 1'b0;
1929
                                end
1930
                                else if(count_send_data < DATA_CONFIG_REG[13:2]*2'd2)
1931
                                begin
1932
                                        BR_CLK_O <= 1'b1;
1933
                                end
1934
 
1935
                        end
1936
                        else
1937
                        begin
1938
                                count_send_data <= 12'd0;
1939
 
1940 6 redbear
                                if(count_tx == 2'd0)
1941 2 redbear
                                begin
1942 6 redbear
                                        count_tx <= 2'd0;
1943 2 redbear
                                        SDA_OUT<=fifo_tx_data_out[0:0];
1944
                                end
1945 6 redbear
                                else if(count_tx == 2'd1)
1946 2 redbear
                                begin
1947 6 redbear
                                        count_tx <= 2'd1;
1948 2 redbear
                                        SDA_OUT<=fifo_tx_data_out[8:8];
1949
                                end
1950 6 redbear
                                else if(count_tx == 2'd2)
1951 2 redbear
                                begin
1952 6 redbear
                                        count_tx <= 2'd2;
1953 2 redbear
                                        SDA_OUT<=fifo_tx_data_out[16:16];
1954
                                end
1955 6 redbear
                                else if(count_tx == 2'd3)
1956 2 redbear
                                begin
1957 6 redbear
                                        count_tx <= 2'd3;
1958 2 redbear
                                        SDA_OUT<=fifo_tx_data_out[24:24];
1959
                                end
1960
 
1961
 
1962
                        end
1963
                end
1964
                TX_STOP:
1965
                begin
1966 7 redbear
 
1967
                        BR_CLK_O <= 1'b1;
1968
 
1969 2 redbear
                        if(count_send_data < DATA_CONFIG_REG[13:2])
1970
                        begin
1971
                                count_send_data <= count_send_data + 12'd1;
1972
 
1973
                                if(count_send_data < DATA_CONFIG_REG[13:2]/12'd2-12'd2)
1974
                                begin
1975
                                        SDA_OUT<=1'b0;
1976
                                end
1977
                                else if(count_send_data > DATA_CONFIG_REG[13:2]/12'd2-12'd1 && count_send_data < DATA_CONFIG_REG[13:2])
1978
                                begin
1979
                                        SDA_OUT<=1'b1;
1980
                                end
1981
                        end
1982
                        else
1983
                        begin
1984
                                count_send_data <= 12'd0;
1985
                        end
1986
                end
1987
                default:
1988
                begin
1989
                        fifo_tx_rd_en <= 1'b0;
1990
                        count_send_data <= 12'd4095;
1991
                end
1992
                endcase
1993
 
1994
        end
1995
 
1996
 
1997
end
1998
 
1999
 
2000 6 redbear
// RX PARAMETERS USED TO STATE MACHINE
2001 2 redbear
 
2002 6 redbear
localparam [5:0] RX_IDLE = 6'd0, //IDLE
2003
 
2004
           RX_START = 6'd1,//START BIT
2005
 
2006
           RX_CONTROLIN_1 = 6'd2, //START BYTE
2007
           RX_CONTROLIN_2 = 6'd3,
2008
           RX_CONTROLIN_3 = 6'd4,
2009
           RX_CONTROLIN_4 = 6'd5,
2010
           RX_CONTROLIN_5 = 6'd6,
2011
           RX_CONTROLIN_6 = 6'd7,
2012
           RX_CONTROLIN_7 = 6'd8,
2013
           RX_CONTROLIN_8 = 6'd9, //END FIRST BYTE
2014
 
2015
           RX_RESPONSE_CIN =6'd10, //RESPONSE
2016
 
2017
           RX_ADRESS_1 = 6'd11,//START BYTE
2018
           RX_ADRESS_2 = 6'd12,
2019
           RX_ADRESS_3 = 6'd13,
2020
           RX_ADRESS_4 = 6'd14,
2021
           RX_ADRESS_5 = 6'd15,
2022
           RX_ADRESS_6 = 6'd16,
2023
           RX_ADRESS_7 = 6'd17,
2024
           RX_ADRESS_8 = 6'd18,//END FIRST BYTE
2025
 
2026
           RX_RESPONSE_ADRESS =6'd19, //RESPONSE
2027
 
2028
           RX_DATA0_1 = 6'd20,//START BYTE
2029
           RX_DATA0_2 = 6'd21,
2030
           RX_DATA0_3 = 6'd22,
2031
           RX_DATA0_4 = 6'd23,
2032
           RX_DATA0_5 = 6'd24,
2033
           RX_DATA0_6 = 6'd25,
2034
           RX_DATA0_7 = 6'd26,
2035
           RX_DATA0_8 = 6'd27,//END FIRST BYTE
2036
 
2037
           RX_RESPONSE_DATA0_1 = 6'd28,  //RESPONSE
2038
 
2039
           RX_DATA1_1 = 6'd29,//START BYTE
2040
           RX_DATA1_2 = 6'd30,
2041
           RX_DATA1_3 = 6'd31,
2042
           RX_DATA1_4 = 6'd32,
2043
           RX_DATA1_5 = 6'd33,
2044
           RX_DATA1_6 = 6'd34,
2045
           RX_DATA1_7 = 6'd35,
2046
           RX_DATA1_8 = 6'd36,//END FIRST BYTE
2047
 
2048
           RX_RESPONSE_DATA1_1 = 6'd37,//RESPONSE
2049
 
2050
           RX_DELAY_BYTES = 6'd38,//USED ONLY IN ACK TO DELAY BETWEEN
2051
           RX_NACK = 6'd39,//USED ONLY IN ACK TO DELAY BETWEEN BYTES
2052
           RX_STOP = 6'd40;//USED TO SEND STOP BIT
2053
 
2054
        //STATE CONTROL 
2055
        reg [5:0] state_rx;
2056
        reg [5:0] next_state_rx;
2057
 
2058
        reg [11:0] count_receive_data;
2059
 
2060
        reg [1:0] count_rx;
2061
 
2062
//COMBINATIONAL BLOCK RX
2063
 
2064
always@(*)
2065
begin
2066
 
2067
 
2068
        next_state_rx = state_rx;
2069
 
2070
        case(state_rx)//STATE_RX IS MORE SECURE CHANGE ONLY IF YOU KNOW WHAT ARE YOU DOING 
2071
        RX_IDLE:
2072
        begin
2073
                //OBEYING SPEC
2074
                if(DATA_CONFIG_REG[1] == 1'b0 && DATA_CONFIG_REG[0] == 1'b0)
2075
                begin
2076
                        next_state_rx = RX_IDLE;
2077
                end
2078
                else if(DATA_CONFIG_REG[1] == 1'b1 && DATA_CONFIG_REG[0] == 1'b1)
2079
                begin
2080
                        next_state_rx = RX_IDLE;
2081
                end
2082
                else if(DATA_CONFIG_REG[1] == 1'b1 && DATA_CONFIG_REG[0] == 1'b0 && SDA == 1'b0 && SCL == 1'b1)
2083
                begin
2084
                        next_state_rx = RX_START;
2085
                end
2086
        end
2087
        RX_START:
2088
        begin
2089
 
2090
                if(SDA == 1'b0 && SCL == 1'b1)
2091
                begin
2092
                        if(count_receive_data != DATA_CONFIG_REG[13:2])
2093
                        begin
2094
                                next_state_rx = RX_START;
2095
                        end
2096
                        else
2097
                        begin
2098
                                next_state_rx = RX_CONTROLIN_1;
2099
                        end
2100
                end
2101
                else
2102
                begin
2103
                        next_state_rx = RX_IDLE;
2104
                end
2105
        end
2106
        RX_CONTROLIN_1:
2107
        begin
2108
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2109
                begin
2110
                        next_state_rx = RX_CONTROLIN_1;
2111
                end
2112
                else
2113
                begin
2114
                        next_state_rx = RX_CONTROLIN_2;
2115
                end
2116
        end
2117
        RX_CONTROLIN_2:
2118
        begin
2119
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2120
                begin
2121
                        next_state_rx = RX_CONTROLIN_2;
2122
                end
2123
                else
2124
                begin
2125
                        next_state_rx = RX_CONTROLIN_3;
2126
                end
2127
        end
2128
        RX_CONTROLIN_3:
2129
        begin
2130
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2131
                begin
2132
                        next_state_rx = RX_CONTROLIN_3;
2133
                end
2134
                else
2135
                begin
2136
                        next_state_rx = RX_CONTROLIN_4;
2137
                end
2138
        end
2139
        RX_CONTROLIN_4:
2140
        begin
2141
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2142
                begin
2143
                        next_state_rx = RX_CONTROLIN_4;
2144
                end
2145
                else
2146
                begin
2147
                        next_state_rx = RX_CONTROLIN_5;
2148
                end
2149
        end
2150
        RX_CONTROLIN_5:
2151
        begin
2152
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2153
                begin
2154
                        next_state_rx = RX_CONTROLIN_5;
2155
                end
2156
                else
2157
                begin
2158
                        next_state_rx = RX_CONTROLIN_6;
2159
                end
2160
        end
2161
        RX_CONTROLIN_6:
2162
        begin
2163
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2164
                begin
2165
                        next_state_rx = RX_CONTROLIN_6;
2166
                end
2167
                else
2168
                begin
2169
                        next_state_rx = RX_CONTROLIN_7;
2170
                end
2171
        end
2172
        RX_CONTROLIN_7:
2173
        begin
2174
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2175
                begin
2176
                        next_state_rx = RX_CONTROLIN_7;
2177
                end
2178
                else
2179
                begin
2180
                        next_state_rx = RX_CONTROLIN_8;
2181
                end
2182
        end
2183
        RX_CONTROLIN_8:
2184
        begin
2185
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2186
                begin
2187
                        next_state_rx = RX_CONTROLIN_8;
2188
                end
2189
                else
2190
                begin
2191
                        next_state_rx = RX_RESPONSE_CIN;
2192
                end
2193
        end
2194
        RX_RESPONSE_CIN:
2195
        begin
2196
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2197
                begin
2198
                        next_state_rx = RX_CONTROLIN_8;
2199
                end
2200
                else
2201
                begin
2202
                        next_state_rx = RX_RESPONSE_CIN;
2203
                end
2204
        end
2205
 
2206
        RX_ADRESS_1:
2207
        begin
2208
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2209
                begin
2210
                        next_state_rx = RX_ADRESS_1;
2211
                end
2212
                else
2213
                begin
2214
                        next_state_rx = RX_ADRESS_2;
2215
                end
2216
        end
2217
        RX_ADRESS_2:
2218
        begin
2219
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2220
                begin
2221
                        next_state_rx = RX_ADRESS_2;
2222
                end
2223
                else
2224
                begin
2225
                        next_state_rx = RX_ADRESS_3;
2226
                end
2227
        end
2228
        RX_ADRESS_3:
2229
        begin
2230
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2231
                begin
2232
                        next_state_rx = RX_ADRESS_3;
2233
                end
2234
                else
2235
                begin
2236
                        next_state_rx = RX_ADRESS_4;
2237
                end
2238
        end
2239
        RX_ADRESS_4:
2240
        begin
2241
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2242
                begin
2243
                        next_state_rx = RX_ADRESS_4;
2244
                end
2245
                else
2246
                begin
2247
                        next_state_rx = RX_ADRESS_5;
2248
                end
2249
        end
2250
        RX_ADRESS_5:
2251
        begin
2252
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2253
                begin
2254
                        next_state_rx = RX_ADRESS_5;
2255
                end
2256
                else
2257
                begin
2258
                        next_state_rx = RX_ADRESS_6;
2259
                end
2260
        end
2261
        RX_ADRESS_6:
2262
        begin
2263
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2264
                begin
2265
                        next_state_rx = RX_ADRESS_6;
2266
                end
2267
                else
2268
                begin
2269
                        next_state_rx = RX_ADRESS_7;
2270
                end
2271
        end
2272
        RX_ADRESS_7:
2273
        begin
2274
 
2275
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2276
                begin
2277
                        next_state_rx = RX_ADRESS_7;
2278
                end
2279
                else
2280
                begin
2281
                        next_state_rx = RX_ADRESS_8;
2282
                end
2283
 
2284
        end
2285
        RX_ADRESS_8:
2286
        begin
2287
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2288
                begin
2289
                        next_state_rx = RX_ADRESS_8;
2290
                end
2291
                else
2292
                begin
2293
                        next_state_rx = RX_RESPONSE_ADRESS;
2294
                end
2295
        end
2296
        RX_RESPONSE_ADRESS:
2297
        begin
2298
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2299
                begin
2300
                        next_state_rx = RX_RESPONSE_ADRESS;
2301
                end
2302
                else
2303
                begin
2304
                        next_state_rx = RX_DATA0_1;
2305
                end
2306
        end
2307
 
2308
        RX_DATA0_1:
2309
        begin
2310
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2311
                begin
2312
                        next_state_rx = RX_DATA0_1;
2313
                end
2314
                else
2315
                begin
2316
                        next_state_rx = RX_DATA0_2;
2317
                end
2318
        end
2319
        RX_DATA0_2:
2320
        begin
2321
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2322
                begin
2323
                        next_state_rx = RX_DATA0_2;
2324
                end
2325
                else
2326
                begin
2327
                        next_state_rx = RX_DATA0_3;
2328
                end
2329
        end
2330
        RX_DATA0_3:
2331
        begin
2332
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2333
                begin
2334
                        next_state_rx = RX_DATA0_3;
2335
                end
2336
                else
2337
                begin
2338
                        next_state_rx = RX_DATA0_4;
2339
                end
2340
        end
2341
        RX_DATA0_4:
2342
        begin
2343
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2344
                begin
2345
                        next_state_rx = RX_DATA0_4;
2346
                end
2347
                else
2348
                begin
2349
                        next_state_rx = RX_DATA0_5;
2350
                end
2351
        end
2352
        RX_DATA0_5:
2353
        begin
2354
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2355
                begin
2356
                        next_state_rx = RX_DATA0_5;
2357
                end
2358
                else
2359
                begin
2360
                        next_state_rx = RX_DATA0_6;
2361
                end
2362
        end
2363
        RX_DATA0_6:
2364
        begin
2365
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2366
                begin
2367
                        next_state_rx = RX_DATA0_6;
2368
                end
2369
                else
2370
                begin
2371
                        next_state_rx = RX_DATA0_7;
2372
                end
2373
        end
2374
        RX_DATA0_7:
2375
        begin
2376
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2377
                begin
2378
                        next_state_rx = RX_DATA0_7;
2379
                end
2380
                else
2381
                begin
2382
                        next_state_rx = RX_DATA0_8;
2383
                end
2384
        end
2385
        RX_DATA0_8:
2386
        begin
2387
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2388
                begin
2389
                        next_state_rx = RX_DATA0_8;
2390
                end
2391
                else
2392
                begin
2393
                        next_state_rx = RX_RESPONSE_DATA0_1;
2394
                end
2395
        end
2396
        RX_RESPONSE_DATA0_1:
2397
        begin
2398
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2399
                begin
2400
                        next_state_rx = RX_RESPONSE_DATA0_1;
2401
                end
2402
                else
2403
                begin
2404
                        next_state_rx = RX_DATA1_1;
2405
                end
2406
        end
2407
        RX_DATA1_1:
2408
        begin
2409
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2410
                begin
2411
                        next_state_rx = RX_DATA1_1;
2412
                end
2413
                else
2414
                begin
2415
                        next_state_rx = RX_DATA1_2;
2416
                end
2417
        end
2418
        RX_DATA1_2:
2419
        begin
2420
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2421
                begin
2422
                        next_state_rx = RX_DATA1_1;
2423
                end
2424
                else
2425
                begin
2426
                        next_state_rx = RX_DATA1_3;
2427
                end
2428
        end
2429
        RX_DATA1_3:
2430
        begin
2431
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2432
                begin
2433
                        next_state_rx = RX_DATA1_3;
2434
                end
2435
                else
2436
                begin
2437
                        next_state_rx = RX_DATA1_4;
2438
                end
2439
        end
2440
        RX_DATA1_4:
2441
        begin
2442
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2443
                begin
2444
                        next_state_rx = RX_DATA1_4;
2445
                end
2446
                else
2447
                begin
2448
                        next_state_rx = RX_DATA1_5;
2449
                end
2450
        end
2451
        RX_DATA1_5:
2452
        begin
2453
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2454
                begin
2455
                        next_state_rx = RX_DATA1_5;
2456
                end
2457
                else
2458
                begin
2459
                        next_state_rx = RX_DATA1_6;
2460
                end
2461
        end
2462
        RX_DATA1_6:
2463
        begin
2464
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2465
                begin
2466
                        next_state_rx = RX_DATA1_6;
2467
                end
2468
                else
2469
                begin
2470
                        next_state_rx = RX_DATA1_7;
2471
                end
2472
        end
2473
        RX_DATA1_7:
2474
        begin
2475
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2476
                begin
2477
                        next_state_rx = RX_DATA1_7;
2478
                end
2479
                else
2480
                begin
2481
                        next_state_rx = RX_DATA1_8;
2482
                end
2483
        end
2484
        RX_DATA1_8:
2485
        begin
2486
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2487
                begin
2488
                        next_state_rx = RX_DATA1_8;
2489
                end
2490
                else
2491
                begin
2492
                        next_state_rx = RX_RESPONSE_DATA1_1;
2493
                end
2494
        end
2495
        RX_RESPONSE_DATA1_1:
2496
        begin
2497
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2498
                begin
2499
                        next_state_rx = RX_RESPONSE_DATA1_1;
2500
                end
2501
                else
2502
                begin
2503
                        next_state_rx = RX_DELAY_BYTES;
2504
                end
2505
        end
2506
        RX_DELAY_BYTES:
2507
        begin
2508
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2509
                begin
2510
                        next_state_rx = RX_DELAY_BYTES;
2511
                end
2512
                else
2513
                begin
2514
 
2515
                        if(count_rx == 2'd0)
2516
                        begin
2517
                                next_state_rx = RX_ADRESS_1;
2518
                        end
2519
                        else if(count_rx == 2'd1)
2520
                        begin
2521
                                next_state_rx = RX_DATA0_1;
2522
                        end
2523
                        else if(count_rx == 2'd2)
2524
                        begin
2525
                                next_state_rx = RX_DATA1_1;
2526
                        end
2527
                        else if(count_rx == 2'd3)
2528
                        begin
2529
                                next_state_rx = RX_STOP;
2530
                        end
2531
 
2532
                end
2533
        end
2534
        RX_NACK:
2535
        begin
2536
 
2537
                        if(count_receive_data != DATA_CONFIG_REG[13:2]*2'd2)
2538
                        begin
2539
                                next_state_rx = RX_NACK;
2540
                        end
2541
                        else
2542
                        begin
2543
                                if(count_rx == 2'd0)
2544
                                begin
2545
                                        next_state_rx = RX_CONTROLIN_1;
2546
                                end
2547
                                else if(count_rx == 2'd1)
2548
                                begin
2549
                                        next_state_rx = RX_ADRESS_1;
2550
                                end
2551
                                else if(count_rx == 2'd2)
2552
                                begin
2553
                                        next_state_rx = RX_DATA0_1;
2554
                                end
2555
                                else if(count_rx == 2'd3)
2556
                                begin
2557
                                        next_state_rx = RX_DATA1_1;
2558
                                end
2559
                        end
2560
 
2561
 
2562
        end
2563
        RX_STOP:
2564
        begin
2565
 
2566
                if(count_receive_data != DATA_CONFIG_REG[13:2])
2567
                begin
2568
                        next_state_rx = RX_STOP;
2569
                end
2570
                else
2571
                begin
2572
                        next_state_rx = RX_IDLE;
2573
                end
2574
 
2575
        end
2576
        default:
2577
        begin
2578
                        next_state_rx = RX_IDLE;
2579
        end
2580
        endcase
2581
end
2582
 
2583
 
2584
//SEQUENTIAL BLOCK RX
2585
 
2586
always@(posedge PCLK)
2587
begin
2588
 
2589
        if(!PRESETn)
2590
        begin
2591
                //SIGNALS MUST BE RESETED
2592
                count_receive_data <= 12'd0;
2593
                state_rx <= RX_IDLE;
2594
                fifo_rx_wr_en <= 1'b0;
2595
                count_rx <= 2'd0;
2596
        end
2597
        else
2598
        begin
2599
 
2600
                state_rx <= next_state_rx;
2601
 
2602
                case(state_rx)//STATE_RX IS MORE SECURE CHANGE ONLY IF YOU KNOW WHAT ARE YOU DOING 
2603
                RX_IDLE:
2604
                begin
2605
                        if(SDA == 1'b0 && SCL == 1'b1)
2606
                        begin
2607
                                count_receive_data <= count_receive_data +12'd1;
2608
                        end
2609
                        else
2610
                        begin
2611
                                count_receive_data <= 12'd0;
2612
                        end
2613
                end
2614
                RX_START:
2615
                begin
2616 18 redbear
                        if(SDA == 1'b0 && SCL == 1'b0 && count_receive_data < DATA_CONFIG_REG[13:2] )
2617 6 redbear
                        begin
2618
                                count_receive_data <= count_receive_data +12'd1;
2619
                        end
2620
                        else
2621
                        begin
2622
                                count_receive_data <= 12'd0;
2623
                        end
2624
                end
2625
                RX_CONTROLIN_1:
2626
                begin
2627
 
2628
                end
2629
                RX_CONTROLIN_2:
2630
                begin
2631
 
2632
                end
2633
                RX_CONTROLIN_3:
2634
                begin
2635
 
2636
                end
2637
                RX_CONTROLIN_4:
2638
                begin
2639
 
2640
                end
2641
                RX_CONTROLIN_5:
2642
                begin
2643
 
2644
                end
2645
                RX_CONTROLIN_6:
2646
                begin
2647
 
2648
                end
2649
                RX_CONTROLIN_7:
2650
                begin
2651
 
2652
                end
2653
                RX_CONTROLIN_8:
2654
                begin
2655
 
2656
                end
2657
                RX_RESPONSE_CIN:
2658
                begin
2659
 
2660
                end
2661
                RX_ADRESS_1:
2662
                begin
2663
                end
2664
                RX_ADRESS_2:
2665
                begin
2666
                end
2667
                RX_ADRESS_3:
2668
                begin
2669
                end
2670
                RX_ADRESS_4:
2671
                begin
2672
                end
2673
                RX_ADRESS_5:
2674
                begin
2675
                end
2676
                RX_ADRESS_6:
2677
                begin
2678
                end
2679
                RX_ADRESS_7:
2680
                begin
2681
                end
2682
                RX_ADRESS_8:
2683
                begin
2684
                end
2685
                RX_RESPONSE_ADRESS:
2686
                begin
2687
 
2688
                end
2689
                RX_DATA0_1:
2690
                begin
2691
 
2692
                end
2693
                RX_DATA0_2:
2694
                begin
2695
 
2696
                end
2697
                RX_DATA0_3:
2698
                begin
2699
 
2700
                end
2701
                RX_DATA0_4:
2702
                begin
2703
 
2704
                end
2705
                RX_DATA0_5:
2706
                begin
2707
 
2708
                end
2709
                RX_DATA0_6:
2710
                begin
2711
 
2712
                end
2713
                RX_DATA0_7:
2714
                begin
2715
 
2716
                end
2717
                RX_DATA0_8:
2718
                begin
2719
 
2720
                end
2721
                RX_RESPONSE_DATA0_1:
2722
                begin
2723
                end
2724
 
2725
                RX_DATA1_1:
2726
                begin
2727
 
2728
                end
2729
                RX_DATA1_2:
2730
                begin
2731
 
2732
                end
2733
                RX_DATA1_3:
2734
                begin
2735
 
2736
                end
2737
                RX_DATA1_4:
2738
                begin
2739
 
2740
                end
2741
                RX_DATA1_5:
2742
                begin
2743
 
2744
                end
2745
                RX_DATA1_6:
2746
                begin
2747
 
2748
                end
2749
                RX_DATA1_7:
2750
                begin
2751
 
2752
                end
2753
                RX_DATA1_8:
2754
                begin
2755
 
2756
                end
2757
                RX_RESPONSE_DATA1_1:
2758
                begin
2759
                end
2760
                RX_DELAY_BYTES:
2761
                begin
2762
 
2763
                end
2764
                RX_NACK:
2765
                begin
2766
 
2767
 
2768
                end
2769
                RX_STOP:
2770
                begin
2771
 
2772
 
2773
                end
2774
                default:
2775
                begin
2776
                        count_receive_data <= 12'd4095;
2777
                        fifo_rx_wr_en <= 1'b0;
2778
                        count_rx <= 2'd3;
2779
                end
2780
                endcase
2781
        end
2782
end
2783
 
2784 2 redbear
endmodule

powered by: WebSVN 2.1.0

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