Verilog -- 序列检测器及其最小状态数
Verilog -- 序列检测器及其最小状态数
笔试题:序列检测器检测11011001序列,最少需要几个状态?
Mearly 型:
State\Input | 0 | 1 |
---|---|---|
IDLE | 0\0 | 1\0 |
0 | 0\0 | 1\0 |
1 | 0\0 | 11\0 |
11 | 110\0 | 11\0 |
110 | 0\0 | 1101\0 |
1101 | 0\0 | 11011\0 |
11011 | 110110\0 | 11\0 |
110110 | 1101100\0 | 1101\0 |
1101100 | 0\0 | 11011001\1 |
11011001 | 0\0 | 11\0 |
表格中的值代表:nextstate\output | ||
化简: | ||
下面的状态可以合并:IDLE / 0 /, 1 /11011001 | ||
所以最少的状态数=8. | ||
因为mearly型的输出与输入和当前态都有关,所以可以做到序列最后一位进入状态机匹配后立即产生高电平。 |
注意
这里的最后一个状态在输入1的时候可以跳转到11状态,实际上,在某个输入下不匹配序列或者已经匹配完一整串序列时,都应该检查将这一输入拼接到串里后,序列中是否会出现能够匹配上面某个状态序列的子串,如果存在,则将这一输入对应的状态跳转到匹配的最长子串所表示的状态中。
moore型
State\Input | 0 | 1 | output |
---|---|---|---|
IDLE | 0 | 1 | 0 |
0 | 0 | 1 | 0 |
1 | 0 | 11 | 0 |
11 | 110 | 11 | 0 |
110 | 0 | 1101 | 0 |
1101 | 0 | 11011 | 0 |
11011 | 110110 | 11 | 0 |
110110 | 1101100 | 1101 | 0 |
1101100 | 0 | 11011001 | 0 |
11011001 | 0 | 11 | 1 |
表格中的值代表:nextstate
化简:
下面的状态可以合并:IDLE / 0
所以最少的状态数:8+1=9.
因为moore型的输出只与当前态都有关,所以序列最后一位进入状态机匹配后还要等待一个周期进入最后的状态才能输出高电平。
总结
- 对于Mearly型描述的序列检测器,序列长度为\(n\),对于最少需要的状态数,需要看最后一个状态是否能跳转到除了起始状态的其他状态,如果能,则最少需要的状态就是\(n\)(因为可以和初始状态合并),如果不可以,则最少需要的状态就是\(n+1\)。
- 对于Moore型描述的序列检测器,序列长度为\(n\),则最少需要的状态数就是\(n+1\)。
- mearly型的输出在序列的最后一个比特输入完后立即产生
- moore型的输出因为无法根据输入改变而改变,所以其输出会比mearly型慢一拍。
ps:仿真代码有时间再写吧。。。