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

Subversion Repositories spacewiresystemc

[/] [spacewiresystemc/] [trunk/] [systemC/] [tx_spw.h] - Blame information for rev 29

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

Line No. Rev Author Line
1 29 redbear
//+FHDR------------------------------------------------------------------------
2
//Copyright (c) 2013 Latin Group American Integhrated Circuit, Inc. All rights reserved
3
//GLADIC Open Source RTL
4
//-----------------------------------------------------------------------------
5
//FILE NAME      :
6
//DEPARTMENT     : IC Design / Verification
7
//AUTHOR         : Felipe Fernandes da Costa
8
//AUTHOR’S EMAIL :
9
//-----------------------------------------------------------------------------
10
//RELEASE HISTORY
11
//VERSION DATE AUTHOR DESCRIPTION
12
//1.0 YYYY-MM-DD name
13
//-----------------------------------------------------------------------------
14
//KEYWORDS : General file searching keywords, leave blank if none.
15
//-----------------------------------------------------------------------------
16
//PURPOSE  : ECSS_E_ST_50_12C_31_july_2008
17
//-----------------------------------------------------------------------------
18
//PARAMETERS
19
//PARAM NAME            RANGE   : DESCRIPTION : DEFAULT : UNITS
20
//e.g.DATA_WIDTH        [32,16] : width of the DATA : 32:
21
//-----------------------------------------------------------------------------
22
//REUSE ISSUES
23
//Reset Strategy        :
24
//Clock Domains         :
25
//Critical Timing       :
26
//Test Features         :
27
//Asynchronous I/F      :
28
//Scan Methodology      :
29
//Instantiations        :
30
//Synthesizable (y/n)   :
31
//Other                 :
32
//-FHDR------------------------------------------------------------------------
33
 
34
#ifndef SPW_TX_T_H
35
#define SPW_TX_T_H
36
 
37
#define START                           0
38
#define SEND_NULL                       1
39
#define SEND_FCT_NULL                   2
40
#define SEND_TIME_CODE_FCT_NCHAR_NULL   3
41
 
42
#define TYPE_TIMECODE      4
43
#define TYPE_FCT           5
44
#define TYPE_NCHAR_EOP_EEP 6
45
#define TYPE_NULL          7
46
 
47
class SPW_TX_SC;
48
 
