FSM
这一题题干是检测是否输入的字符串是否符合给定的格式。
具体格式是:先输入一到两个b,再输入两个a或c。
IO
- In[1:0] I
- CLR I
- Z O
基本结构
Mealy状态机
状态变量type
用寄存器表示
状态0
如果输入b则状态为1,否则为0
状态1
经过了Zebra同学的指点,我果断放弃了繁琐至极的原方法。
使用一个通用的计数器,输入b则判断计数器是否大于2,是则状态0且计数器置0,否则计数器增加,否则判断输入是否为a或c,都满足则计数器置1,状态2,否则状态0,同时计数器置0。
为什么不需要这个呢,因为这道题在连续输入b的时候无论几个都只需要保持状态1。
如果输入b,保持状态1。 如果输入a或c,进入状态2。 否则变为状态0。
状态2
如果输入b,进入状态1。 如果输入a或c,进入状态3,否则状态0。
状态3
如果输入b,保持状态1。 如果输入a或c,进入状态0。
PS:状态3其实是多余的,但是两位的寄存器放四个状态比较舒服
复位
同步复位,使用MUX。
子模块设置
状态转移模块
输入:type寄存器的输出和in 输出:type寄存器的输入
输出模块
与常规Mealy状态机一样,本题是状态为2且输入为a或c即输出1。