verilog-状态机设计

一,状态机的基本概念:
       硬件设计讲究并行设计的思想,虽然用verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机的思想,什么是状态机呢?简单的说,就是通过不同的状态迁移来完成一些特定的顺序逻辑,硬件的并行性决定了用verilog描述的硬件实现都是并行执行的,那么如果希望分多个事件完成一个任务,怎么办?也许可以用多个使能信号来衔接多个不同的模块,但是这样做多少显得有些繁琐,状态机的提出就会大大简化这一工作。
       下面举一个SRAM控制的例子来说明状态机,如图所示,它表示了一个SRAM控制状态的变化。
首先,在系统复位信号rst_n(复位有效)后,进入IDLE状态,每当rst_n=0(复位有效)时,都会保持在IDLE状态,当rst_n=1(复位完成),如果wr_req=1就进入WR_S1状态,如果rd_req=1就会进入RD_S1的状态,否则保持IDLE状态不变,相应的,只要满足一定条件或者有时不需要任何条件,系统会在这些固定的状态间进行切换,这样做的好处在于每当需要操作SRAM时,其他模块只要发出一个wr_req或者rd_req信号(置高),系统就会进入相应状态并根据不同状态对SRAM的控制总线,地址总线和数据总线进行赋值。
      构成状态机的基本要素是状态机的输入,输出和状态,输入就是一些引发状态变化的条件,比如上图中wr_req和rd_req的变化会引发状态的迁移,那么他们就是输入,输出就是状态变化后引起的变化,图中的控制总线,地址总线和数据总线的输出值就是由状态变化决定的,状态就是IDLE,WR_S1,WR_S2等,它们一般由一些逻辑来表示。
        状态机根据其状态变化是否与输入条件相关分为两类,即Moore型状态机和Mealy型状态机,Moore型状态机的状态变化仅仅和当前状态有关,而与输入条件无关,Mealy型状态机的状态变化不仅与当前状态有关,还取决于当前的输入条件。
       二:几种不同状态机的写法
              状态机一般有三种不同的写法,即一段式,两段式和三段式的状态机写法,它们在速度,面积,代码可维护性等各个方面互有优劣,下面就前面提出的SRAM控制状态机给出三种不同的写法以及它们综合出的效果,供大家学习参考。wr_req和rd_req作为输入,cmd作为输出,cstate,nstate为状态寄存器。
   1,一段式状态机
   
2:两段式状态机

还有三段式状态机:

从上面的实例来看,一段式状态机似乎是一锅端,把所有逻辑(包括输入,输出,状态)都在一个always里解决了,这种写法看上去好像很简洁,但是往往不利于维护,这种写法不太推荐,但是在一些简单的状态机中还是可以使用的,两段式状态机是一种常用的写法,他把时序逻辑和组合逻辑划分开来,时序逻辑里进行当前逻辑和下一逻辑的切换,组合逻辑里实现各个输入输出及状态判断,这种写法相对容易维护,不过组合逻辑输出较容易出现毛刺等常见问题。三段式状态机的写法是一种比较推荐的写法,代码容易维护,时序逻辑的输出解决了两段式写法中组合逻辑的毛刺问题,但是从资源消耗上来讲,三段式消耗的资源会多一些,另外,三段式输入从输入到输出比一段式会延迟一个时钟周期。三段式状态机将时序逻辑和组合逻辑分开,状态和输出分开,清晰容易理解。

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值