summaryrefslogtreecommitdiff
path: root/hdl/rs232.sv
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--hdl/rs232.sv26
1 files changed, 14 insertions, 12 deletions
diff --git a/hdl/rs232.sv b/hdl/rs232.sv
index 2f631f8..03378ef 100644
--- a/hdl/rs232.sv
+++ b/hdl/rs232.sv
@@ -20,7 +20,7 @@ module rs232_tx
20 , STOP 20 , STOP
21 } state; 21 } state;
22 22
23 bit [$clog2(`UART_BYTE_BITS+1):0] data_bits; 23 bit [$clog2(`UART_BYTE_BITS):0] data_bits;
24 24
25 always @(posedge clock) begin 25 always @(posedge clock) begin
26 if (reset) begin 26 if (reset) begin
@@ -34,7 +34,7 @@ module rs232_tx
34 hold_valid = 1; 34 hold_valid = 1;
35 hold = out_data; 35 hold = out_data;
36 state = state.first; 36 state = state.first;
37 data_bits = `UART_BYTE_BITS; 37 data_bits = 0;
38 end 38 end
39 39
40 if (hold_valid) begin 40 if (hold_valid) begin
@@ -46,10 +46,11 @@ module rs232_tx
46 end 46 end
47 47
48 DATA: begin 48 DATA: begin
49 --data_bits; 49 tx = hold[data_bits];
50 tx = !out_data[data_bits]; 50 if (data_bits == `UART_BYTE_BITS-1)
51 if (data_bits == 0)
52 state = state.next; 51 state = state.next;
52 else
53 ++data_bits;
53 end 54 end
54 55
55 STOP: begin 56 STOP: begin
@@ -86,8 +87,8 @@ module rs232_rx
86 , STOP 87 , STOP
87 } state; 88 } state;
88 89
89 uart_byte_t buffer; 90 uart_byte_t buffer;
90 bit [$clog2(`UART_BYTE_BITS+1):0] data_bits; 91 bit [$clog2(`UART_BYTE_BITS):0] data_bits;
91 92
92 always @(posedge clock) begin 93 always @(posedge clock) begin
93 if (reset) begin 94 if (reset) begin
@@ -105,21 +106,22 @@ module rs232_rx
105 if (rx == 0) begin 106 if (rx == 0) begin
106 state = state.next; 107 state = state.next;
107 buffer = 0; 108 buffer = 0;
108 data_bits = `UART_BYTE_BITS; 109 data_bits = 0;
109 end 110 end
110 end 111 end
111 112
112 DATA: begin 113 DATA: begin
113 --data_bits; 114 buffer[data_bits] = rx;
114 buffer[data_bits] = !rx; 115 if (data_bits == `UART_BYTE_BITS-1)
115 if (data_bits == 0)
116 state = state.next; 116 state = state.next;
117 else
118 ++data_bits;
117 end 119 end
118 120
119 STOP: begin 121 STOP: begin
120 if (!in_valid && rx == 1) begin 122 if (!in_valid && rx == 1) begin
121 in_valid = 1; 123 in_valid = 1;
122 in_data = data_bits; 124 in_data = buffer;
123 end 125 end
124 state = state.next; 126 state = state.next;
125 end 127 end