49
SC_MODULE(SPW_TX_SC)
50
{
51
        //SIGNALS
52
        sc_in<bool> CLOCK_TX;
53
        sc_in<bool> RESET_TX;
54
 
55
        sc_in<bool> CLOCK_SYS;
56
 
57
        sc_in<bool> TICKIN_TX;
58
        sc_in<sc_uint<8> > TIMEIN_CONTROL_FLAG_TX;
59
 
60
        sc_in<bool> TXWRITE_TX;
61
        sc_in<sc_uint<9> > TXDATA_FLAGCTRL_TX;
62
 
63
        sc_in<bool> SEND_FCT_NOW;
64
 
65
        sc_in<bool> ENABLE_TX;
66
        sc_in<bool> SEND_NULL_TX;
67
        sc_in<bool> SEND_FCT_TX;
68
        sc_in<bool> SEND_NCHAR_TX;
69
        sc_in<bool> SEND_TIME_CODE_TX;
70
        sc_in<bool> GOTFCT_TX;
71
 
72
        sc_out<bool> READY_TX;
73
        sc_out<bool> READY_TICK;
74
        sc_out<uint> DOUT;
75
        sc_out<uint> SOUT;
76
        sc_out<sc_uint<4> > FSM_TX;
77
 
78
        //INTERNAL
79
        sc_uint<9> TXDATA_FLAGCTRL_TX_AUX;
80
        sc_uint<9> TXDATA_FLAGCTRL_TX_LAST;
81
 
82
        sc_uint<8> LAST_TIMEIN_CONTROL_FLAG_TX;
83
 
84
        sc_uint<4> state_tx;
85
 
86
        bool first_time;
87
        bool working;
88
 
89
        unsigned int last_type;
90
        unsigned int COUNTER;
91
        unsigned int counter_first_time;
92
 
93
        uint FCT_COUNTER;
94
 
95
        uint FCT_SEND = 0;
96
 
97
        sc_uint<4> ESC;
98
        sc_uint<4> EOP;
99
        sc_uint<4> EEP;
100
        sc_uint<4> FCT;
101
 
102
        sc_uint<8> NULL_S;
103
        sc_uint<14> TIME_CODE;
104
 
105
        uint DOUT_LAST;
106
        uint SOUT_LAST;
107
 
108
        //STATE MACHINE CONTROL
109
        void TYPE_DATA_STATE()
110
        {
111
                //cout << "TYPE_DATA_STATE" << endl;
112
 
113
                        if(RESET_TX)
114
                        {
115
                                //cout << "RESETED" << " " << RESET_TX << endl;
116
                                state_tx = START;
117
                                DOUT_LAST = 0;
118
                                COUNTER = 0;
119
                                FCT_COUNTER = 0;
120
                                counter_first_time = 0;
121
                                //FCT_SEND = 0;
122
 
123
                                last_type = TYPE_NULL;
124
                                NULL_S[7] = 0;
125
                                NULL_S[6] = 1;
126
                                NULL_S[5] = 1;
127
                                NULL_S[4] = 1;
128
                                NULL_S[3] = 0;
129
                                NULL_S[2] = 1;
130
                                NULL_S[1] = 0;
131
                                NULL_S[0] = 0;
132
 
133
                                FCT[3] = 0;
134
                                FCT[2] = 1;
135
                                FCT[1] = 0;
136
                                FCT[0] = 0;
137
 
138
                                TIME_CODE[13] = 0;
139
                                TIME_CODE[12] = 1;
140
                                TIME_CODE[11] = 1;
141
                                TIME_CODE[10] = 1;
142
                                TIME_CODE[9]  = 1;
143
                                TIME_CODE[8]  = 0;
144
                                TIME_CODE[7]  = 0;
145
                                TIME_CODE[6]  = 0;
146
                                TIME_CODE[5]  = 0;
147
                                TIME_CODE[4]  = 0;
148
                                TIME_CODE[3]  = 0;
149
                                TIME_CODE[2]  = 0;
150
                                TIME_CODE[1]  = 0;
151
                                TIME_CODE[0]  = 0;
152
 
153
                                EOP[3] = 0;
154
                                EOP[2] = 1;
155
                                EOP[1] = 0;
156
                                EOP[0] = 1;
157
 
158
                                EEP[3] = 0;
159
                                EEP[2] = 1;
160
                                EEP[1] = 1;
161
                                EEP[0] = 0;
162
 
163
                                first_time       = true;
164
                                enable_null      = false;
165
                                enable_fct       = false;
166
                                enable_time_code = false;
167
                                enable_n_char    = false;
168
                        }
169
                        else
170
                        {
171
                                FSM_TX = state_tx;
172
                                //cout << "STATE TX: " << state_tx << endl;
173
                                switch(state_tx)
174
                                {
175
                                        case START:
176
 
177
                                                if(SEND_NULL_TX && ENABLE_TX)
178
                                                {
179
                                                        state_tx = SEND_NULL;
180
                                                }
181
                                        break;
182
                                        case SEND_NULL:
183
                                                enable_null = true;
184
                                                enable_fct = false;
185
                                                state_tx = SEND_NULL;
186
                                                last_type = TYPE_NULL;
187
                                                if(SEND_NULL_TX && SEND_FCT_TX && ENABLE_TX && counter_first_time > 0)
188
                                                {
189
                                                        state_tx = SEND_FCT_NULL;
190
                                                        //cout << enable_fct << endl;
191
                                                }
192
                                        break;
193
                                        case SEND_FCT_NULL:
194
 
195
                                                state_tx = SEND_FCT_NULL;
196
 
197
                                                if(SEND_FCT_TX && FCT_COUNTER -1 > 0)
198
                                                {
199
                                                        state_tx =  SEND_TIME_CODE_FCT_NCHAR_NULL;
200
                                                }else if(SEND_FCT_TX && FCT_SEND > 0 && enable_null == false)
201
                                                {
202
                                                        enable_fct = true;
203
                                                }else if(SEND_FCT_TX && enable_fct == false && FCT_SEND == 0)
204
                                                {
205
                                                        enable_null = true;
206
                                                }
207
                                                  //cout << enable_null << " " << enable_fct << endl;
208
                                        break;
209
                                        case SEND_TIME_CODE_FCT_NCHAR_NULL:
210
                                                if(TICKIN_TX && enable_n_char == false && enable_fct == false && enable_null == false)
211
                                                {
212
                                                        enable_time_code = true;
213
                                                }else if(FCT_SEND > 0 && enable_n_char == false && enable_time_code == false && enable_null == false)
214
                                                {
215
                                                        enable_fct = true;
216
                                                }else if(TXWRITE_TX && FCT_COUNTER-1 > 0 &&  enable_fct == false && enable_time_code == false && enable_null == false)
217
                                                {
218
                                                        enable_n_char = true;
219
                                                }else if(enable_fct == false && enable_time_code == false && enable_n_char == false)
220
                                                {
221
                                                        enable_null = true;
222
                                                }
223
                                        break;
224
                                }
225
                        }
226
        }
227
 
228
        /*SLOTS OPEN IN OTHER SIDE*/
229
        void FCT_COUNTER_M()
230
        {
231
                if(RESET_TX)
232
                {
233
                        FCT_COUNTER = 0;
234
                }
235
                else
236
                {
237
                         if(SEND_FCT_TX && GOTFCT_TX)
238
                         {
239
                                FCT_COUNTER = FCT_COUNTER +8;
240
                                //cout << "DATA TO SEND" << " " << FCT_COUNTER <<endl;
241
                         }
242
                }
243
        }
244
 
245
        /*TAKE  FCT SEND FASE */
246
        void FCT_COUNTER_SEND()
247
        {
248
                        if(RESET_TX)
249
                                FCT_SEND=7;
250
                        else
251
                        {
252
                                if(SEND_FCT_NOW)
253
                                {
254
                                        FCT_SEND = FCT_SEND + 1;
255
                                        //cout << "DATA RECEIVED" <<endl;
256
                                }
257
                        }
258
        }
259
 
260
        void ALL_HERE()
261
        {
262
                if(RESET_TX)
263
                {
264
                        DOUT = 0;
265
                        SOUT = 0;
266
                }
267
                else
268
                {
269
                        READY_TX   = false;
270
                        READY_TICK = false;
271
                        EEP_EOP    = false;
272
                        if(enable_null)//
273
                        {
274
                                if(COUNTER == 0)
275
                                {
276
                                        if(first_time)
277
                                        {
278
                                                DOUT_LAST=DOUT = NULL_S[7];
279
                                                SOUT=!SOUT;
280
                                        }else if(last_type == TYPE_NULL)
281
                                        {
282
                                                if(DOUT == !(NULL_S[6]^NULL_S[0]^NULL_S[1]))
283
                                                {
284
                                                        DOUT = !(NULL_S[6]^NULL_S[0]^NULL_S[1]);
285
                                                        SOUT=!SOUT;
286
                                                }else
287
                                                {
288
                                                        DOUT = !(NULL_S[6]^NULL_S[0]^NULL_S[1]);
289
                                                        SOUT=SOUT;
290
                                                }
291
 
292
                                        }else if(last_type == TYPE_FCT)
293
                                        {
294
                                                if(DOUT == !(NULL_S[6]^FCT[0]^FCT[1]))
295
                                                {
296
                                                        DOUT = !(NULL_S[6]^FCT[0]^FCT[1]);
297
                                                        SOUT=!SOUT;
298
                                                }else
299
                                                {
300
                                                        DOUT = !(NULL_S[6]^FCT[0]^FCT[1]);
301
                                                        SOUT=SOUT;
302
                                                }
303
 
304
                                        }else if(last_type == TYPE_NCHAR_EOP_EEP)
305
                                        {
306
                                                if(TXDATA_FLAGCTRL_TX_LAST[8] == 1)
307
                                                {
308
                                                        EEP_EOP = true;
309
                                                        if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 0)
310
                                                        {
311
                                                                if(DOUT == !(NULL_S[6]^EOP[0]^EOP[1]))
312
                                                                {
313
                                                                        SOUT=!SOUT;
314
                                                                }
315
                                                                else
316
                                                                {
317
                                                                        SOUT=SOUT;
318
                                                                }
319
                                                                DOUT =  !(NULL_S[6]^EOP[0]^EOP[1]);
320
                                                        }else if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 1)
321
                                                        {
322
                                                                if(DOUT == !(NULL_S[6]^EEP[0]^EEP[1]))
323
                                                                {
324
                                                                        SOUT=!SOUT;
325
                                                                }
326
                                                                else
327
                                                                {
328
                                                                        SOUT=SOUT;
329
                                                                }
330
                                                                DOUT =  !(NULL_S[6]^EEP[0]^EEP[1]);
331
                                                        }
332
                                                }
333
                                                else
334
                                                {
335
                                                        if(DOUT == !(NULL_S[6]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]))
336
                                                        {
337
                                                                DOUT = !(NULL_S[6]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]);
338
                                                                SOUT=!SOUT;
339
                                                        }else
340
                                                        {
341
                                                                DOUT = !(NULL_S[6]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]);
342
                                                                SOUT=SOUT;
343
                                                        }
344
                                                }
345
                                        }else if(last_type == TYPE_TIMECODE)
