mealy状态机
module mealy_lsm(clk,rst,a,z);
input clk,rst;
input a;
output z;
reg z;
reg [2:0] state,nextstate; //用两个状态有很多好处,大家可以体会,有的公司对此也有要求
parameter s0=3'd0,
s1=3'd1,
s2=3'd2,
s3=3'd3,
s4=3'd4,
s5=3'd5;
always@(posedge clk or negedge rst)
if(!rst)
state<=s0;
else
state<=nextstate;
always@(state or a) //检测序列为10101010
case(state)
s0:nextstate=(a==1)?s1:s0;
s1:nextstate=(a==0)?s2:s1;
s2:nextstate=(a==1)?s3:s0;
s3:nextstate=(a==0)?s4:s1;
s4:nextstate=(a==1)?s5:s0;
s5:nextstate=(a==0)?s4:s1;
default: nextstate="s0";
endcase
always@(posedge clk or negedge rst)
if(!rst)
z<=0;
else
case(state)
s0,s1,s2,s3,s4:z<=0;
s5: if(!a) z<=1;
else z<=0;
endcase
endmodule
/*----------------------------总结---------------------
用了两个状态state与nextstate
用时序来对state进行判断,而用组合来判断nextstate
最后用一个时序来专门对Z进行赋值
这样写的好处就是清晰
文章评论(0条评论)
登录后参与讨论