@@ -339,7 +339,7 @@ begin
339
339
tx_buffer <= 0 ;
340
340
tx_bit_counter <= 0 ;
341
341
tx <= 1'b1 ; // IDLE state
342
- tx_data_bit_counter <= 1'b0 ; // Data bit counter = 0
342
+ tx_data_bit_counter <= 4'b0000 ; // Data bit counter = 0
343
343
tx_data_parity <= 1'b0 ;
344
344
tx_stop_bit_counter_limit <= 0 ;
345
345
i <= 0 ;
@@ -406,7 +406,7 @@ begin
406
406
tx_buffer <= tx_data;
407
407
tx_data_copied <= 1'b1 ;
408
408
tx_busy <= 1'b1 ;
409
- tx_data_bit_counter <= 1'b0 ; // Data bit counter = 0
409
+ tx_data_bit_counter <= 4'b0000 ; // Data bit counter = 0
410
410
end
411
411
if (tx_transaction == 1'b0 )
412
412
begin
@@ -417,9 +417,10 @@ begin
417
417
begin
418
418
tx <= 1'b0 ;
419
419
tx_bit_counter <= tx_bit_counter + 1 ;
420
- if (tx_bit_counter = = TICKS_PER_UART_BIT)
420
+ if (tx_bit_counter > = TICKS_PER_UART_BIT)
421
421
begin
422
422
tx_bit_counter <= 0 ;
423
+ tx_data_bit_counter <= 0 ;
423
424
tx_state <= DATA_BITS_EXCHANGE_STATE;
424
425
end
425
426
end
@@ -432,13 +433,21 @@ begin
432
433
end
433
434
else
434
435
begin
435
- tx <= tx_buffer[tx_data_bit_counter];
436
- tx_bit_counter <= tx_bit_counter + 1 ;
437
- if (tx_bit_counter == TICKS_PER_UART_BIT)
438
- begin
439
- tx_bit_counter <= 0 ;
440
- tx_data_bit_counter <= tx_data_bit_counter + 4'b0001 ;
441
- end
436
+ tx <= tx_buffer[tx_data_bit_counter];
437
+ tx_bit_counter <= tx_bit_counter + 1 ;
438
+ if (tx_bit_counter >= TICKS_PER_UART_BIT)
439
+ begin
440
+ tx_bit_counter <= 0 ;
441
+ tx_data_bit_counter <= tx_data_bit_counter + 4'b0001 ;
442
+ if (tx_data_bit_counter == 0 )
443
+ begin
444
+ tx_data_parity <= tx_buffer[0 ];
445
+ end
446
+ else
447
+ begin
448
+ tx_data_parity <= tx_data_parity ^ tx_buffer[tx_data_bit_counter];
449
+ end
450
+ end
442
451
end
443
452
end
444
453
PARITY_BIT_EXCHANGE_STATE:
@@ -458,14 +467,37 @@ begin
458
467
begin
459
468
tx <= 1'b0 ;
460
469
end
461
- default :
470
+ `EVEN_PARITY:
471
+ begin
472
+ if (tx_data_parity == 1'b1 )
473
+ begin
474
+ tx <= 1'b1 ;
475
+ end
476
+ else
477
+ begin
478
+ tx <= 1'b0 ;
479
+ end
480
+ end
481
+ `ODD_PARITY:
482
+ begin
483
+ if (tx_data_parity == 1'b1 )
484
+ begin
485
+ tx <= 1'b0 ;
486
+ end
487
+ else
488
+ begin
489
+ tx <= 1'b1 ;
490
+ end
491
+ end
492
+ /*default:
462
493
begin
463
494
tx_data_parity <= tx_buffer[0];
464
495
for (i = 1; i < DEFAULT_BYTE_LEN; i = i + 1)
465
496
begin
466
497
tx_data_parity <= tx_data_parity ^ tx_buffer[i];
467
498
end
468
- end
499
+ // todo(UMV): NOT separated Even && Odd
500
+ end*/
469
501
endcase
470
502
end
471
503
@@ -490,7 +522,7 @@ begin
490
522
begin
491
523
tx <= 1'b1 ;
492
524
tx_bit_counter <= tx_bit_counter + 1 ;
493
- if (tx_bit_counter = = tx_stop_bit_counter_limit)
525
+ if (tx_bit_counter > = tx_stop_bit_counter_limit)
494
526
begin
495
527
tx_bit_counter <= 0 ;
496
528
tx_state <= SYNCH_STOP_EXCHANGE_STATE;
0 commit comments