346
                                        {
347
                                                if(DOUT ==  !(NULL_S[6]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]))
348
                                                        SOUT=!SOUT;
349
                                                else
350
                                                        SOUT=SOUT;
351
 
352
                                                DOUT =  !(NULL_S[6]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]);
353
                                        }
354
                                }
355
                                else if(COUNTER == 1)
356
                                {
357
                                        if(DOUT == NULL_S[6])
358
                                        {
359
                                                SOUT=!SOUT;
360
                                                DOUT = NULL_S[6];
361
                                        }else
362
                                        {
363
                                                SOUT=SOUT;
364
                                                DOUT = NULL_S[6];
365
                                        }
366
                                }
367
                                else if(COUNTER == 2)
368
                                {
369
                                        if(DOUT == NULL_S[5])
370
                                        {
371
                                                SOUT=!SOUT;
372
                                                DOUT = NULL_S[5];
373
                                        }else
374
                                        {
375
                                                SOUT=SOUT;
376
                                                DOUT = NULL_S[5];
377
                                        }
378
                                }
379
                                else if(COUNTER == 3)
380
                                {
381
                                        if(DOUT == NULL_S[4])
382
                                        {
383
                                                SOUT=!SOUT;
384
                                                DOUT = NULL_S[4];
385
                                        }else
386
                                        {
387
                                                SOUT=SOUT;
388
                                                DOUT = NULL_S[4];
389
                                        }
390
                                }
391
                                else if(COUNTER == 4)
392
                                {
393
                                        if(DOUT == NULL_S[3])
394
                                        {
395
                                                SOUT=!SOUT;
396
                                                DOUT = NULL_S[3];
397
                                        }else
398
                                        {
399
                                                SOUT=SOUT;
400
                                                DOUT = NULL_S[3];
401
                                        }
402
                                }
403
                                else if(COUNTER == 5)
404
                                {
405
                                        if(DOUT == NULL_S[2])
406
                                        {
407
                                                SOUT=!SOUT;
408
                                                DOUT = NULL_S[2];
409
                                        }else
410
                                        {
411
                                                SOUT=SOUT;
412
                                                DOUT = NULL_S[2];
413
                                        }
414
                                }
415
                                else if(COUNTER == 6)
416
                                {
417
                                        if(DOUT == NULL_S[1])
418
                                        {
419
                                                SOUT=!SOUT;
420
                                                DOUT = NULL_S[1];
421
                                        }else
422
                                        {
423
                                                SOUT=SOUT;
424
                                                DOUT = NULL_S[1];
425
                                        }
426
                                }
427
                                else if(COUNTER == 7)
428
                                {
429
                                        if(DOUT == NULL_S[0])
430
                                        {
431
                                                SOUT=!SOUT;
432
                                                DOUT = NULL_S[0];
433
                                        }else
434
                                        {
435
                                                SOUT=SOUT;
436
                                                DOUT = NULL_S[0];
437
                                        }
438
                                }
439
 
440
                                first_time = false;
441
                                COUNTER++;
442
 
443
                                if(COUNTER == 8)
444
                                {
445
                                        COUNTER = 0;
446
                                        enable_null = false;
447
                                        last_type = TYPE_NULL;
448
 
449
                                        if(state_tx == SEND_NULL)
450
                                                counter_first_time = counter_first_time + 1;
451
                                }
452
 
453
                        }else if(enable_fct)//
454
                        {
455
 
456
                                if(COUNTER == 0)
457
                                {
458
                                        if(last_type == TYPE_NULL)
459
                                        {
460
                                                if(DOUT == !(FCT[2]^NULL_S[0]^NULL_S[1]))
461
                                                {
462
                                                        SOUT=!SOUT;
463
                                                }
464
                                                else
465
                                                {
466
                                                        SOUT=SOUT;
467
                                                }
468
                                                DOUT = !(FCT[2]^NULL_S[0]^NULL_S[1]);
469
                                        }else if(last_type == TYPE_FCT)
470
                                        {
471
                                                if(DOUT == !(FCT[2]^FCT[0]^FCT[1]))
472
                                                {
473
                                                        SOUT=!SOUT;
474
                                                }
475
                                                else
476
                                                {
477
                                                        SOUT=SOUT;
478
                                                }
479
                                                DOUT = !(FCT[2]^FCT[0]^FCT[1]);
480
                                        }else if(last_type == TYPE_NCHAR_EOP_EEP)
481
                                        {
482
                                                        if(TXDATA_FLAGCTRL_TX_LAST[8] == 1)
483
                                                        {
484
                                                                EEP_EOP = true;
485
                                                                if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 0)
486
                                                                {
487
                                                                        if(DOUT == !(FCT[2]^EOP[0]^EOP[1]))
488
                                                                        {
489
                                                                                SOUT=!SOUT;
490
                                                                        }
491
                                                                        else
492
                                                                        {
493
                                                                                SOUT=SOUT;
494
                                                                        }
495
                                                                        DOUT =  !(FCT[2]^EOP[0]^EOP[1]);
496
                                                                }else if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 1)
497
                                                                {
498
                                                                        if(DOUT == !(FCT[2]^EEP[0]^EEP[1]))
499
                                                                        {
500
                                                                                SOUT=!SOUT;
501
                                                                        }
502
                                                                        else
503
                                                                        {
504
                                                                                SOUT=SOUT;
505
                                                                        }
506
                                                                        DOUT =  !(FCT[2]^EEP[0]^EEP[1]);
507
                                                                }
508
                                                        }
509
                                                        else
510
                                                        {
511
                                                                if(DOUT == !(FCT[2]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]))
512
                                                                {
513
                                                                        SOUT=!SOUT;
514
                                                                }
515
                                                                else
516
                                                                {
517
                                                                        SOUT=SOUT;
518
                                                                }
519
                                                                DOUT =  !(FCT[2]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]);
