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

Subversion Repositories spacewiresystemc

[/] [spacewiresystemc/] [trunk/] [rtl/] [RTL_VB/] [tx_spw.v] - Blame information for rev 6

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

Line No. Rev Author Line
1 5 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
`timescale 1ns/1ns
35
 
36
module TX_SPW (
37
                input pclk_tx,
38
                //
39
                input [8:0] data_tx_i,
40
                input txwrite_tx,
41
                //
42
                input [7:0] timecode_tx_i,
43
                input tickin_tx,
44
                //
45
                input enable_tx,
46
                input send_null_tx,
47
                input send_fct_tx,
48
 
49
                //
50
                input gotfct_tx,
51
                input send_fct_now,
52
                //
53
                output reg tx_dout,
54
                output reg tx_sout,
55
                //
56
                output  ready_tx_data,
57
                output  ready_tx_timecode
58
 
59
                );
60
 
61
localparam [2:0] tx_spw_start     = 3'b000,
62
                 tx_spw_null      = 3'b001,
63
                 tx_spw_null_fct  = 3'b010,
64
                 tx_spw_full      = 3'b100;
65
 
66
localparam [5:0] NULL     = 6'b000001,
67
                 FCT      = 6'b000010,
68
                 EOP      = 6'b000100,
69
                 EEP      = 6'b001000,
70
                 DATA     = 6'b010000,
71
                 TIMEC    = 6'b100000;
72
 
73
        reg [2:0] state_tx;
74
        reg [2:0] next_state_tx;
75
 
76
        reg [7:0]  null_s;
77
        reg [3:0]  fct_s;
78
        reg [3:0]  eop_s;
79
        reg [3:0]  eep_s;
80
        reg [13:0] timecode_s;
81
 
82
        reg [5:0]  last_type;
83
        reg [8:0]  txdata_flagctrl_tx_last;
84
        reg [7:0]  last_timein_control_flag_tx;
85
 
86
        reg first_time;
87
 
88
        reg enable_null;
89
        reg enable_fct;
90
        reg enable_n_char;
91
        reg enable_time_code;
92
 
93
        reg [2:0] fct_send;
94 6 redbear
        reg [2:0] fct_send_last;
95 5 redbear
        reg [2:0] fct_flag;
96 6 redbear
 
97 5 redbear
        reg [5:0] fct_counter;
98 6 redbear
        reg [5:0] fct_counter_last;
99
        reg [5:0] fct_counter_receive;
100
 
101 5 redbear
        reg last_tx_dout;
102
        reg last_tx_sout;
103
 
104
        reg [3:0] global_counter_transfer;
105
 
106
assign ready_tx_timecode = (enable_time_code & global_counter_transfer == 14)?1'b1:1'b0;
107
 
108
assign ready_tx_data     = (enable_n_char & global_counter_transfer == 4'd10  & !data_tx_i[8])?1'b1:
109
                           (enable_n_char & global_counter_transfer == 4'd4   &  data_tx_i[8])?1'b1:1'b0;
110
 
111
always@(*)
112
begin
113
        tx_dout = 1'b0;
114
 
115
         if(!enable_tx)
116
         begin
117
                tx_dout = 1'b0;
118
         end
119
         else if( enable_null & first_time  & global_counter_transfer == 4'd0)
120
         begin
121
                tx_dout = null_s[7];
122
         end
123
         else if( enable_null & !first_time & last_type == NULL  & global_counter_transfer == 4'd0)
124
         begin
125
                tx_dout = !(null_s[6]^null_s[0]^null_s[1]);
126
         end
127
         else if( enable_null & !first_time & last_type == FCT   & global_counter_transfer == 4'd0)
128
         begin
129
                tx_dout = !(null_s[6]^fct_s[0]^fct_s[1]);
130
         end
131
         else if( enable_null & !first_time & last_type == EOP   & global_counter_transfer == 4'd0)
132
         begin
133
                tx_dout = !(null_s[6]^eop_s[0]^eop_s[1]);
134
         end
135
         else if( enable_null & !first_time & last_type == EEP   & global_counter_transfer == 4'd0)
136
         begin
137
                tx_dout = !(null_s[6]^eep_s[0]^eep_s[1]);
138
         end
139
         else if( enable_null & !first_time & last_type == DATA  & global_counter_transfer == 4'd0)
140
         begin
141
                tx_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]);
142
         end
143
         else if( enable_null & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
144
         begin
145
                tx_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]);
146
         end
147
         else if( enable_null & !first_time & global_counter_transfer == 4'd1)
148
         begin
149
                tx_dout = null_s[6];
150
         end
151
         else if( enable_null & !first_time & global_counter_transfer == 4'd2)
152
         begin
153
                tx_dout = null_s[5];
154
         end
155
         else if( enable_null & !first_time & global_counter_transfer == 4'd3)
156
         begin
157
                tx_dout = null_s[4];
158
         end
159
         else if( enable_null & !first_time & global_counter_transfer == 4'd4)
160
         begin
161
                tx_dout = null_s[3];
162
         end
163
         else if( enable_null & !first_time & global_counter_transfer == 4'd5)
164
         begin
165
                tx_dout = null_s[2];
166
         end
167
         else if( enable_null & !first_time & global_counter_transfer == 4'd6)
168
         begin
169
                tx_dout = null_s[1];
170
         end
171
         else if( enable_null & !first_time & global_counter_transfer == 4'd7)
172
         begin
173
                tx_dout = null_s[0];
174
         end
175
         else if( enable_fct  & !first_time & last_type == NULL  & global_counter_transfer == 4'd0)
176
         begin
177
                tx_dout = !(fct_s[2]^null_s[0]^null_s[1]);
178
         end
179
         else if( enable_fct  & !first_time & last_type == FCT   & global_counter_transfer == 4'd0)
180
         begin
181
                tx_dout = !(fct_s[2]^fct_s[0]^fct_s[1]);
182
         end
183
         else if( enable_fct  & !first_time & last_type == EOP   & global_counter_transfer == 4'd0)
184
         begin
185
                tx_dout = !(fct_s[2]^eop_s[0]^eop_s[1]);
186
         end
187
         else if( enable_fct  & !first_time & last_type == EEP   & global_counter_transfer == 4'd0)
188
         begin
189
                tx_dout = !(fct_s[2]^eep_s[0]^eep_s[1]);
190
         end
191
         else if ( enable_fct  & !first_time & last_type == DATA  & global_counter_transfer == 4'd0)
192
         begin
193
                tx_dout = !(fct_s[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]);
194
         end
195
         else if( enable_fct  & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
196
         begin
197
                tx_dout = !(fct_s[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]);
198
         end
199
         else if( enable_fct  & !first_time & global_counter_transfer == 4'd1)
200
         begin
201
                tx_dout = fct_s[2];
202
         end
203
         else if( enable_fct  & !first_time & global_counter_transfer == 4'd2)
204
         begin
205
                tx_dout = fct_s[1];
206
         end
207
         else if( enable_fct  & !first_time & global_counter_transfer == 4'd3)
208
         begin
209
                tx_dout = fct_s[0];
210
         end
211
         else if( enable_time_code & !first_time & last_type == NULL  & global_counter_transfer == 4'd0)
212
         begin
213
                tx_dout = !(timecode_s[12]^null_s[0]^null_s[1]);
214
         end
215
         else if( enable_time_code & !first_time & last_type == FCT   & global_counter_transfer == 4'd0)
216
         begin
217
                tx_dout = !(timecode_s[12]^fct_s[0]^fct_s[1]);
218
         end
219
         else if ( enable_time_code & !first_time & last_type == EOP   & global_counter_transfer == 4'd0)
220
         begin
221
                tx_dout = !(timecode_s[12]^eop_s[0]^eop_s[1]);
222
         end
223
         else if( enable_time_code & !first_time & last_type == EEP   & global_counter_transfer == 4'd0)
224
         begin
225
                tx_dout = !(timecode_s[12]^eep_s[0]^eep_s[1]);
226
         end
227
         else if( enable_time_code & !first_time & last_type == DATA  & global_counter_transfer == 4'd0)
228
         begin
229
                tx_dout = !(timecode_s[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]);
230
         end
231
         else if( enable_time_code & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
232
         begin
233
                tx_dout = !(timecode_s[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]);
234
         end
235
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd1)
236
         begin
237
                tx_dout = timecode_s[12];
238
         end
239
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd2)
240
         begin
241
                tx_dout = timecode_s[11];
242
         end
243
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd3)
244
         begin
245
                tx_dout = timecode_s[10];
246
         end
247
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd4)
248
         begin
249
                tx_dout = timecode_s[9];
250
         end
251
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd5)
252
         begin
253
                tx_dout = timecode_s[8];
254
         end
255
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd6)
256
         begin
257
                tx_dout = timecode_s[7];
258
         end
259
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd7)
260
         begin
261
                tx_dout = timecode_s[6];
262
         end
263
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd8)
264
         begin
265
                tx_dout = timecode_s[5];
266
         end
267
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd9)
268
         begin
269
                tx_dout = timecode_s[4];
270
         end
271
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd10)
272
         begin
273
                tx_dout = timecode_s[3];
274
         end
275
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd11)
276
         begin
277
                tx_dout = timecode_s[2];
278
         end
279
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd12)
280
         begin
281
                tx_dout = timecode_s[1];
282
         end
283
         else if( enable_time_code & !first_time & global_counter_transfer == 4'd13)
284
         begin
285
                tx_dout = timecode_s[0];
286
         end
287
         else if( enable_n_char    & !first_time & last_type == NULL  & global_counter_transfer == 4'd0)
288
         begin
289
                tx_dout = !(data_tx_i[8]^null_s[0]^null_s[1]);
290
         end
291
         else if( enable_n_char    & !first_time & last_type == FCT   & global_counter_transfer == 4'd0)
292
         begin
293
                tx_dout = !(data_tx_i[8]^fct_s[0]^fct_s[1]);
294
         end
295
         else if( enable_n_char    & !first_time & last_type == EOP   & global_counter_transfer == 4'd0)
296
         begin
297
                tx_dout = !(data_tx_i[8]^eop_s[0]^eop_s[1]);
298
         end
299
         else if( enable_n_char    & !first_time & last_type == EEP   & global_counter_transfer == 4'd0)
300
         begin
301
                tx_dout = !(data_tx_i[8]^eep_s[0]^eep_s[1]);
302
         end
303
         else if( enable_n_char    & !first_time & last_type == DATA  & global_counter_transfer == 4'd0)
304
         begin
305
                tx_dout = !(data_tx_i[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]);
306
         end
307
         else if( enable_n_char    & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
308
         begin
309
                tx_dout = !(data_tx_i[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]);
310
         end
311
         else if( enable_n_char    & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd1)
312
         begin
313
                tx_dout = data_tx_i[8];
314
         end
315
         else if( enable_n_char    & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd2)
316
         begin
317
                tx_dout = data_tx_i[0];
318
         end
319
         else if( enable_n_char    & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd3)
320
         begin
321
                tx_dout = data_tx_i[1];
322
         end
323
         else if( enable_n_char    & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd4)
324
         begin
325
                tx_dout = data_tx_i[2];
326
         end
327
         else if( enable_n_char    & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd5)
328
         begin
329
                tx_dout = data_tx_i[3];
330
         end
331
         else if( enable_n_char    & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd6)
332
         begin
333
                tx_dout = data_tx_i[4];
334
         end
335
         else if( enable_n_char    & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd7)
336
         begin
337
                tx_dout = data_tx_i[5];
338
         end
339
         else if( enable_n_char    & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd8)
340
         begin
341
                tx_dout = data_tx_i[6];
342
         end
343
         else if( enable_n_char    & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd9)
344
         begin
345
                tx_dout = data_tx_i[7];
346
         end
347
         else if( enable_n_char    &  data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & global_counter_transfer == 4'd1)
348
         begin
349
                tx_dout = eop_s[2];
350
         end
351
         else if( enable_n_char    &  data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & global_counter_transfer == 4'd2)
352
         begin
353
                tx_dout = eop_s[1];
354
         end
355
         else if( enable_n_char    &  data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & global_counter_transfer == 4'd3)
356
         begin
357
                tx_dout = eop_s[0];
358
         end
359
         else if( enable_n_char    &  data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & global_counter_transfer == 4'd1)
360
         begin
361
                tx_dout = eep_s[2];
362
         end
363
         else if( enable_n_char    &  data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & global_counter_transfer == 4'd2)
364
         begin
365
                tx_dout = eep_s[1];
366
         end
367
         else if( enable_n_char    &  data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & global_counter_transfer == 4'd3)
368
         begin
369
                tx_dout = eep_s[0];
370
         end
371
end
372
 
373
//strobe
374
always@(*)
375
begin
376
        tx_sout = 1'b0;
377
 
378
        if(!enable_tx)
379
        begin
380
                tx_sout = 1'b0;
381
        end
382
        else if((enable_null | enable_fct) && tx_dout == last_tx_dout)
383
        begin
384
                tx_sout = !last_tx_sout;
385
        end
386
        else if((enable_null | enable_fct) && tx_dout != last_tx_dout)
387
        begin
388
                tx_sout = last_tx_sout;
389
        end
390
end
391
 
392
//slots open in another side
393 6 redbear
always@(posedge gotfct_tx or negedge enable_tx)
394 5 redbear
begin
395
 
396
        if(!enable_tx)
397
        begin
398
                fct_counter <= {6{1'b0}};
399
        end
400 6 redbear
        else
401 5 redbear
        begin
402 6 redbear
                if(fct_counter == 6'd56)
403
                        fct_counter <= 6'd8;
404
                else
405
                        fct_counter <= fct_counter + 6'd8;
406 5 redbear
        end
407
end
408
 
409
 
410
//slots open in our side
411
always@(posedge send_fct_now or negedge enable_tx)
412
begin
413
 
414
        if(!enable_tx)
415
        begin
416
                fct_send <= {3{1'b1}};
417
        end
418
        else
419
        begin
420 6 redbear
 
421
                if(fct_send == 3'd7)
422
                begin
423
                        fct_send <= 3'd1;
424
                end
425
                else
426
                begin
427
                        fct_send <= fct_send + 3'd1;
428
                end
429 5 redbear
        end
430
 
431
end
432
 
433
 
434
always@(*)
435
begin
436
 
437
        next_state_tx = state_tx;
438
 
439
        enable_null      = 1'b0;
440
        enable_fct       = 1'b0;
441
        enable_n_char    = 1'b0;
442
        enable_time_code = 1'b0;
443
 
444
        case(state_tx)
445
        tx_spw_start:
446
        begin
447
                if(send_null_tx && enable_tx)
448
                begin
449
                        if(global_counter_transfer == 4'd7)
450
                                next_state_tx = tx_spw_null;
451
 
452
                        enable_null = 1'b1;
453
                end
454
                else
455
                begin
456
                        next_state_tx = tx_spw_start;
457
                end
458
        end
459
        tx_spw_null:
460
        begin
461
                enable_null = 1'b1;
462
 
463
                if(global_counter_transfer == 4'd7)
464
                begin
465
                        if(send_null_tx && send_fct_tx && enable_tx)
466
                                next_state_tx = tx_spw_null_fct;
467
                        else
468
                                next_state_tx = tx_spw_null;
469
                end
470
 
471
        end
472
        tx_spw_null_fct:
473
        begin
474
 
475
                enable_null   = 1'b1;
476
                next_state_tx = tx_spw_null_fct;
477
 
478 6 redbear
                if(send_fct_tx && fct_flag > 0)
479 5 redbear
                begin
480
                        enable_null = 1'b0;
481
                        enable_fct = 1'b1;
482
                end
483
                else
484
                begin
485
                        enable_fct = 1'b0;
486
 
487
                        if(send_fct_tx && gotfct_tx)
488
                        begin
489
                                if(global_counter_transfer == 4'd7)
490
                                        next_state_tx =  tx_spw_full;
491
                        end
492
 
493
                end
494
        end
495
        tx_spw_full:
496
        begin
497
 
498
                enable_null = 1'b1;
499
 
500 6 redbear
                if(tickin_tx & (global_counter_transfer == 4'd7 || global_counter_transfer == 4'd9 || global_counter_transfer == 4'd13 || global_counter_transfer == 4'd3))
501 5 redbear
                begin
502 6 redbear
                        enable_time_code = 1'b1;
503 5 redbear
                        enable_null = 1'b0;
504
                end
505 6 redbear
                else if(fct_flag > 3'd0 & (global_counter_transfer == 4'd7 || global_counter_transfer == 4'd9 || global_counter_transfer == 4'd13 || global_counter_transfer == 4'd3))
506 5 redbear
                begin
507 6 redbear
                        enable_fct  = 1'b1;
508 5 redbear
                        enable_null = 1'b0;
509
                end
510 6 redbear
                else if(txwrite_tx && fct_counter_receive > 6'd0 & (global_counter_transfer == 4'd7 || global_counter_transfer == 4'd9 || global_counter_transfer == 4'd13 || global_counter_transfer == 4'd3))
511 5 redbear
                begin
512 6 redbear
                        enable_n_char = 1'b1;
513 5 redbear
                        enable_null = 1'b0;
514
                end
515
 
516
        end
517
        endcase
518
 
519
end
520
 
521
always@(posedge pclk_tx)
522
begin
523
        if(!enable_tx)
524
        begin
525
                null_s <= 8'h74;
526
                fct_s  <= 4'h4;
527
                eop_s  <= 4'h5;
528
                eep_s  <= 4'h6;
529
                timecode_s <= 14'h1e00;
530
 
531
                fct_flag <= 3'd0;
532 6 redbear
                fct_send_last <= 3'd0;
533
 
534 5 redbear
                first_time <= 1'b1;
535
                last_type  <= NULL;
536
 
537
                global_counter_transfer <= 4'd0;
538
                txdata_flagctrl_tx_last <= 9'd0;
539
                last_timein_control_flag_tx <= 8'd0;
540 6 redbear
 
541
                fct_counter_receive <= 6'd0;
542
                fct_counter_last <= 6'd0;
543
 
544 5 redbear
                last_tx_dout      <= 1'b0;
545
                last_tx_sout      <= 1'b0;
546
                state_tx <= tx_spw_start;
547
        end
548
        else
549
        begin
550
 
551
                state_tx <= next_state_tx;
552
                last_tx_dout <= tx_dout;
553
                last_tx_sout <= tx_sout;
554
 
555
                if(enable_null)
556
                begin
557 6 redbear
 
558
                        //
559
                        if(fct_send_last != fct_send)
560
                        begin
561
                                if(fct_send == 3'd1 && fct_send_last == 3'd7)
562
                                begin
563
                                        fct_flag <= fct_flag + 3'd1;
564
                                end
565
                                else
566
                                begin
567
                                        fct_flag <= fct_flag + (fct_send - fct_send_last);
568
                                end
569
 
570
                                fct_send_last <= fct_send;
571
                        end
572
 
573
                        //
574
                        if(fct_counter_last != fct_counter)
575
                        begin
576
                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
577
                                begin
578
                                        fct_counter_receive <= fct_counter_receive + 6'd8;
579
                                end
580
                                else
581
                                begin
582
                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last);
583
                                end
584
 
585
                                fct_counter_last <= fct_counter;
586
                        end
587
 
588 5 redbear
                        if(first_time)
589
                        begin
590
                                first_time <= 1'b0;
591
 
592
                                global_counter_transfer <= global_counter_transfer + 4'd1;
593
                        end
594
                        else if(global_counter_transfer != 4'd7)
595
                        begin
596
                                global_counter_transfer <= global_counter_transfer + 4'd1;
597
                        end
598
                        else
599
                        begin
600
                                global_counter_transfer <= 4'd0;
601
                        end
602
                end
603
                else if(enable_fct)
604
                begin
605 6 redbear
                        //
606
                        if(fct_counter_last != fct_counter)
607
                        begin
608
                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
609
                                begin
610
                                        fct_counter_receive <= fct_counter_receive + 6'd8;
611
                                end
612
                                else
613
                                begin
614
                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last);
615
                                end
616
 
617
                                fct_counter_last <= fct_counter;
618
                        end
619
 
620 5 redbear
                        if(global_counter_transfer != 4'd3)
621
                        begin
622
                                global_counter_transfer <= global_counter_transfer + 4'd1;
623
                        end
624
                        else
625
                        begin
626
                                global_counter_transfer <= 4'd0;
627 6 redbear
                                fct_flag <= fct_flag - 3'd1;
628 5 redbear
                        end
629
                end
630
                else if(enable_time_code)
631
                begin
632 6 redbear
                        //
633
                        if(fct_counter_last != fct_counter)
634
                        begin
635
                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
636
                                begin
637
                                        fct_counter_receive <= fct_counter_receive + 6'd8;
638
                                end
639
                                else
640
                                begin
641
                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last);
642
                                end
643
 
644
                                fct_counter_last <= fct_counter;
645
                        end
646
 
647
                        //
648
                        if(fct_send_last != fct_send)
649
                        begin
650
                                if(fct_send == 3'd1 && fct_send_last == 3'd7)
651
                                begin
652
                                        fct_flag <= fct_flag + 3'd1;
653
                                end
654
                                else
655
                                begin
656
                                        fct_flag <= fct_flag + (fct_send - fct_send_last);
657
                                end
658
 
659
                                fct_send_last <= fct_send;
660
                        end
661
 
662 5 redbear
                        if(global_counter_transfer < 4'd13)
663
                        begin
664
                                global_counter_transfer <= global_counter_transfer + 4'd1;
665
                                last_timein_control_flag_tx <= timecode_tx_i;
666
                        end
667
                        else
668
                        begin
669
                                global_counter_transfer <= 4'd0;
670
                        end
671
                end
672
                else if(enable_n_char)
673
                begin
674 6 redbear
                        //
675
                        if(fct_send_last != fct_send)
676
                        begin
677
                                if(fct_send == 3'd1 && fct_send_last == 3'd7)
678
                                begin
679
                                        fct_flag <= fct_flag + 3'd1;
680
                                end
681
                                else
682
                                begin
683
                                        fct_flag <= fct_flag + (fct_send - fct_send_last);
684
                                end
685
 
686
                                fct_send_last <= fct_send;
687
                        end
688
 
689 5 redbear
                        if(global_counter_transfer < 4'd9 && !data_tx_i[8])
690
                        begin
691
                                global_counter_transfer <= global_counter_transfer + 4'd1;
692
                                txdata_flagctrl_tx_last <= data_tx_i;
693
                        end
694
                        else if(global_counter_transfer < 4'd3 && data_tx_i[8])
695
                        begin
696
                                global_counter_transfer <= global_counter_transfer + 4'd1;
697
                                txdata_flagctrl_tx_last <= data_tx_i;
698
                        end
699
                        else
700
                        begin
701
                                global_counter_transfer <= 4'd0;
702 6 redbear
                                fct_counter_receive <= fct_counter_receive - 6'd1;
703 5 redbear
                        end
704
                end
705
 
706
        end
707
end
708
 
709
endmodule

powered by: WebSVN 2.1.0

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