Skip to content

Commit 324b2d8

Browse files
committed
proper parity forming at TX
1 parent 34b8f50 commit 324b2d8

File tree

1 file changed

+38
-15
lines changed

1 file changed

+38
-15
lines changed

quick_rs232.v

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)