序列检测器是在数字码流中检测特定序列,利用同步状态机的方式可以较容易的实现。
比如设计一个检测序列为10010的检测器。
ST1:确定状态机的状态数亮;
ST2:确定每个状态下的变量的值;
ST3:状态之间切换的条件;
ST4:触发状态机的条件;
module xulie(x,z,clk,rst);
input x,clk,rst;
output z;
wire z;
reg[2:0]state;
parameter idle = 3'd0;
parameter a = 3'd1;
parameter b = 3'd2;
parameter c = 3'd3;
parameter d = 3'd4;
parameter e = 3'd5;
parameter f = 3'd6;
parameter g = 3'd7;
assign z = (state==d && x==0) ?1:0;
always @(posedge clk or negedge rst)
begin
if (!rst)
begin
state <= idle;
end
else
casex(state)
idle :if (x==1)
state <= a;
else state <= idle;
a: if (x==0)
state <= b;
else state <= a;
b : if (x==0)
state <= c;
else state <= f;
c : if(x==1)
state <= d;
else state <= g;
d : if(x==0)
state <= e;