Featured image of post 北航CO_P0课下——FSM

北航CO_P0课下——FSM


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。

使用 Hugo 构建
主题 StackJimmy 设计