520
                                                        }
521
                                        }else if(last_type == TYPE_TIMECODE)
522
                                        {
523
                                                        if(DOUT ==  !(FCT[2]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]))
524
                                                        {
525
                                                                SOUT=!SOUT;
526
                                                        }else
527
                                                        {
528
                                                                SOUT=SOUT;
529
                                                        }
530
                                                        DOUT =  !(FCT[2]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]);
531
                                        }
532
                                }
533
                                else if(COUNTER == 1)
534
                                {
535
                                        if(DOUT == FCT[2])
536
                                        {
537
                                                SOUT=!SOUT;
538
                                        }
539
                                        else
540
                                        {
541
                                                SOUT=SOUT;
542
                                        }
543
                                        DOUT = FCT[2];
544
                                }
545
                                else if(COUNTER == 2)
546
                                {
547
                                        if(DOUT == FCT[1])
548
                                        {
549
                                                SOUT=!SOUT;
550
                                        }
551
                                        else
552
                                        {
553
                                                SOUT=SOUT;
554
                                        }
555
                                        DOUT = FCT[1];
556
                                }
557
                                else if(COUNTER == 3)
558
                                {
559
                                        if(DOUT == FCT[0])
560
                                        {
561
                                                SOUT=!SOUT;
562
                                        }
563
                                        else
564
                                        {
565
                                                SOUT=SOUT;
566
                                        }
567
                                        DOUT = FCT[0];
568
                                }
569
 
570
                                COUNTER++;
571
 
572
                                if(COUNTER == 4)
573
                                {
574
                                        COUNTER = 0;
575
                                        FCT_SEND = FCT_SEND - 1;
576
                                        enable_fct = false;
577
                                        last_type = TYPE_FCT;
578
                                }
579
 
580
                        }else if(enable_time_code)//
581
                        {
582
 
583
                                TIME_CODE(7,0) = TIMEIN_CONTROL_FLAG_TX;
584
 
585
                                if(COUNTER == 0)
586
                                {
587
                                        if(last_type == TYPE_NULL)
588
                                        {
589
                                                if(DOUT == !(TIME_CODE[12]^NULL_S[0]^NULL_S[1]))
590
                                                {
591
                                                        SOUT=!SOUT;
592
                                                }
593
                                                else
594
                                                {
595
                                                        SOUT=SOUT;
596
                                                }
597
                                                DOUT = !(TIME_CODE[12]^NULL_S[0]^NULL_S[1]);
598
                                        }else if(last_type == TYPE_FCT)
599
                                        {
600
                                                if(DOUT == !(TIME_CODE[12]^FCT[0]^FCT[1]))
601
                                                {
602
                                                        SOUT=!SOUT;
603
                                                }
604
                                                else
605
                                                {
606
                                                        SOUT=SOUT;
607
                                                }
608
                                                DOUT = !(TIME_CODE[12]^FCT[0]^FCT[1]);
609
                                        }else if(last_type == TYPE_NCHAR_EOP_EEP)
610
                                        {
611
                                                        if(TXDATA_FLAGCTRL_TX_LAST[8] == 1)
612
                                                        {
613
                                                                EEP_EOP = true;
614
                                                                if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 0)
615
                                                                {
616
                                                                        if(DOUT == !(TIME_CODE[12]^EOP[0]^EOP[1]))
617
                                                                        {
618
                                                                                SOUT=!SOUT;
619
                                                                        }
620
                                                                        else
621
                                                                        {
622
                                                                                SOUT=SOUT;
623
                                                                        }
624
                                                                        DOUT =  !(TIME_CODE[12]^EOP[0]^EOP[1]);
625
                                                                }else if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 1)
626
                                                                {
627
                                                                        if(DOUT == !(TIME_CODE[12]^EEP[0]^EEP[1]))
628
                                                                        {
629
                                                                                SOUT=!SOUT;
630
                                                                        }
631
                                                                        else
632
                                                                        {
633
                                                                                SOUT=SOUT;
634
                                                                        }
635
                                                                        DOUT =  !(TIME_CODE[12]^EEP[0]^EEP[1]);
636
                                                                }
637
                                                        }
638
                                                        else
639
                                                        {
640
                                                                if(DOUT == !(TIME_CODE[12]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]))
641
                                                                {
642
                                                                        SOUT=!SOUT;
643
                                                                }
644
                                                                else
645
                                                                {
646
                                                                        SOUT=SOUT;
647
                                                                }
648
                                                                DOUT =  !(TIME_CODE[12]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]);
649
                                                        }
650
                                        }else if(last_type == TYPE_TIMECODE)
651
                                        {
652
                                                        if( DOUT ==  !(TIME_CODE[12]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]))
653
                                                        {
654
                                                                SOUT=!SOUT;
655
                                                        }
656
                                                        else
657
                                                        {
658
                                                                SOUT=SOUT;
659
                                                        }
660
                                                        DOUT = !(TIME_CODE[12]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]);
661
                                        }
662
                                }else if(COUNTER == 1)
663
                                {
664
                                        if(DOUT == TIME_CODE[12])
665
                                        {
666
                                                SOUT=!SOUT;
667
                                        }
668
                                        else
669
                                        {
670
                                                SOUT=SOUT;
671
                                        }
672
                                        DOUT = TIME_CODE[12];
673
                                }
674
                                else if(COUNTER == 2)
