一、需求分析
使用状态机,对输入序列进行1010序列检测,当输入序列为1010时,输出为1,其它情况输出为0(101010认为是两个1010序列)。
二、设计思路
使用状态机进行实现,1010序列检测一共有5种状态。具体如下:
Rst:复位,整体进入S0态;
S0:检测到1输入,进入S1态,否则继续停留在S0;
S1:检测到0输入,进入S2,否则留在S1态;
S2:检测到1输入,进入S3,否则进入S0;
S3:检测到0输入,进入S4,否则进入S1;
S4:输出检测结果1;如果检测到0输入,进入S0,否则进入S3。
状态跳转图如下:
三、代码实现
整体使用三段式状态机:
第一个always模块采用时序逻辑的方式描述状态转移;
state<= next_state;
第二个always模块采用组合逻辑方式描述状态转移规律;
next_state <= S0 or S1 or S2 or S3 or S4;
第三个always模块采用时序逻辑描述电路输出:
Z <= 1;
四、结果测试
State machine viewer
:
波形测试:
101010看作是两次序列