module rx ( clk, din, ready, D_out );
input clk, din;
output [7:0] D_out;
output ready;
reg rdy;
reg [7:0] dout = 8'b11111111;
wire clk_en;
baud a0 ( clk, clk_en );
reg [4:0] cnt = 5'b00000;
reg [3:0] state = 4'b0000;
always @ (posedge clk)
if (clk_en)
begin
case(state)
4'b0000: begin
rdy = 1'b0;
if ( din == 1'b0 && cnt == 4'b0110 ) begin
state <= 4'b0001;
cnt <= 4'b0001; end
else
state <= 4'b0000;
if (din == 1'b0)
cnt <= cnt + 1'b1;
else
cnt <= cnt + 1'b0; end
4'b0001: begin
if (cnt == 4'b1111) begin
state <= 4'b0010;
cnt <= 4'b0000;
dout <= {din,dout[7:1]}; end
else
cnt <= cnt + 1'b1; end
4'b0010: begin
if (cnt == 4'b1111) begin
state <= 4'b0011;
cnt <= 4'b0000;
dout <= {din,dout[7:1]}; end
else
cnt <= cnt + 1'b1; end
4'b0011: begin
if (cnt == 4'b1111) begin
state <= 4'b0100;
cnt <= 4'b0000;
dout <= {din,dout[7:1]}; end
else
cnt <= cnt + 1'b1; end
4'b0100: begin
if (cnt == 4'b1111) begin
state <= 4'b0101;
cnt <= 4'b0000;
dout <= {din,dout[7:1]}; end
else
cnt <= cnt + 1'b1; end
4'b0101: begin
if (cnt == 4'b1111) begin
state <= 4'b0110;
cnt <= 4'b0000;
dout <= {din,dout[7:1]}; end
else
cnt <= cnt + 1'b1; end
4'b0110: begin
if (cnt == 4'b1111) begin
state <= 4'b0111;
cnt <= 4'b0000;
dout <= {din,dout[7:1]}; end
else
cnt <= cnt + 1'b1; end
4'b0111: begin
if (cnt == 4'b1111) begin
state <= 4'b1000;
cnt <= 4'b0000;
dout <= {din,dout[7:1]}; end
else
cnt <= cnt + 1'b1; end
4'b1000: begin
if (cnt == 4'b1111) begin
state <= 4'b1001;
cnt <= 4'b0000;
dout <= {din,dout[7:1]}; end
else
cnt <= cnt + 1'b1; end
4'b1001: begin
if (cnt == 4'b1111) begin
state <= 4'b1010;
cnt <= 4'b0000;
dout <= {din,dout[7:1]}; end
else
cnt <= cnt + 1'b1; end
4'b1010: begin
rdy = 1'b1;
if (cnt == 4'b1111) begin
state <= 4'b0000;
cnt <= 4'b0000; end
else
cnt <= cnt + 1'b1; end
endcase
end
assign D_out = dout;
assign ready = rdy;
endmodule