module HDLC(RXD,RXCLK,RXSET,TXCLK,TXD,TXDS);
input RXD;
input RXCLK;
input RXSET;
output[7:0]TXD;
reg [7:0]TXD;
output[2:0]TXDS;
reg [2:0]TXDS;
output TXCLK;
reg TXCLK;
reg RXD_D1;
reg RXD_D2;
reg RXD_D3;
reg RXD_D4;
reg RXD_D5;
reg RXD_D6;
reg RXD_D7;
reg RXD_D8;
always @(posedge RXCLK or negedge RXSET)
if(!RXSET)
RXD_D1<=1'b0;
else RXD_D1<=RXD;
always @(posedge RXCLK or negedge RXSET)
if(!RXSET)
RXD_D2<=1'b0;
else RXD_D2<=RXD_D1;
always @(posedge RXCLK or negedge RXSET)
if(!RXSET)
RXD_D3<=1'b0;
else RXD_D3<=RXD_D2;
always @(posedge RXCLK or negedge RXSET)
if(!RXSET)
RXD_D4<=1'b0;
else RXD_D4<=RXD_D3;
always @(posedge RXCLK or negedge RXSET)
if(!RXSET)
RXD_D5<=1'b0;
else RXD_D5<=RXD_D4;
always @(posedge RXCLK or negedge RXSET)
if(!RXSET)
RXD_D6<=1'b0;
else RXD_D6<=RXD_D5;
always @(posedge RXCLK or negedge RXSET)
if(!RXSET)
RXD_D7<=1'b0;
else RXD_D7<=RXD_D6;
always @(posedge RXCLK or negedge RXSET)
if(!RXSET)
RXD_D8<=1'b0;
else RXD_D8<=RXD_D7;
///////////////////////////////////////////////////////////////////
////////////////////search for 01111110 indacation/////////////////
///////////////////////////////////////////////////////////////////
reg [2:0]l_cs,l_ns;
parameter s_hunt=3'd0,s0=3'd1,s1=3'd2,s2=3'd3,s3=3'd4,s4=3'd5,s5=3'd6,s6=3'd7;
always @(posedge RXCLK or negedge RXSET)
if(!RXSET)
l_cs<=s_hunt;
else l_cs<=l_ns;
always @(l_cs or RXD)
case(l_cs)
s_hunt:begin
if(RXD==1'b0)
l_ns=s0;
else l_ns=s_idle;
end
s0:begin
if(RXD==1'b1)
l_ns=s1;
else l_ns=s0;
end
s1:begin
if(RXD==1'b1)
l_ns=s2;
else l_ns=s0;
end
s2:begin
if(RXD==1'b1)
l_ns=s3;
else l_ns=s0;
end
s3:begin
if(RXD==1'b1)
l_ns=s4;
else l_ns=s0;
end
s4:begin
if(RXD==1'b1)
l_ns=s5;
else l_ns=s0;
end
s5:begin
if(RXD==1'b1)
l_ns=s6;
else l_ns=s0;
end
s6:l_ns=s_idle;
endcase
reg SE_ind;
always @(l_cs or RXD)
if(l_cs==s6 && RXD==1'b0)
SE_ind=1'b1;
else SE_ind=1'b0;