欢迎光临散文网 会员登陆 & 注册

如何写好状态机

2022-10-19 14:59 作者:学啥都不行的小菜鸡  | 我要投稿


状态机:

摩尔状态机:输出与输入无关

米利状态机:输出与输入有关

如何写好状态机:

写状态机可能遇到的问题:

1、两个状态转换时,出现过渡状态;

2、在运行过程中,进入非法状态;

3、在一种器件上综合出理想结果,移植后不能得到相同结果;

4、能够稳定工作但是占用资源过多。

 

摩尔状态机输出与时钟同步,可以在一定程度上剔除抖动,建议使用摩尔状态机。

 

 

3种编码形式的分析:

1、顺序码:即state_0=00,state_1=01,state_2=10;

2、格雷码:即state_0=00,state_1=01,state_2=11,state_3=10;

3、独热码:即state_0=000,state_1=001,state_2=010,state_3=100;

 

分析:使用顺序码时,“01”到“10”这种转化过程可能出现过渡态“11”或“00”,当高位翻转过快“11”当低位翻转过快“00”,所以如果状态机状态值更多的话,产生过渡状态的概率更大。

 

使用格雷码时,由于相邻只有一个不同,所以可以很大程度上消除延时引起的过渡状态,但是当下一个状态有多种路径时(不会只变化相邻位),可以采用独热码。

 

 

状态机形式

由于很多状态机的输出是组合逻辑,很容易产生毛刺,所以推荐写状态机时用时序逻辑:

例:always@(posedge clk or negedge rst)

bgein

   if ( rst )

      初始化

   else if (clk event and clk = 1)

   case ()

注意画蓝色部分,由于是异步复位,如果直接进行状态跳转,可能进入非法状态。


如何写好状态机的评论 (共 条)

分享到微博请遵守国家法律