@@ -339,7 +339,7 @@ begin
339339 tx_buffer <= 0 ;
340340 tx_bit_counter <= 0 ;
341341 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
343343 tx_data_parity <= 1'b0 ;
344344 tx_stop_bit_counter_limit <= 0 ;
345345 i <= 0 ;
@@ -406,7 +406,7 @@ begin
406406 tx_buffer <= tx_data;
407407 tx_data_copied <= 1'b1 ;
408408 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
410410 end
411411 if (tx_transaction == 1'b0 )
412412 begin
@@ -417,9 +417,10 @@ begin
417417 begin
418418 tx <= 1'b0 ;
419419 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)
421421 begin
422422 tx_bit_counter <= 0 ;
423+ tx_data_bit_counter <= 0 ;
423424 tx_state <= DATA_BITS_EXCHANGE_STATE;
424425 end
425426 end
@@ -432,13 +433,21 @@ begin
432433 end
433434 else
434435 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
442451 end
443452 end
444453 PARITY_BIT_EXCHANGE_STATE:
@@ -458,12 +467,26 @@ begin
458467 begin
459468 tx <= 1'b0 ;
460469 end
461- default :
470+ `EVEN_PARITY :
462471 begin
463- tx_data_parity <= tx_buffer[0 ];
464- for (i = 1 ; i < DEFAULT_BYTE_LEN; i = i + 1 )
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
465488 begin
466- tx_data_parity <= tx_data_parity ^ tx_buffer[i] ;
489+ tx <= 1'b1 ;
467490 end
468491 end
469492 endcase
@@ -490,7 +513,7 @@ begin
490513 begin
491514 tx <= 1'b1 ;
492515 tx_bit_counter <= tx_bit_counter + 1 ;
493- if (tx_bit_counter = = tx_stop_bit_counter_limit)
516+ if (tx_bit_counter > = tx_stop_bit_counter_limit)
494517 begin
495518 tx_bit_counter <= 0 ;
496519 tx_state <= SYNCH_STOP_EXCHANGE_STATE;
0 commit comments