10010010的重复我知道,但是还是推不出8种状态来,能否解释一下为什么状态B在输入为1的情况下会变成状态F而不是A呢?程序如下:<br>
seqdet.v<br>
module seqdet(x,z,clk,rst,state);<br>
input x,clk,rst;<br>
output z;<br>
output[2:0] state;<br>
reg[2:0] state;<br>
wire z;<br>
parameter IDLE='d0, A='d1, B='d2,<br>
C='d3, D='d4,<br>
E='d5, F='d6,<br>
G='d7;<br>
assign z = ( state==E && x==0 )? 1 : 0; <br>
always @(posedge clk)<br>
if(!rst)<br>
begin<br>
state <= IDLE;<br>
end<br>
else<br>
casex(state)<br>
IDLE : if(x==1)<br>
begin<br>
state <= A;<br>
end<br>
A: if(x==0)<br>
begin<br>
state <= B;<br>
end<br>
B: if(x==0)<br>
begin<br>
state <= C;<br>
end<br>
else<br>
begin<br>
state <= F;<br>
end<br>
C: if(x==1)<br>
begin<br>
state <= D;<br>
end<br>
else<br>
begin<br>
state <= G;<br>
end<br>
D: if(x==0)<br>
begin<br>
state <= E;<br>
end<br>
else<br>
begin<br>
state <= A;<br>
end<br>
E: if(x==0)<br>
begin<br>
state <= C;<br>
end<br>
else<br>
begin<br>
state <= A;<br>
end<br>
F: if(x==1)<br>
begin<br>
state <= A;<br>
end<br>
else<br>
begin<br>
state <= B;<br>
end<br>
G: if(x==1)<br>
begin<br>
state <= F;<br>
end<br>
default:state=IDLE; //缺省状态为初始状态。<br>
endcase<br>
endmodule |