10010序列检测器的verilog实现

//模块功能:检测到序列"10010"时立即输出1,这是个摩尔型电路

//QQ:787671932    2012-9-25

module seqdet(x,z,clk,rst);

input x,clk,rst;              //x为输入序列

output z;                        

 

reg[2:0]state,nstate;        //state为当前状态,nstate为下一状态

 

parameter  IDLE=3'd0,    //初始状态

              A=3'd1,    //状态序列1

              B=3'd2,    //状态序列10

              C=3'd3,    //状态序列100

              D=3'd4,    //状态序列1001

              E=3'd5;    //状态序列10010        

always@(x,state)

    case(state)

     IDLE:if(x==1)  nstate=A;

          else      nstate=IDLE;

     A:   if(x==0)  nstate=B;

          else      nstate=A;

     B:   if(x==0)  nstate=C;

                else      nstate=A;

     C:   if(x==1)  nstate=D;

          else      nstate=IDLE;

     D:   if(x==0)  nstate=E;

          else      nstate=A;

        E:   if(x==0)  nstate=C;

             else     nstate=A;

        default:       nstate<=IDLE;

       endcase

///    

always@(posedge clk,negedge rst)

 if(!rst)   state<=IDLE;

 else     state<=nstate;

//

assign z=(state==E);  //z输出为1的条件,z只和状态有关,所以为摩尔型

/

endmodule

 

 

 

//模块功能:检测到序列"10010"时立即输出1,这是个米利型电路

//QQ:787671932    2012-9-24

module seqdet(x,z,clk,rst);

input x,clk,rst;              //x为输入序列

output z;                        

reg[2:0]state,nstate;        //state为当前状态,nstate为下一状态

parameter  IDLE=3'd0,    //初始状态

              A=3'd1,    //状态序列1

              B=3'd2,    //状态序列10

              C=3'd3,    //状态序列100

              D=3'd4,    //状态序列1001

              E=3'd5;    //状态序列10010        

always@(x,state)

    case(state)

     IDLE:if(x==1) nstate=A;

          else     nstate=IDLE;

     A:   if(x==0) nstate=B;

          else     nstate=A;

     B:   if(x==0) nstate=C;

                else     nstate=A;

     C:   if(x==1) nstate=D;

          else     nstate=IDLE;

     D:   if(x==0) nstate=E;

          else     nstate=A;

        E:   if(x==0) nstate=C;

             else     nstate=A;

        default:      nstate<=IDLE;

       endcase

///    

always@(posedge clk,negedge rst)

 if(!rst) state<=IDLE;

 else     state<=nstate;

//

assign z=(state==D) && (x==0);  // z既和状态有关又和输入有关,所以为米利型

/

endmodule

 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值