霡霂的个人空间 http://blog.eetop.wang/maimu [收藏] [复制] [分享] [RSS]

日志

三段式状态机

已有 1713 次阅读2006-10-20 19:47 |个人分类:备份

天气: 晴朗
心情: 高兴

时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息。

    状态机采用VerilogHDL语言编码,建议分为三个always段完成。

    三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器,然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。

   三段式描述方法虽然代码结构复杂了一些,但是换来的优势是使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。

示列如下:

//第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器

always @ (posedge clk or negedge rst_n)  //异步复位

 if(!rst_n)

   current_state <= IDLE;

 else

   current_state <= next_state;//注意,使用的是非阻塞赋值

//第二个进程,组合逻辑always模块,描述状态转移条件判断

always @ (current_state)   //电平触发

  begin

    next_state = x;  //要初始化,使得系统复位后能进入正确的状态

    case(current_state)

    S1: if(...)

       next_state = S2;  //阻塞赋值

    ...

    endcase

end 

//第三个进程,同步时序always模块,格式化描述次态寄存器输出

always @ (posedge clk or negedge rst_n)

...//初始化

 case(next_state)

S1:

   out1 <= 1'b1;  //注意是非阻塞逻辑

S2:

   out2 <= 1'b1;

default:...   //default的作用是免除综合工具综合出锁存器。

endcase

end

三段式并不是一定要写为3个always块,如果状态机更复杂,就不止3段了。


点赞

评论 (0 个评论)

facelist

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

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

    周排名
  • 23

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 45

    评论
  • 0

    收藏
  • 0

    访问数

关于我们| 小黑屋| 手机版| Archiver| 在线咨询 |  ET创芯网(EETOP) ( 京ICP备15035084号 京公网安备:11010502037710 )

GMT+8, 2021-10-21 07:06 , Processed in 0.045159 second(s), 17 queries , Redis On.

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