单FSM实现重叠序列检测器(检测"11001"并置位标志两时钟周期)
单FSM实现"11001"重叠序列检测器(双周期标志位)
状态定义
每个状态整合了序列匹配进度和标志位激活状态,确保单FSM同时完成检测、重叠处理和双周期标志位输出:
- S0:初始状态,未匹配目标序列任何位,标志位
flag=0 - S1:已匹配目标序列第1位("1"),
flag=0 - S2:已匹配目标序列前2位("11"),
flag=0 - S3:已匹配目标序列前3位("110"),
flag=0 - S4:已匹配目标序列前4位("1100"),
flag=0 - S5:成功匹配完整序列"11001",标志位激活第1周期(
flag=1) - S6_0:标志位激活第2周期(
flag=1),当前未匹配任何序列位(S5阶段输入为0) - S6_2:标志位激活第2周期(
flag=1),当前已匹配目标序列前2位(S5阶段输入为1,实现重叠衔接)
状态转移规则
基础匹配状态(S0-S4,flag=0)
- S0:
- 输入
1→ S1 - 输入
0→ S0
- 输入
- S1:
- 输入
1→ S2 - 输入
0→ S0
- 输入
- S2:
- 输入
0→ S3 - 输入
1→ S2(连续多个1时,保持"11"匹配状态)
- 输入
- S3:
- 输入
0→ S4 - 输入
1→ S1(输入1仅能匹配新序列的第1位)
- 输入
- S4:
- 输入
1→ S5(匹配完整序列,进入标志位第1周期) - 输入
0→ S0(序列中断,重置匹配进度)
- 输入
标志位激活状态(S5、S6_0、S6_2,flag=1)
- S5:
- 输入
1→ S6_2(利用前一个序列的最后一位1,衔接新序列的前两位1,实现重叠检测) - 输入
0→ S6_0(无重叠可能,重置匹配进度)
- 输入
- S6_0:
- 输入
1→ S1 - 输入
0→ S0(标志位周期结束,回到基础匹配状态)
- 输入
- S6_2:
- 输入
0→ S3(基于已匹配的"11",继续匹配"110") - 输入
1→ S2(保持"11"匹配状态)
- 输入
输出逻辑
- 当FSM处于S5、S6_0、S6_2状态时,置位
flag=1 - 其他状态下,
flag=0
重叠场景验证(以"110011001"为例)
- 前5位"11001" → 进入S5,
flag=1(第1周期) - 第6位"1" → 进入S6_2,
flag=1(第2周期),同时匹配新序列的前两位"11" - 第7位"0" → 进入S3,
flag=0,匹配"110" - 第8位"0" → 进入S4,
flag=0,匹配"1100" - 第9位"1" → 进入S5,
flag=1(再次检测到完整序列,实现重叠检测)
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

