@@ -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
3030reg [2 :0 ] state = `RESET;
@@ -85,11 +85,19 @@ always @(posedge clk) begin
8585 end
8686end
8787
88+ /*
89+ * Disable at any time in the flow
90+ */
8891always @(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 -
0 commit comments