675
                                {
676
                                        if(DOUT == TIME_CODE[11])
677
                                        {
678
                                                SOUT=!SOUT;
679
                                        }
680
                                        else
681
                                        {
682
                                                SOUT=SOUT;
683
                                        }
684
                                        DOUT = TIME_CODE[11];
685
                                }
686
                                else if(COUNTER == 3)
687
                                {
688
                                        if(DOUT == TIME_CODE[10])
689
                                        {
690
                                                SOUT=!SOUT;
691
                                        }
692
                                        else
693
                                        {
694
                                                SOUT=SOUT;
695
                                        }
696
                                        DOUT = TIME_CODE[10];
697
                                }
698
                                else if(COUNTER == 4)
699
                                {
700
                                        if(DOUT == TIME_CODE[9])
701
                                        {
702
                                                SOUT=!SOUT;
703
                                        }
704
                                        else
705
                                        {
706
                                                SOUT=SOUT;
707
                                        }
708
                                        DOUT = TIME_CODE[9];
709
                                }
710
                                else if(COUNTER == 5)
711
                                {
712
                                        if(DOUT == TIME_CODE[8])
713
                                        {
714
                                                SOUT=!SOUT;
715
                                        }
716
                                        else
717
                                        {
718
                                                SOUT=SOUT;
719
                                        }
720
                                        DOUT = TIME_CODE[8];
721
                                }
722
                                else if(COUNTER == 6)
723
                                {
724
                                        if(DOUT == TIME_CODE[0])
725
                                        {
726
                                                SOUT=!SOUT;
727
                                        }
728
                                        else
729
                                        {
730
                                                SOUT=SOUT;
731
                                        }
732
                                        DOUT = TIME_CODE[0];
733
                                }
734
                                else if(COUNTER == 7)
735
                                {
736
                                        if(DOUT == TIME_CODE[1])
737
                                        {
738
                                                SOUT=!SOUT;
739
                                        }
740
                                        else
741
                                        {
742
                                                SOUT=SOUT;
743
                                        }
744
                                        DOUT = TIME_CODE[1];
745
                                }
746
                                else if(COUNTER == 8)
747
                                {
748
                                        if(DOUT == TIME_CODE[2])
749
                                        {
750
                                                SOUT=!SOUT;
751
                                        }
752
                                        else
753
                                        {
754
                                                SOUT=SOUT;
755
                                        }
756
                                        DOUT = TIME_CODE[2];
757
                                }
758
                                else if(COUNTER == 9)
759
                                {
760
                                        if(DOUT == TIME_CODE[3])
761
                                        {
762
                                                SOUT=!SOUT;
763
                                        }
764
                                        else
765
                                        {
766
                                                SOUT=SOUT;
767
                                        }
768
                                        DOUT = TIME_CODE[3];
769
                                }
770
                                else if(COUNTER == 10)
771
                                {
772
                                        if(DOUT == TIME_CODE[4])
773
                                        {
774
                                                SOUT=!SOUT;
775
                                        }
776
                                        else
777
                                        {
778
                                                SOUT=SOUT;
779
                                        }
780
                                        DOUT = TIME_CODE[4];
781
                                }
782
                                else if(COUNTER == 11)
783
                                {
784
                                        if(DOUT == TIME_CODE[5])
785
                                        {
786
                                                SOUT=!SOUT;
787
                                        }
788
                                        else
789
                                        {
790
                                                SOUT=SOUT;
791
                                        }
792
                                        DOUT = TIME_CODE[5];
793
                                }
794
                                else if(COUNTER == 12)
795
                                {
796
                                        if(DOUT == TIME_CODE[6])
797
                                        {
798
                                                SOUT=!SOUT;
799
                                        }
800
                                        else
801
                                        {
802
                                                SOUT=SOUT;
803
                                        }
804
                                        DOUT = TIME_CODE[6];
805
                                }
806
                                else if(COUNTER == 13)
807
                                {
808
                                        if(DOUT == TIME_CODE[7])
809
                                        {
810
                                                SOUT=!SOUT;
811
                                        }
812
                                        else
813
                                        {
814
                                                SOUT=SOUT;
815
                                        }
816
                                        DOUT = TIME_CODE[7];
817
                                }
818
 
819
 
820
                                COUNTER++;
821
 
822
                                if(COUNTER == 14)
823
                                {
824
                                        COUNTER = 0;
825
                                        READY_TICK = true;
826
                                        enable_time_code = false;
827
                                        last_type = TYPE_TIMECODE;
828
                                        LAST_TIMEIN_CONTROL_FLAG_TX = TIMEIN_CONTROL_FLAG_TX;
829
                                }
830
 
831
                        }else if(enable_n_char)//
832
                        {
833
 
834
                                TXDATA_FLAGCTRL_TX_AUX = TXDATA_FLAGCTRL_TX;
835
 
836
                                if(TXDATA_FLAGCTRL_TX_AUX[8])//EOP-EEP
837
                                {
838
 
839
                                        if(TXDATA_FLAGCTRL_TX_AUX(1,0) == 0) //EOP
840
                                        {
841
                                                if(COUNTER == 0)
842
                                                {
843
                                                        if(last_type == TYPE_NULL)
844
                                                        {
845
                                                                if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^NULL_S[0]^NULL_S[1]))
846
                                                                {
847
                                                                        SOUT=!SOUT;
848
                                                                }
849
                                                                else
850
                                                                {
851
                                                                        SOUT=SOUT;
852
                                                                }
853
                                                                DOUT = !(TXDATA_FLAGCTRL_TX_AUX[8]^NULL_S[0]^NULL_S[1]);
854
                                                        }else if(last_type == TYPE_FCT)
855
                                                        {
856
                                                                if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^FCT[0]^FCT[1]))
857
                                                                {
858
                                                                        SOUT=!SOUT;
859
                                                                }
860
                                                                else
861
                                                                {
862
                                                                        SOUT=SOUT;
863
                                                                }
864
                                                                DOUT = !(TXDATA_FLAGCTRL_TX_AUX[8]^FCT[0]^FCT[1]);
865
                                                        }else if(last_type == TYPE_NCHAR_EOP_EEP)
866
                                                        {
867
                                                                        if(TXDATA_FLAGCTRL_TX_LAST[8] == 1)
868
                                                                        {
869
                                                                                EEP_EOP = true;
870
                                                                                if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 0)
871
                                                                                {
872
                                                                                        if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^EOP[0]^EOP[1]))
