低空翾翔的个人空间 https://blog.eetop.cn/1459279 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

第三篇:状态机设计

已有 2312 次阅读| 2016-4-15 00:23

今天来记录一下状态机吧,固定格式一般不会忘,某些细节可能会忘,记在这里,忘记了就来翻吧!

(1)有限状态机(Finite State Machine):由寄存器组和组合逻辑构成的硬件时序电路。
   有限状态:由寄存器组的0和1组合而成的若干个状态,在时钟触发下,根据组合逻辑的判断,进行状态之间的转换(寄存器组值的改变)。


(2)状态机的分类:{
①mealy状态机:输出与输入和当前状态有关
②Moore状态机:输出仅仅和当前状态有关
实际运用时不区分,写出来就OK...
}


(3)写代码时,最好先写状态迁移图;

  定义状态机的状态最好使用大写字母。

(4)编码方式有二进制编码、独热码、格雷码等
二进制编码使用的寄存器数少,但是使用的组合逻辑较多(如比较器的位数较多,容易产生毛刺造成比较错误,不能高速运行);
独热码使用的寄存器多,但是占用组合逻辑的资源少(如比较器位数是少,综合时会把状态综合成1位,state == 2‘b01--->综合器优化成state[0] == 1'b1,也就是优化成1位,二进制的则不能进行优化)。


(5)状态机的设计方法一般有两段式和三段式,因为
三段式的状态机就是在两段式下加多一段组合逻辑;当前状态寄存器和下一状态寄存器合并到一起就是二段式状态机。

(6)使用两段式设计状态机风格一:{
第一部分描述状态机:复位,根据不同状态,进行条件判断,对状态进行转移(也就是给状态赋值);
第二部分使用状态机控制变量输出:在不同的always块下对不同的输出进行赋值(也就是在一个always块中,根据不同的状态和条件,对一个输出进行赋值;
在另一个always块中,根据不同的状态和条件,对另一个输出进行赋值....直到每个输出都被输出为止,当然不要忘记了复位赋值)。
}

(7)使用两段式设计状态机风格二:{
使用两个always块:一个用于时序状态寄存器;另外一个用于组合状态逻辑,判断下一个状态和输出逻辑。
格式如下:
   module  xxxx(xxx);
 
   声明state,next_state变量
   .....
   //第一个always块,用来描述时序状态寄存器
   always@(posedge ckj or negedge rst_n)
   if(!rst_n)
      state <= IDLE;
   else
 
   state <= next_state;

   //第二个always块,组合逻辑
   always@(*)
   begin
   
   next_state <= IDLE;//下一状态初始值
   
   输出变量初始化;

  
     case(state)
             xxx:begin
                   next_state的赋值;
                   输出变量的赋值;
             end
           
             ......

              xxx:....




  
     endcase

   end

endmodule

该风格的注意事项和编码规则:
①在组合always使用always(*)语句以简化大妈设计
②always语句块的上部
初始化赋默认值,可以避免生成锁存器
③状态转移图中的每一个转换(if、if-else...),在组合always块中都要有相应的if-else块语句,数目要相等,逻辑要一致,否则实现的功能可能不一致。
④FSM中设计使用寄存器输出可以保证输出没有毛刺。、
⑤将第二个模块拆成两个always块,即
一个always块支队状态进行赋值,根据不同状态,进行条件判断,给状态赋值;另一个状态使用状态机控制输出变量输出。这样就成为了三端式状态机(输出变量值的赋值可以在不同的always块进行)
}


(8)case语句中,在几个不同情况下执行相同操作的格式为;
case()
   xx,xx,xx:begin

   end
 ...
endcase

写完了...晚上上完课后,查了一些资料,写了这些东西,就到了这个点。晚安!


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 5

    粉丝
  • 2

    好友
  • 3

    获赞
  • 3

    评论
  • 589

    访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-19 22:21 , Processed in 0.023943 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部