每天进步一点点------基础实验_12_有限状态机 :Moore型序列检测器

 1 /*********************************************************************************
 2 * Company                    : 
 3 * Engineer                    : 空气微凉
 4 * 
 5 * Create Date                : 00:00:00 22/03/2013 
 6 * Design Name                : 
 7 * Module Name                :         
 8 * Project Name                :  
 9 * Target Devices            : 
10 * Tool versions            : 
11 * Description                :  
12 *                       http://www.cnblogs.com/kongqiweiliang/             
13 * Dependencies                : 
14 *
15 * Revision                    : 
16 * Revision                    : 0.01 - File Created
17 * Additional Comments    : 基础实验_12_有限状态机 :Moore型序列检测器
18 ********************************************************************************/
19 `timescale 1ns/1ps
20 `define    UD  #1
21 /*******************************************************************************/
22 module SEQ_REC_MOORE    
23 ( 
24     //system interface
25     input                                     iCLK_50        ,//50MHz
26     input                                     iRESET         ,//system interface
27     //Interface package
28     input                                     iDAT_EN        ,//
29     input                                     iDAT            ,//
30     output                                oDAT             //
31 );  
32 //-------------------------------------------------------------------------------
33 parameter   FSM_IDLE    =    3'h0;
34 parameter   FSM_0        =    3'h1;
35 parameter   FSM_1        =    3'h2;
36 parameter   FSM_2        =    3'h3;
37 parameter   FSM_3        =    3'h4;
38 
39 reg  [2:0]  FSM_CS;
40 reg  [2:0]  FSM_NS;
41 
42 // Moore状态机的输出只与有限状态机的当前状态有关,与输入信号的当前
43 // 值无关。 Moore有限状态机在时钟CLOCK脉冲的有效边沿后的有限个门延后,
44 // 输出达到稳定值。即使在一个时钟周期内输入信号发生变化,输出也会在一个
45 // 完整的时钟周期内保持稳定值而不变。输入对输出的影响要到下一个时钟周期
46 // 才能反映出来。   
47 // Moore有限状态机最重要的特点就是将输入与输出信号隔离开来。
48 
49 // 序列检测的作用是,先根据要检测的序列设计好状机的跳转,状态机会去匹配
50 // 指定的序列,在检测到符合要求后,保持一个CLK的脉冲
51 always@(posedge iCLK_50 or negedge iRESET)begin
52     if(!iRESET)
53         FSM_CS <= FSM_IDLE;
54     else
55         FSM_CS <= FSM_NS;
56 end
57 always@(*)begin
58     case(FSM_CS)
59         FSM_IDLE    : 
60                         if(iDAT_EN && iDAT)                FSM_NS = FSM_1;
61                         else if(iDAT_EN && (!iDAT))      FSM_NS = FSM_0;
62                         else                                  FSM_NS = FSM_IDLE;
63         FSM_0        :
64                         if(!iDAT)                              FSM_NS = FSM_0; 
65                         else if(iDAT)                         FSM_NS = FSM_1; 
66                         else                                  FSM_NS = FSM_IDLE;
67         FSM_1        :
68                         if(!iDAT)                              FSM_NS = FSM_0; 
69                         else if(iDAT)                         FSM_NS = FSM_2; 
70                         else                                  FSM_NS = FSM_IDLE;
71         FSM_2        ,
72         FSM_3        :
73                         if(!iDAT)                              FSM_NS = FSM_0; 
74                         else if(iDAT)                         FSM_NS = FSM_3; 
75                         else                                  FSM_NS = FSM_IDLE;
76         default  : 
77                          FSM_NS = FSM_IDLE;
78     endcase
79 end
80 
81 assign oDAT = (FSM_CS == FSM_3) ? 1'h1 : 1'h0;
82 //-------------------------------------------------------------------------------
83 endmodule 

 

posted on 2013-08-08 20:01  空气微凉  阅读(748)  评论(0编辑  收藏  举报

导航