Skip to content

Commit 5d175f0

Browse files
committed
RX "valid" goes high one clock cycle after received data has been latched into "out".
1 parent ae9dfd6 commit 5d175f0

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

uart/UARTReceiver.v

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ module UARTReceiver #(
6464
reg [2:0] inputReg; // shift reg for input signal
6565
reg [3:0] sampleCount; // clock count for 16x oversample
6666
reg [7:0] data; // input data buffer
67+
reg data_ready;
6768

6869
always @(posedge clk) begin
6970
if (reset || !enable) begin
@@ -72,7 +73,10 @@ module UARTReceiver #(
7273
end else if (rxCounter < RX_CLOCK_PERIOD - 1) begin
7374
// RX clock
7475
rxCounter <= rxCounter + 1;
75-
if (ready) begin
76+
if (data_ready) begin
77+
data_ready <= 0;
78+
valid <= 1;
79+
end else if (ready) begin
7680
valid <= 0;
7781
end
7882
end else begin
@@ -90,6 +94,7 @@ module UARTReceiver #(
9094
bitIndex <= 3'b0;
9195
sampleCount <= 4'b0;
9296
data <= 8'b0;
97+
data_ready <= 0;
9398
if (enable) begin
9499
state <= `IDLE;
95100
end
@@ -101,6 +106,7 @@ module UARTReceiver #(
101106
bitIndex <= 3'b0;
102107
sampleCount <= 4'b0;
103108
data <= 8'b0;
109+
data_ready <= 0;
104110
error <= 0;
105111
overrun <= 0;
106112
end else if (!(|inputReg) || (|sampleCount)) begin
@@ -134,7 +140,7 @@ module UARTReceiver #(
134140
if (&inputReg) begin
135141
if (!valid) begin
136142
out <= data;
137-
valid <= 1;
143+
data_ready <= 1;
138144
end else begin
139145
overrun <= 1;
140146
end

0 commit comments

Comments
 (0)