873
                                                                                        {
874
                                                                                                SOUT=!SOUT;
875
                                                                                        }
876
                                                                                        else
877
                                                                                        {
878
                                                                                                SOUT=SOUT;
879
                                                                                        }
880
                                                                                        DOUT =  !(TXDATA_FLAGCTRL_TX_AUX[8]^EOP[0]^EOP[1]);
881
                                                                                }else if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 1)
882
                                                                                {
883
                                                                                        if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^EEP[0]^EEP[1]))
884
                                                                                        {
885
                                                                                                SOUT=!SOUT;
886
                                                                                        }
887
                                                                                        else
888
                                                                                        {
889
                                                                                                SOUT=SOUT;
890
                                                                                        }
891
                                                                                        DOUT =  !(TXDATA_FLAGCTRL_TX_AUX[8]^EEP[0]^EEP[1]);
892
                                                                                }
893
                                                                        }
894
                                                                        else
895
                                                                        {
896
                                                                                if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]))
897
                                                                                {
898
                                                                                        SOUT=!SOUT;
899
                                                                                }
900
                                                                                else
901
                                                                                {
902
                                                                                        SOUT=SOUT;
903
                                                                                }
904
                                                                                DOUT = !(TXDATA_FLAGCTRL_TX_AUX[8]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]);
905
                                                                        }
906
                                                        }else if(last_type == TYPE_TIMECODE)
907
                                                        {
908
                                                                if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]))
909
                                                                {
910
                                                                        SOUT=!SOUT;
911
                                                                }
912
                                                                else
913
                                                                {
914
                                                                        SOUT=SOUT;
915
                                                                }
916
                                                                DOUT =  !(TXDATA_FLAGCTRL_TX_AUX[8]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]);
917
                                                        }
918
                                                }
919
                                                else if(COUNTER == 1)
920
                                                {
921
                                                        if(DOUT == EOP[2])
922
                                                        {
923
                                                                SOUT=!SOUT;
924
                                                        }
925
                                                        else
926
                                                        {
927
                                                                SOUT=SOUT;
928
                                                        }
929
                                                        DOUT = EOP[2];
930
                                                }
931
                                                else if(COUNTER == 2)
932
                                                {
933
                                                        if(DOUT == EOP[1])
934
                                                        {
935
                                                                SOUT=!SOUT;
936
                                                        }
937
                                                        else
938
                                                        {
939
                                                                SOUT=SOUT;
940
                                                        }
941
                                                        DOUT = EOP[1];
942
                                                }
943
                                                else if(COUNTER == 3)
944
                                                {
945
                                                        if(DOUT == EOP[0])
946
                                                        {
947
                                                                SOUT=!SOUT;
948
                                                        }
949
                                                        else
950
                                                        {
951
                                                                SOUT=SOUT;
952
                                                        }
953
                                                        DOUT = EOP[0];
954
                                                }
955
 
956
                                                COUNTER++;
957
 
958
                                                if(COUNTER == 4)
959
                                                {
960
                                                        COUNTER = 0;
961
                                                        READY_TX = true;
962
                                                        TXDATA_FLAGCTRL_TX_LAST = TXDATA_FLAGCTRL_TX_AUX;
963
                                                        FCT_COUNTER = FCT_COUNTER - 1;
964
                                                        enable_n_char = false;
965
                                                        last_type = TYPE_NCHAR_EOP_EEP;
966
                                                }
967
                                        }
968
                                        else if(TXDATA_FLAGCTRL_TX_AUX(1,0) == 1)//EEP
969
                                        {
970
                                                if(COUNTER == 0)
971
                                                {
972
                                                        if(last_type == TYPE_NULL)
973
                                                        {
974
                                                                if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^NULL_S[0]^NULL_S[1]))
975
                                                                {
976
                                                                        SOUT=!SOUT;
977
                                                                }
978
                                                                else
979
                                                                {
980
                                                                        SOUT=SOUT;
981
                                                                }
982
                                                                DOUT = !(TXDATA_FLAGCTRL_TX_AUX[8]^NULL_S[0]^NULL_S[1]);
983
                                                        }else if(last_type == TYPE_FCT)
984
                                                        {
985
                                                                if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^FCT[0]^FCT[1]))
986
                                                                {
987
                                                                        SOUT=!SOUT;
988
                                                                }
989
                                                                else
990
                                                                {
991
                                                                        SOUT=SOUT;
992
                                                                }
993
                                                                DOUT = !(TXDATA_FLAGCTRL_TX_AUX[8]^FCT[0]^FCT[1]);
994
                                                        }else if(last_type == TYPE_NCHAR_EOP_EEP)
995
                                                        {
996
                                                                        if(TXDATA_FLAGCTRL_TX_LAST[8] == 1)
997
                                                                        {
998
                                                                                EEP_EOP = true;
999
                                                                                if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 0)
1000
                                                                                {
1001
                                                                                        if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^EOP[0]^EOP[1]))
1002
                                                                                        {
1003
                                                                                                SOUT=!SOUT;
1004
                                                                                        }
1005
                                                                                        else
1006
                                                                                        {
1007
                                                                                                SOUT=SOUT;
1008
                                                                                        }
1009
                                                                                        DOUT =  !(TXDATA_FLAGCTRL_TX_AUX[8]^EOP[0]^EOP[1]);
1010
                                                                                }else if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 1)
1011
                                                                                {
1012
                                                                                        if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^EEP[0]^EEP[1]))
1013
                                                                                        {
1014
                                                                                                SOUT=!SOUT;
1015
                                                                                        }
1016
                                                                                        else
1017
                                                                                        {
1018
                                                                                                SOUT=SOUT;
1019
                                                                                        }
1020
                                                                                        DOUT =  !(TXDATA_FLAGCTRL_TX_AUX[8]^EEP[0]^EEP[1]);
1021
                                                                                }
1022
                                                                        }
1023
                                                                        else
1024
                                                                        {
1025
                                                                                if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]))
1026
                                                                                {
1027
                                                                                        SOUT=!SOUT;
1028
                                                                                }
1029
                                                                                else
1030
                                                                                {
1031
                                                                                        SOUT=SOUT;
1032
                                                                                }
