第8章有限状态机设计技术有限状态机的简介①基本概念有限状态机用来实现一个数字电路设计的控制部分,与CPU的功能类似,综合了时序逻辑和组合逻辑电路。②有限状态机与CPU功能比较控制功能的实现CPU通过操作指令和硬件操作单元。有限状态机通过状态转移。有限状态机适用于可编程逻辑器件。通过恰当的Verilog语言描述和EDA工具综合,可以生成性能优越的有限状态机,在执行时间、运行速度和占用资源等方面优于CPU实现的设计方案。③有限状态机分类Moore型有限状态机和Mealy型有限状态机。Moore型有限状态机次态逻辑状态寄存器输出逻辑输入次态现态输出时钟复位Moore型:输出信号仅与当前状态有关。有限状态机的简介Mealy型有限状态机Mealy型:输出信号不仅与当前状态有关,还与所有输入信号有关。次态逻辑状态寄存器输出逻辑输入次态现态输出时钟复位有限状态机的简介8.1.2状态机的一般结构有限状态机(FSM,FiniteStateMachine)是时序电路设计中经常采用的一种方式,尤其适于设计数字系统的控制模块。用Verilog的case、if-else等语句能很好地描述基于状态机的设计。1.说明部分状态转换变量的定义和所有可能状态的说明2005版参数说明关键字parameter2.主控时序过程:状态机的运转和状态转换的过程8.1.2状态机的一般结构3.主控组合过程:根据当前状态和外部的信号发出控制信号,同时确定下一状态的走向4.辅助过程:配合状态机工作的组合过程和时序过程。8.1.2状态机的一般结构说明部分主控时序过程8.1.2状态机的一般结构主控组合过程8.1.3初始控制与表述打开“状态机萃取”开关参数的定义状态变量定义用状态机设计一个二进制序列检测器,其功能是检测一个4位二进制序列“1111”,即输入序列中如果有4个或4个以上连续的“1”出现,输出为1,其它情况下,输出为0。有限状态机(FSM)设计举例输出z:000000000000000100001110000其输入输出如下所示:输入x:000101010110111101111110101有限状态机(FSM)设计“1111”序列检测器状态转换图“1111”序列检测器的Verilog描述modulefsm_seq(x,z,clk,reset,state);inputx,clk,reset;outputz;output[2:0]state;regz;parameters0=0,s1=1,s2=2,s3=3,s4=4;reg[2:0]current_state,next_state;assignstate=current_state;always@(posedgeclkorposedgereset)beginif(reset)current_state=s0;elsecurrent_state=next_state;endalways@(current_stateorx)begincasex(current_state)“1111”序列检测器的Verilog描述s0:beginif(x==0)beginnext_state=s0;z=0;endelsebeginnext_state=s1;z=0;endends1:beginif(x==0)beginnext_state=s0;z=0;endelsebeginnext_state=s2;z=0;endends2:beginif(x==0)beginnext_state=s0;z=0;endelsebeginnext_state=s3;z=0;endends3:beginif(x==0)beginnext_state=s0;z=0;endelsebeginnext_state=s4;z=1;endends4:beginif(x==0)beginnext_state=s0;z=0;endelsebeginnext_state=s4;z=1;endenddefault:beginnext_state=s0;endendcaseendendmodule8.2Moore型状态机及其设计Moore型有限状态机次态逻辑状态寄存器输出逻辑输入次态现态输出时钟复位Moore型:输出信号仅与当前状态有关。属于同步输出状态机,当输入发生变化时还必须等待一个时钟的到来,输出才变化。8.2Moore型状态机及其设计ADC0809采样控制器设计:工作时序8.2Moore型状态机及其设计状态转换图:8.2Moore型状态机及其设计8.2.1多过程结构型状态机8.2Moore型状态机及其设计8.2.1多过程结构型状态机接下页8.2Moore型状态机及其设计8.2.1多过程结构型状态机接上页8.2Moore型状态机及其设计描述方式过程描述功能过程数3段式描述方式过程1:描述次态逻辑过程2:输出逻辑过程3:描述状态寄存器32段式描述方式过程1:主控组合过程次态、输出逻辑过程2:主控时序过程状态寄存器21段式描述方式过程1:次态、状态、输出1描述方式输出次态逻辑输出逻辑8.3Mealy型状态机设计Mealy型有限状态机Mealy型:输出信号不仅与当前状态有关,还与所有输入信号有关。次态逻辑状态寄存器输出逻辑输入次态现态输出时钟复位设计举例:检测序列11010011基于状态机的设计要点1.起始状态的选择起始状态是指电路复位后所处的状态,选择一个合理的起始状态将使整个系统简洁高效。有的EDA软件会自动为基于状态机的设计选择一个最佳的起始状态。2.状态编码状态编码主要有二进制编码、顺序编码和一位独热编码等方式。◆二进制编码(BinaryStateMachine)◆顺序编码(SequentialStateMachine)◆一位热码编码(One-HotStateMachineEncoding)一位热码编码即采用n位(或n个触发器)来编码具有n个状态的状态机。比如对于state0、state1、state2、state3四个状态可用码字1000、0100、0010、0001来代表。基于状态机的设计要点3.状态编码的定义在Verilog语言中,有两种方式可用于定义状态编码,分别用parameter和'define语句实现,比如要为state0、state1、state2、state3四个状态定义码字为:00、01、11、10,可采用下面两种方式。方式1:用parameter参数定义parameterstate1=2'b00,state2=2'b01,state3=2'b11,state4=2'b10;……case(state)state1:…;//调用state2:…;……基于状态机的设计要点4.状态转换的描述一般使用case语句来描述状态之间的转换,用case语句表述比用if-else语句更清晰明了。状态编码的定义方式2:用'define语句定义'definestate12'b00//不要加分号“;”'definestate22'b01'definestate32'b11'definestate42'b10……case(state)'state1:…;//调用,不要漏掉符号“'”'state2:…;……