module FSMproj(clk,rst,datain,dataout);
input clk;
input rst;
input datain;
output dataout;
reg dataout;
reg[1:0] state;
parameter idle=2'b00,
start=2'b01,
second=2'b10,
third=2'b11;
always@(posedge clk or negedge rst)
if(!rst)
state<=idle;
else
case(state)
idle:
begin
state<=start;
dataout<=1'b0;
end
start:
begin
dataout<=1'b0;
if(1'b0==datain)// 检测第一位
state<=second;//相等的时候,检测第二位
else
state<=start;//不相等的时候,继续检测第一位
end
second:
begin
if(1'b1==datain)// 检测第二位
state<=third;//相等的时候,检测第二位
else
state<=second;//不相等的时候,继续检测第二位
end
third:
begin
if(1'b0==datain)// 检测第三位
begin
dataout<=1'b1;
state<=start;
end
else
begin
dataout<=1'b0;
state<=start;
end
end
default:state<=idle;
endcase
endmodule
仿真如下
对于多位的检测 只是状态机复杂些 原理一样
文章评论(0条评论)
登录后参与讨论