1033
                                                                                DOUT = !(TXDATA_FLAGCTRL_TX_AUX[8]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]);
1034
                                                                        }
1035
                                                        }else if(last_type == TYPE_TIMECODE)
1036
                                                        {
1037
                                                                if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]))
1038
                                                                {
1039
                                                                        SOUT=!SOUT;
1040
                                                                }
1041
                                                                else
1042
                                                                {
1043
                                                                        SOUT=SOUT;
1044
                                                                }
1045
                                                                DOUT =  !(TXDATA_FLAGCTRL_TX_AUX[8]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]);
1046
                                                        }
1047
                                                }
1048
                                                else if(COUNTER == 1)
1049
                                                {
1050
                                                        if(DOUT == EEP[2])
1051
                                                        {
1052
                                                                SOUT=!SOUT;
1053
                                                        }
1054
                                                        else
1055
                                                        {
1056
                                                                SOUT=SOUT;
1057
                                                        }
1058
                                                        DOUT = EEP[2];
1059
                                                }
1060
                                                else if(COUNTER == 2)
1061
                                                {
1062
                                                        if(DOUT == EEP[1])
1063
                                                        {
1064
                                                                SOUT=!SOUT;
1065
                                                        }
1066
                                                        else
1067
                                                        {
1068
                                                                SOUT=SOUT;
1069
                                                        }
1070
                                                        DOUT = EEP[1];
1071
                                                }
1072
                                                else if(COUNTER == 3)
1073
                                                {
1074
                                                        if(DOUT == EOP[0])
1075
                                                        {
1076
                                                                SOUT=!SOUT;
1077
                                                        }
1078
                                                        else
1079
                                                        {
1080
                                                                SOUT=SOUT;
1081
                                                        }
1082
                                                        DOUT = EOP[0];
1083
                                                }
1084
 
1085
                                                COUNTER++;
1086
 
1087
                                                if(COUNTER == 4)
1088
                                                {
1089
                                                        COUNTER = 0;
1090
                                                        READY_TX = true;
1091
                                                        TXDATA_FLAGCTRL_TX_LAST = TXDATA_FLAGCTRL_TX_AUX;
1092
                                                        FCT_COUNTER = FCT_COUNTER - 1;
1093
                                                        enable_n_char = false;
1094
                                                        last_type = TYPE_NCHAR_EOP_EEP;
1095
                                                }
1096
                                        }
1097
 
1098
                                }
1099
                                else //DATA
1100
                                {
1101
                                        if(COUNTER == 0)
1102
                                        {
1103
                                                if(last_type == TYPE_NULL)
1104
                                                {
1105
                                                        if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^NULL_S[0]^NULL_S[1]))
1106
                                                        {
1107
                                                                SOUT=!SOUT;
1108
                                                        }
1109
                                                        else
1110
                                                        {
1111
                                                                SOUT=SOUT;
1112
                                                        }
1113
                                                        DOUT = !(TXDATA_FLAGCTRL_TX_AUX[8]^NULL_S[0]^NULL_S[1]);
1114
                                                }else if(last_type == TYPE_FCT)
1115
                                                {
1116
                                                        if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^FCT[0]^FCT[1]))
1117
                                                        {
1118
                                                                SOUT=!SOUT;
1119
                                                        }
1120
                                                        else
1121
                                                        {
1122
                                                                SOUT=SOUT;
1123
                                                        }
1124
                                                        DOUT = !(TXDATA_FLAGCTRL_TX_AUX[8]^FCT[0]^FCT[1]);
1125
                                                }else if(last_type == TYPE_NCHAR_EOP_EEP)
1126
                                                {
1127
                                                                if(TXDATA_FLAGCTRL_TX_LAST[8] == 1)
1128
                                                                {
1129
                                                                        EEP_EOP = true;
1130
                                                                        if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 0)
1131
                                                                        {
1132
                                                                                if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^EOP[0]^EOP[1]))
1133
                                                                                {
1134
                                                                                        SOUT=!SOUT;
1135
                                                                                }
1136
                                                                                else
1137
                                                                                {
1138
                                                                                        SOUT=SOUT;
1139
                                                                                }
1140
                                                                                DOUT =  !(TXDATA_FLAGCTRL_TX_AUX[8]^EOP[0]^EOP[1]);
1141
                                                                        }else if(TXDATA_FLAGCTRL_TX_LAST(1,0) == 1)
1142
                                                                        {
1143
                                                                                if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^EEP[0]^EEP[1]))
1144
                                                                                {
1145
                                                                                        SOUT=!SOUT;
1146
                                                                                }
1147
                                                                                else
1148
                                                                                {
1149
                                                                                        SOUT=SOUT;
1150
                                                                                }
1151
                                                                                DOUT =  !(TXDATA_FLAGCTRL_TX_AUX[8]^EEP[0]^EEP[1]);
1152
                                                                        }
1153
                                                                }
1154
                                                                else
1155
                                                                {
1156
                                                                        if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]))
1157
                                                                        {
1158
                                                                                SOUT=!SOUT;
1159
                                                                        }
1160
                                                                        else
1161
                                                                        {
1162
                                                                                SOUT=SOUT;
1163
                                                                        }
1164
                                                                        DOUT = !(TXDATA_FLAGCTRL_TX_AUX[8]^TXDATA_FLAGCTRL_TX_LAST[0]^TXDATA_FLAGCTRL_TX_LAST[1]^TXDATA_FLAGCTRL_TX_LAST[2]^TXDATA_FLAGCTRL_TX_LAST[3]^ TXDATA_FLAGCTRL_TX_LAST[4]^TXDATA_FLAGCTRL_TX_LAST[5]^TXDATA_FLAGCTRL_TX_LAST[6]^TXDATA_FLAGCTRL_TX_LAST[7]);
1165
                                                                }
1166
                                                }else if(last_type == TYPE_TIMECODE)
1167
                                                {
1168
                                                        if(DOUT == !(TXDATA_FLAGCTRL_TX_AUX[8]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]))
1169
                                                        {
1170
                                                                SOUT=!SOUT;
1171
                                                        }
1172
                                                        else
1173
                                                        {
1174
                                                                SOUT=SOUT;
1175
                                                        }
