原创 [原创]一些有用的Verilog程序

2008-5-31 21:49 1544 3 3 分类: 模拟

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进行赋值
这样写的好处就是清晰

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条