Beruflich Dokumente
Kultur Dokumente
input clk16x,rec_in;
input rst;
output [7:0] data_out ;
output data_ready ;
output format_error ;
output parity_error ;
reg [3:0] num_receive; // the counter recorded the number of bits recieved
reg data_ready ;
reg parity ;
reg parity_error ;
assign format_error=format_error1|format_error2; //end bit error means the first end bit error or the
second end bit error
end
else if(rec_in&&!read_enable) // when not receiving and serial is 1 ,don't counter
begin
begin_number <=0;
end
else if (begin_number==8&&!read_enable)// detect 8 bits 0 begin to recieve
begin
begin_number<=0;
end
else if(!rec_in||read_enable)//when detect begin bit or recieving data ,start counter
begin
begin_number <=begin_number+1;
end
end
end
else if (num_receive == 4'b1001) //recieve the first end bit
begin
parity_error<=(parity_label==parity)? 0:1;
end_label <= rec_in ;
end
else if (num_receive == 4'b1010) //recieve the second end bit
begin
format_error1<=(end_label==1)? 0:1;
end_label <= rec_in ;
end
else if (num_receive == 4'b1011)
begin
format_error2<=(end_label==1)? 0:1;
end
else if (num_receive == 4'b1100) //judge whether exist a error
begin
if(!format_error1&&!format_error2&&!parity_error)
begin
data_ready<=1;
data_out<=data_reg;
end
end
else if (num_receive == 4'b1110) //recieve end
begin
data_ready<=0;
read_enable<=0;
data_reg<=8'b11111111;
data_out<=8'b11111111;
end_label<=0;
parity_label<=0;
format_error1 <= 1'b0 ;
format_error2 <= 1'b0 ;
parity_error <= 1'b0 ;
num_receive<=0;
end
end
end
endmodule