1176
                                                        DOUT =  !(TXDATA_FLAGCTRL_TX_AUX[8]^LAST_TIMEIN_CONTROL_FLAG_TX[7]^LAST_TIMEIN_CONTROL_FLAG_TX[6]^LAST_TIMEIN_CONTROL_FLAG_TX[5]^LAST_TIMEIN_CONTROL_FLAG_TX[4]^LAST_TIMEIN_CONTROL_FLAG_TX[3]^LAST_TIMEIN_CONTROL_FLAG_TX[2]^LAST_TIMEIN_CONTROL_FLAG_TX[1]^LAST_TIMEIN_CONTROL_FLAG_TX[0]);
1177
                                                }
1178
                                        }
1179
                                        else if(COUNTER == 1)
1180
                                        {
1181
                                                if(DOUT == TXDATA_FLAGCTRL_TX_AUX[8])
1182
                                                {
1183
                                                        SOUT=!SOUT;
1184
                                                }
1185
                                                else
1186
                                                {
1187
                                                        SOUT=SOUT;
1188
                                                }
1189
                                                DOUT = TXDATA_FLAGCTRL_TX_AUX[8];
1190
                                        }
1191
                                        else if(COUNTER == 2)
1192
                                        {
1193
                                                if(DOUT == TXDATA_FLAGCTRL_TX_AUX[0])
1194
                                                {
1195
                                                        SOUT=!SOUT;
1196
                                                }
1197
                                                else
1198
                                                {
1199
                                                        SOUT=SOUT;
1200
                                                }
1201
                                                DOUT = TXDATA_FLAGCTRL_TX_AUX[0];
1202
                                        }
1203
                                        else if(COUNTER == 3)
1204
                                        {
1205
                                                if(DOUT == TXDATA_FLAGCTRL_TX_AUX[1])
1206
                                                {
1207
                                                        SOUT=!SOUT;
1208
                                                }
1209
                                                else
1210
                                                {
1211
                                                        SOUT=SOUT;
1212
                                                }
1213
                                                DOUT = TXDATA_FLAGCTRL_TX_AUX[1];
1214
                                        }
1215
                                        else if(COUNTER == 4)
1216
                                        {
1217
                                                if(DOUT == TXDATA_FLAGCTRL_TX_AUX[2])
1218
                                                {
1219
                                                        SOUT=!SOUT;
1220
                                                }
1221
                                                else
1222
                                                {
1223
                                                        SOUT=SOUT;
1224
                                                }
1225
                                                DOUT = TXDATA_FLAGCTRL_TX_AUX[2];
1226
                                        }
1227
                                        else if(COUNTER == 5)
1228
                                        {
1229
                                                if(DOUT == TXDATA_FLAGCTRL_TX_AUX[3])
1230
                                                {
1231
                                                        SOUT=!SOUT;
1232
                                                }
1233
                                                else
1234
                                                {
1235
                                                        SOUT=SOUT;
1236
                                                }
1237
                                                DOUT = TXDATA_FLAGCTRL_TX_AUX[3];
1238
                                        }
1239
                                        else if(COUNTER == 6)
1240
                                        {
1241
                                                if(DOUT == TXDATA_FLAGCTRL_TX_AUX[4])
1242
                                                {
1243
                                                        SOUT=!SOUT;
1244
                                                }
1245
                                                else
1246
                                                {
1247
                                                        SOUT=SOUT;
1248
                                                }
1249
                                                DOUT = TXDATA_FLAGCTRL_TX_AUX[4];
1250
                                        }
1251
                                        else if(COUNTER == 7)
1252
                                        {
1253
                                                if(DOUT == TXDATA_FLAGCTRL_TX_AUX[5])
1254
                                                {
1255
                                                        SOUT=!SOUT;
1256
                                                }
1257
                                                else
1258
                                                {
1259
                                                        SOUT=SOUT;
1260
                                                }
1261
                                                DOUT = TXDATA_FLAGCTRL_TX_AUX[5];
1262
                                        }
1263
                                        else if(COUNTER == 8)
1264
                                        {
1265
                                                if(DOUT == TXDATA_FLAGCTRL_TX_AUX[6])
1266
                                                {
1267
                                                        SOUT=!SOUT;
1268
                                                }
1269
                                                else
1270
                                                {
1271
                                                        SOUT=SOUT;
1272
                                                }
1273
                                                DOUT = TXDATA_FLAGCTRL_TX_AUX[6];
1274
                                        }
1275
                                        else if(COUNTER == 9)
1276
                                        {
1277
                                                if(DOUT == TXDATA_FLAGCTRL_TX_AUX[7])
1278
                                                {
1279
                                                        SOUT=!SOUT;
1280
                                                }
1281
                                                else
1282
                                                {
1283
                                                        SOUT=SOUT;
1284
                                                }
1285
                                                DOUT = TXDATA_FLAGCTRL_TX_AUX[7];
1286
                                        }
1287
 
1288
                                        COUNTER++;
1289
 
1290
                                        if(COUNTER == 10)
1291
                                        {
1292
                                                COUNTER = 0;
1293
                                                READY_TX = true;
1294
                                                TXDATA_FLAGCTRL_TX_LAST = TXDATA_FLAGCTRL_TX_AUX;
1295
                                                FCT_COUNTER = FCT_COUNTER - 1;
1296
                                                enable_n_char = false;
1297
                                                last_type = TYPE_NCHAR_EOP_EEP;
1298
                                        }
1299
                                }
1300
 
1301
                        }
1302
 
1303
                }
1304
        }//END METHOD
1305
 
1306
 
1307
        SC_CTOR(SPW_TX_SC)
1308
        {
1309
                SC_METHOD(FCT_COUNTER_SEND);
1310
                sensitive << CLOCK_SYS.pos();
1311
 
1312
                SC_METHOD(FCT_COUNTER_M);
1313
                sensitive << CLOCK_SYS.pos();
1314
 
1315
                SC_METHOD(ALL_HERE);
1316
                sensitive << CLOCK_TX.pos();
1317
 
1318
                SC_METHOD(TYPE_DATA_STATE);
1319
                sensitive << CLOCK_TX.pos();
1320
        }
1321
};
1322
#endif

powered by: WebSVN 2.1.0

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