首页 百科知识 型有限状态机的设计

型有限状态机的设计

时间:2022-10-10 百科知识 版权反馈
【摘要】:Moore型状态机的输出仅为当前状态的函数,这类状态机在输入发生变换后还必须等待时钟的到来,以使状态发生变化,才能导致输出的变换。本例中,进程“REG”在时钟上升沿到来时将首先运行,完成状态转换的赋值操作。一旦STAET有效,状态信号EOC将变为高电平。在状态st4中,由状态机向FPGA中的锁存器发出锁存信号,将0809输出的数据进行锁存。图6.31是这个状态机的仿真波形。

6.3.2 Moore型有限状态机的设计

Moore型状态机的输出仅为当前状态的函数,这类状态机在输入发生变换后还必须等待时钟的到来,以使状态发生变化,才能导致输出的变换。

为了能获得可综合的、高效的VHDL状态机描述,建议使用枚举型数据类型来定义状态机的状态,并使用多进程方式来描述状态机的内部逻辑。例如可使用两个进程来描述,一个进程描述时序逻辑,包括状态寄存器的工作和寄存器状态的输出;另一个进程描述组合逻辑,包括进程间状态值的传递逻辑以及状态转换值的输出;必要时还可引入第三个进程完成其他的逻辑功能。

例6.23描述的状态机是由两个主控进程构成的,其中进程REG是主控时序进程,COM是主控组合进程。

【例6.23】

img377

img378

进程间一般是并行运行的,但由于敏感信号的设置不同以及电路的延迟,在时序上进程间的动作是有先后的。本例中,进程“REG”在时钟上升沿到来时将首先运行,完成状态转换的赋值操作。如果外部控制信号state_inputs不变,只有当来自进程REG的信号current_ state改变时,进程COM才开始动作。在此进程中,将根据current_state的值和外部的控制码state_inputs来决定下一时钟边沿到来后,进程REG的状态转换方向。这个状态机的两位组合输出comb_outputs是对当前状态的译码,可以通过这个输出值了解状态机内部的运行情况;同时可以利用外部控制信号state_inputs任意改变状态机的状态变化模式。

图6.25是此状态机的仿真波形,reset信号是高电平有效,clk是上升沿有效。我们以第三个clk脉冲为例分析时序:在第三个时钟上升沿后,现态current_state即进入状态2(s2),同时输出12(C)。而next_state由current_state和state_inputs共同决定,current_state为s2,state_inputs为2,根据程序“IF state_inputs=‘ 11’THEN next_state<=s0;ELSE next_state <=s3;”,可知next_state为s3。

img379

图6.25 例6.23的仿真波形

下面介绍Moore型状态机的两个应用实例。

1)用Moore型状态机完成自动售货机的VHDL设计

有两种硬币:1元或5角,投入1元5角硬币输出货物,投入2元硬币输出货物并找5角硬币。设计分析如下:

(1)状态定义:S0表示初态为投硬币,S1表示投入5角硬币,S2表示投入1元硬币,S3表示投入1元5角硬币,S4表示投入2元硬币。

(2)输入信号:state_input(1)表示投入1元硬币,state_input(0)表示投入5角硬币。输入信号为1表示投入硬币,输入信号为0表示未投入硬币。

(3)输出信号:comb_outputs(1)表示输出货物,comb_outputs(0)表示找5角硬币。输出信号为1表示输出货物或找钱,输出信号为0表示不输出货物或不找钱。

(4)状态图:根据设计要求分析,得到如图6.26所示的状态图。

img380

图6.26 自动售货机的状态转换图

根据如图6.26所示状态转换图设计的VHDL程序清单如例6.24所示。

【例6.24】

img381

img382

自动售货机的仿真波形如图6.27所示。当第一次投入5角硬币(“01”)时,在时钟第一上升沿后,current_state是状态1(s1),表示投入5角硬币,输出为“00”,表示不输出货物也不找钱;再投入1元后,current_state变为状态3(s3),表示投入了1元5角硬币,输出为“10”,表示输出货物,不找钱。

2)用Moore型状态机设计一个A/D采样控制器

图6.28是A/D转换时序,START为转换启动控制信号,高电平有效;ALE为模拟信号输入选通端口地址锁存信号,上升沿有效。一旦STAET有效,状态信号EOC将变为高电平。然后由外部控制使OE由低电平变为高电平,0809的输出数据总线D[7..0]从原来的高阻态变为输出数据有效。

img383

图6.27 自动售货机的仿真波形

img384

图6.28 ADC0809工作时序

图6.29是采样控制状态图,状态st0对0809初始化,状态st1启动A/D转换。在状态st2中需要对0809工作状态信号EOC进行测试,如果为低电平,表示转换没有结束,仍需要停留在st2状态中等待,直到变成高电平表明转换结束,在下一时钟脉冲到来时转向状态st3。在状态st3中,由状态机向0809发出输出转换好的8位数据允许命令,这一状态周期同时可作为数据输出稳定周期,以便能在下一状态中向锁存器中锁入可靠的数据。在状态st4中,由状态机向FPGA中的锁存器发出锁存信号(LOCK的上升沿),将0809输出的数据进行锁存。

img385

图6.29 ADC0809采样控制转换图

ADC0809采样控制器的程序如例6.25所示。

【例6.25】

img386

img387

例6.25由两个主控进程构成,外加一个辅助进程。其程序结构可以用图6.30的框图描述。REG是时序进程,它在时钟信号CLK的驱动下,不断的将next_state中的内容赋给current_state,并由此信号将状态变量传输给组合进程COM。组合进程COM有两个主要功能:一是状态译码器功能,根据从current_state信号中获得的状态变量以及来自0809的状态信号EOC,决定下一状态的转移方向,即确定次态的状态变量;二是采样控制功能,根据current_state中的状态变量确定对0809的控制信号线ALE、START、OE等输出相应的控制信号,当采样结束后通过LOCK向锁存器件进程LATCH1发出锁存信号,将0809的D[7..0]数据输出口输出的8位转换好的数据锁存起来。

img388

图6.30 采样状态机结构框图

图6.31是这个状态机的仿真波形。在状态1中,START和ALE发出启动采样和地址选通的控制信号;在状态2中,等待EOC变为高电平,表示转换结束,进入状态3;在状态3中,输出允许OE变为高电平,输出已经转换好的数据21;在状态4中,LOCK0发出一个脉冲,其上升沿将D端口的21锁入REGL中。

img389

图6.31 ADC0809采样状态机的仿真波形

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