Skip to content

Commit 627ce97

Browse files
committed
Fix sampling to be in the exact middle of start signal
1 parent 356e326 commit 627ce97

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+229
-197
lines changed

Uart8Receiver.v

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ module Uart8Receiver (
2424
output reg busy, // transaction is in progress
2525
output reg done, // end of transaction
2626
output reg err, // error while receiving data
27-
output reg [7:0] out // received data put back in parallel form
27+
output reg [7:0] out // the received data assembled in parallel form
2828
);
2929

3030
reg [2:0] state = `RESET;
@@ -85,11 +85,19 @@ always @(posedge clk) begin
8585
end
8686
end
8787

88+
/*
89+
* Disable at any time in the flow
90+
*/
8891
always @(posedge clk) begin
8992
if (!en) begin
9093
state <= `RESET;
9194
end
95+
end
9296

97+
/*
98+
* State machine
99+
*/
100+
always @(posedge clk) begin
93101
case (state)
94102
`RESET: begin
95103
// state variables
@@ -100,7 +108,7 @@ always @(posedge clk) begin
100108
busy <= 1'b0;
101109
done <= 1'b0;
102110
err <= 1'b0;
103-
out <= 8'b0; // parallel data output only during {done}
111+
out <= 8'b0; // output parallel data only during {done}
104112
// next state
105113
if (en) begin
106114
state <= `IDLE;
@@ -131,7 +139,7 @@ always @(posedge clk) begin
131139
end
132140
end else begin
133141
sample_count <= sample_count + 4'b1;
134-
if (sample_count == 4'b1011) begin // reached 11
142+
if (sample_count == 4'b1100) begin // reached 12
135143
// start signal meets an additional hold time
136144
// of >= 4 rx ticks after its own mid-point -
137145
// start new full interval count but from the mid-point
@@ -142,7 +150,7 @@ always @(posedge clk) begin
142150
end
143151
end
144152
end else if (|sample_count) begin
145-
// bit did not remain low while waiting till 7 then 11 -
153+
// bit did not remain low while waiting till 8 then 12 -
146154
// remain in IDLE state
147155
sample_count <= 4'b0;
148156
received_data <= 8'b0;
@@ -247,7 +255,7 @@ always @(posedge clk) begin
247255
if (!err && !in_sample) begin
248256
// accept the trigger to start, right from stop signal high
249257
// (in this case transmit signaling of {done} is in progress)
250-
sample_count <= 4'b0;
258+
sample_count <= 4'b1;
251259
out_hold_count <= sample_count + 5'b00010; // continue counting
252260
state <= `IDLE;
253261
end else if (&sample_count[3:1]) begin // reached 14 -

Uart8Transmitter.v

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* (*change before {done} rising edge)
1515
*
1616
* Finer control over when to start the next frame is provided by cycling
17-
* the {start} input low then driving it high
17+
* the {start} input low then high
1818
*
1919
* System clock must be divided down to the baud rate, which is the
2020
* {clk} input
@@ -46,26 +46,34 @@ module Uart8Transmitter #(
4646
input wire [7:0] in, // parallel data to transmit
4747
output reg busy, // transmit is in progress
4848
output reg done, // end of transmission
49-
output reg out // tx line
49+
output reg out // tx line for serial data
5050
);
5151

5252
reg [2:0] state = `RESET;
5353
reg [7:0] in_data = 8'b0; // shift reg for the data to transmit serially
5454
reg [2:0] bit_index = 3'b0; // index for 8-bit data
5555

56+
/*
57+
* Disable at any time in the flow
58+
*/
5659
always @(posedge clk) begin
5760
if (!en) begin
5861
state <= `RESET;
5962
end
63+
end
6064

65+
/*
66+
* State machine
67+
*/
68+
always @(posedge clk) begin
6169
case (state)
6270
`RESET: begin
6371
// state variables
6472
bit_index <= 3'b0;
6573
// outputs
6674
busy <= 1'b0;
6775
done <= 1'b0;
68-
out <= 1'b1; // line is high for IDLE state
76+
out <= 1'b1; // drive the line high for IDLE state
6977
// next state
7078
if (en) begin
7179
state <= `IDLE;

tests/1.gtkw

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
[*] Sun Oct 16 19:14:34 2022
44
[*]
55
[dumpfile] "1.vcd"
6-
[dumpfile_mtime] "Sun Oct 16 19:12:30 2022"
7-
[dumpfile_size] 1790532
6+
[dumpfile_mtime] "Fri Dec 23 16:04:41 2022"
7+
[dumpfile_size] 1792051
88
[savefile] "1.gtkw"
99
[timestart] 0
1010
[size] 1536 937
11-
[pos] -1 -1
11+
[pos] -9 -9
1212
*-18.545267 1555000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
1313
[treeopen] test.
1414
[treeopen] test.uart1.

tests/10.gtkw

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
[*] Sun Oct 23 01:14:48 2022
44
[*]
55
[dumpfile] "10.vcd"
6-
[dumpfile_mtime] "Sun Oct 23 01:13:28 2022"
7-
[dumpfile_size] 2768265
6+
[dumpfile_mtime] "Fri Dec 23 18:29:48 2022"
7+
[dumpfile_size] 2770260
88
[savefile] "10.gtkw"
99
[timestart] 0
1010
[size] 1536 937
11-
[pos] -1 -1
11+
[pos] -9 -9
1212
*-19.167105 1312000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
1313
[treeopen] test.
1414
[treeopen] test.uart1.

tests/11.gtkw

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
[*] Sun Oct 23 01:14:48 2022
44
[*]
55
[dumpfile] "11.vcd"
6-
[dumpfile_mtime] "Sun Oct 23 01:13:28 2022"
7-
[dumpfile_size] 2768770
6+
[dumpfile_mtime] "Fri Dec 23 18:29:59 2022"
7+
[dumpfile_size] 2771150
88
[savefile] "11.gtkw"
99
[timestart] 0
1010
[size] 1536 937

tests/11.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ always #SIM_TIMESTEP_FACTOR clk = ~clk;
8585
initial c = 1;
8686

8787
always @(posedge uart1.txClk) begin
88-
// drive the start signal low synchronously from the last done signal
88+
// drive the start signal low synchronously from the last tx done signal
8989
if (txDone_1) begin
9090
c <= c + 1;
9191
if (c == 2) begin

tests/12.gtkw

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
[*] Sun Oct 23 04:05:20 2022
44
[*]
55
[dumpfile] "12.vcd"
6-
[dumpfile_mtime] "Sun Oct 23 03:49:29 2022"
7-
[dumpfile_size] 2770174
6+
[dumpfile_mtime] "Fri Dec 23 19:47:31 2022"
7+
[dumpfile_size] 2770294
88
[savefile] "12.gtkw"
99
[timestart] 0
1010
[size] 1536 937
1111
[pos] -9 -9
12-
*-19.167105 1274000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
12+
*-19.167105 1357100 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
1313
[treeopen] test.
1414
[treeopen] test.uart1.
1515
[treeopen] test.uart2.

tests/13.gtkw

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
[*] Sun Oct 23 04:05:20 2022
44
[*]
55
[dumpfile] "13.vcd"
6-
[dumpfile_mtime] "Sun Oct 23 03:49:29 2022"
7-
[dumpfile_size] 21304401
6+
[dumpfile_mtime] "Fri Dec 23 19:50:37 2022"
7+
[dumpfile_size] 21315319
88
[savefile] "13.gtkw"
99
[timestart] 0
1010
[size] 1536 937

tests/14.gtkw

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
[*] Sun Oct 23 04:05:20 2022
44
[*]
55
[dumpfile] "14.vcd"
6-
[dumpfile_mtime] "Sun Oct 23 03:49:29 2022"
7-
[dumpfile_size] 19949918
6+
[dumpfile_mtime] "Fri Dec 23 19:50:49 2022"
7+
[dumpfile_size] 19960343
88
[savefile] "14.gtkw"
99
[timestart] 0
1010
[size] 1536 937

tests/15.gtkw

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
[*] Sun Oct 23 04:55:42 2022
44
[*]
55
[dumpfile] "15.vcd"
6-
[dumpfile_mtime] "Sun Oct 23 04:52:51 2022"
7-
[dumpfile_size] 21305766
6+
[dumpfile_mtime] "Fri Dec 23 19:51:03 2022"
7+
[dumpfile_size] 21316839
88
[savefile] "15.gtkw"
99
[timestart] 0
1010
[size] 1536 937

0 commit comments

Comments
 (0)