3.10状态机.ppt

上传人:hyn****60 文档编号:71610533 上传时间:2023-02-03 格式:PPT 页数:58 大小:288KB
返回 下载 相关 举报
3.10状态机.ppt_第1页
第1页 / 共58页
3.10状态机.ppt_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《3.10状态机.ppt》由会员分享,可在线阅读,更多相关《3.10状态机.ppt(58页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、3.10 状态机的状态机的VHDL设计设计3.10.1 状态机的基本结构和功能状态机的基本结构和功能 状态机是一类很重要的时序电路,是许多数字电路的核心部件。状态机的一般形式如图3.30所示。除了输入信号、输出信号外,状态机还包括一组寄存器记忆状态机的内部状态。状态机寄存器的下一个状态及输出,不仅同输入信号有关,而且还与寄存器的当前状态有关,状态机可认为是组合逻辑和寄存器逻辑的特殊组合。它包括两个主要部分:组合逻辑部分和寄存器部分。寄存器部分用于存储状态机的内部状态;组合逻辑部分又分为状态状态译码器和输出译码器译码器和输出译码器,状态译码器确定状态机的下一个状态,即确定状态机的激励方程激励方程

2、,输出译码器确定状态机的输出,即确定状态机的输出方程输出方程。图3.30 状态机的结构示意图 状态机的基本操作有两种:(1)状态机内部状态转换。状态机经历一系列状态,下一状态由状态译码器根据当前状态和输入条件决定。(2)产生输出信号序列。输出信号由输出译码器根据当前状态和输入条件决定。用输入信号决定下一状态也称为“转移”。除了转移之外,复杂的状态机还具有重复和历程功能。从一个状态转移到另一个状态称为控制定序,而决定下一状态所需的逻辑称为转移函数。在产生输出的过程中,由是否使用输入信号可以确定状态机的类型。两种典型的状态机是摩尔(MOORE)状态机和米立(MEALY)状态机。在摩尔状态机摩尔状态

3、机中,其输出只是当前状态值的函数,并且仅在时钟边沿到来时才发生变化。米立状态机米立状态机的输出则是当前状态值、当前输出值和当前输入值的函数。对于这两类状态机,控制定序都取决于当前状态和输入信号。大多数实用的状态机都是同步的时序电路,由时钟信号触发状态的转换。时钟信号同所有的的边沿触发的状态寄存器和输出寄存器相连,这使得状态的改变发生在时钟的上升沿。此外,还利用组合逻辑的传播延迟实现状态机存储功能的异步状态机,这样的状态机难于设计并且容易发生故障,所以下面仅讨论同步时序状态机。3.10.2 一般状态机的一般状态机的VHDL设计设计 为了能获得可综合的,高效的VHDL状态机描述,建议使用枚举类数据

4、类型来定义状态机的状态,并使用多进程方式来描述状态机的内部逻辑。例如可使用两个进程来描述,一个进程描述时序逻辑,包括状态寄存器的工作和寄存器状态的输出;另一个进程描述组合逻辑,包括进程间状态值的传递逻辑以及状态转换值的输出。必要时还可引入第三个进程完成其他的逻辑功能。【例例3.10.1】一般状态机的VHDL设计模型。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY S_MACHINE IS PORT(CLK,RESET :IN STD_LOGIC;STATE_INPUTS:IN STD_LOGIC_VECTOR(0 TO 1)COMB_OUTPUT

5、S:OUT STD_LOGIC_VECTOR(0 TO 1);END S_MACHINE;ARCHITECTURE ART OF S_MACHINE IS TYPE STATES IS(ST0,ST1,ST2,ST3);-定义STATES为枚举型数据类型 SIGNAL CURRENT_STATE,NEXT_STATE:STATES;BEGIN REG:PROCESS(RESET,CLK)-时序逻辑进程 BEGIN IF RESET=1THEN CURRENT_STATE=ST0;-异步复位 ELSIF(CLK=1 AND CLKEVENT)THEN CURRENT_STATECOMB_OUTP

6、UTS=“00”;-初始态译码输出“00”IF STARE_INPUTS=“00”THEN -根据外部的状态控制输入“00”NEXT_STATE=ST0;-在下一时钟后,进程REG的状态将维持为ST0 ELSE NEXT_STATECOMB_OUTPUTS=“01”;-对应ST1的译码输出“01”IF START_INPUTS=“00”THEN -根据外部的状态控制输入“00”NEXT_STATE=ST1;-在下一时钟后,进程REG的状态将维持为 ST1 ELSE NEXT_STATECOMB_OUTPUTS=“10”;-以下依次类推 IF STATE_INPUTS=“11”THEN NEXT

7、_STATE=ST2;ELSE NEXT_STATECOMB_OUTPUTS=“11”;IF STATE_INPUTS=“11”THEN NEXT_STATE=ST3;ELSE NEXT_STATE=ST0;-否则,在下一时钟后,进程REG的状态将为ST0 END IF;END CASE;END PROCESS;-由信号NEXT_STATE将下一状态值带出此进程,进入进程REGEND ART;进程间一般是并行运行的,但由于敏感信号的设置不同以及电路的延迟,在时序上进程间的动作是有先后的。本例中,进程“REG”在时钟上升沿到来时,将首先运行,完成状态转换的赋值操作。如果外部控制信号STATE_I

8、NPUTS不变,只有当来自进程REG的信号CURRENT_STATE改变时,进程COM才开始动作。在此进程中,将根据CURRENT_STATE的值和外部的控制码STATE_INPUTS来决定下一时钟边沿到来后,进程REG的状态转换方向。这个状态机的两位组合输出COMB_OUTPUTS是对当前状态的译码,读者可以通过这个输出值了解状态机内部的运行情况;同时可以利用外部控制信号STATE_INPUTS任意改变状态机的状态变化模式。在设计中,如果希望输出的信号具有寄存器锁存功能,则需要为此输出写第3个进程,并把CLK和RESET信号放到敏感信号表中。本例中,用于进程间信息传递的信号CURRENT_S

9、TATE和 NEXT_STATE,在状态机设计中称为反馈信号。状态机运行中,信号传递的反馈机制的作用是实现当前状态的存储和下一个状态的译码设定等功能。在VHDL中可以有两种方式来创建反馈机制。即使用信号的方式和使用变量的方式,通常倾向于使用信号的方式。一般地,先在进程中使用变量传递数据,然后使用信号将数据带出进程。3.10.3 摩尔状态机的摩尔状态机的VHDL设计设计【例例3.10.2】摩尔状态机的VHDL设计模型之一。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SYSTEM1 IS PORT(CLOCK:IN STD_LOGIC;A:IN

10、STD_LOGIC;D:OUT STD_LOGIC);END SYSTEM1;ARCHITECTURE MOORE1 OF SYSTEM1 IS SIGNAL B,C:STD_LOGIC;BEGINFUNC1:PROCESS(A,C)-第1组合逻辑进程,为时序逻辑进程提供的反馈信息BEGIN B=FUNC1(A,C);-C是反馈信号END PROCESS;FUNC2:PROCESS(C)-第2组合逻辑进程,为状态机输出提供数据BEGIN D=FUNC2(C);-输出信号D所对应的FUNC2,是仅为当前状态的函数END PROCESS;REG:PROCESS(CLOCK)-时序逻辑进程,负责状态

11、的转换BEGIN IF(CLOCK=1AND CLOCKEVENT)THEN C=B;-B 是反馈信号 END IF;END PROCESS;END MOORE1;图3.31 例3.10.2的摩尔状态机示意图【例例3.10.3】摩尔状态机的摩尔状态机的VHDL设计模型之二。设计模型之二。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SYSTEM2 IS PORT(CLOCK:IN STD_LOGIC;A:IN STD_LOGIC;D:OUT STD_LOGIC);END SYSTEM2;ARCHITECTURE MOORE2 OF SYSTEM

12、2 IS BEGIN REG:PROCESS(CLOCK)BEGIN IF(CLOCK=1 AND CLOCKEVENT)THEN D=FUNC(A,D);END IF;END PROCESS;END MOORE2;图3.32 例3.10.3的直接反馈式摩尔状态机示意图 【例3.10.4】基于状态机的ADC0809与SRAM6264的通信控制器的设计。图3.33是该控制器ADTOSRAM与ADC0809及SRAM6264接口示意图。图图3.33 ADTOSRAM与与ADC0809及及SRAM6264接口示意图接口示意图-VHDL源程序ADTOSRAM.VHDLIBRARY IEEE;USE I

13、EEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADTOSRAM IS PORT(-ADC0809接口信号 DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-0809转换数据输入口 CLK,EOC:IN STD_LOGIC;-CLK:状态机工作时钟;EOC:转换结束状态信号 RST:IN STD_LOGIC;-系统复位信号 ALE:OUT STD_LOGIC;-0809采样通道选择地址锁存信号 START:OUT STD_LOGIC;-0809采样启动信号,上升沿有效 OE:OUT STD_LO

14、GIC;-转换数据输出使能,接0809的ENABLE(PIN 9)ADDA:OUT STD_LOCIC;-0809采样通道地址最低位-SRAM 6264接口信号 CS:OUT STD_LOGIC;-6264片选控制信号,低电平有效 RD,WR:OUT STD_LOGIC;-6264读/写控制信号,低电平有效 RAM_DIN:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-6264数据写入端口 ADDRESS:OUT STD_LOGIC_VECTOR(12 DOWNTO 0);-地址输出端口END ADTOSRAM;ARCHITECTURE ART OF ADTOSRAM I

15、STYPE AD_STATES IS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7)-A/D转换状态定义TYPE WRIT_STATES IS(START_WRITE,WRITE1,WRITE2,WRITE3,WRITE_END);SRAM数据写入控制状态定义SIGNAL RAM_CURRENT_STATE,RAM_NEXT_STATE:WRIT_STATES;SIGNAL ADC_CURRENT_STATE,ADC_NEXT_STATE:AD_STATES;SIGNAL ADC_END:STD_LOGIC;-0809数据转换结束并锁存标志位,高电平有效SIGNAL LOCK

16、:STD_LOGIC;-转换后数据输出锁存信号SIGNAL ENABLE:STD_LOGIC;-A/D转换允许信号,高电平有效SIGNAL ADDRES_PLUS:STD_LOGIC;-SRAM地址加1时钟信号SIGNAL ADC_DATA:STD_LOGIC_VECTOR(7 DOWNTO 0);-转换数据读入锁存器 SIGNAL ADDRES_CNT:STD_LOGIC_VECTOR(12 DOWNTO 0);-SRAM地址锁存器BEGIN ADDA=1;-ADDA=1,ADDB=0,ADDC=0选A/D采样通道为IN-1 RD=1;-SRAM写禁止 -ADC0809采样控制状态机 ADC

17、:PROCESS(ADC_CURRENT_STATE,EOC,ENABLE)-A/D转换状态机组合电路进程BEGIN IF(RST=1)THEN ADC_NEXT_STATEALE=0;START=0;OE=0;LOCK=0;ADC_END=0;-A/D转换初始化 IF(ENABLE=1)THEN ADC_NEXT_STATE=ST1;-允许转换,转下一状态 ELSE ADC_NEXT_STATEALE=1;START=0;OE=0;LOCK=0;ADC_END=0;ADC_NEXT_STATEALE=1;START=1;OE=0;LOCK=0;ADC_END=0;ADC_NEXT_STATE

18、ALE=1;START=1;OE=0;LOCK=0;ADC_END=0;-延迟一个脉冲周期IF(EOC=0)THEN ADC_NEXT_STATE=ST4;ELSE ADC_NEXT_STATEALE=0;START=0;OE=0;LOCK=0;ADC_END=0;IF(EOC=0)THEN ADC_NEXT_STATE=ST5;-转换结束,转下一状态ELSE ADC_NEXT_STATEALE=0;START=0;OE=1;LOCK=1;ADC_END=1;ADC_NEXT_STATEALE=0;START=0;OE=1;LOCK=1;ADC_END=1;ADC_NEXT_STATEALE=

19、0;START=0;OE=1;LOCK=1;ADC_END=1;ADC_NEXT_STATEADC_NEXT_STATE=ST0;-所有闲置状态导入初始态END CASE;END IF;END PROCESS ADC;AD_STATE:PROCESS(CLK)-A/D转换状态机时序电路进程BEGIN IF(CLKEVENT AND CLK=1)THEN ADC_CURRENT_STATE=ADC_NEXT_STATE;-在时钟上升沿,转至下一状态 END IF;END PROCESS AD_STATE;-由信号CURRENT_STATE将当前状态值带出此进程DATA_LOCK:PROCESS(

20、LOCK)BEGIN -此进程中,在LOCK的上升沿,将转换好的数据锁入锁存器ADC_DATA中 IF(LOCK=1 AND LOCKEVENT)THEN ADC_DATA=DIN;END IF;END PROCESS DATA_LOCK;-SRAM数据写入控制状态机WRIT_STATE:PROCESS(CLK,RST)-SRAM写入控制状态机时序电路进程BEGIN IF RST=1THEN RAM_CURRENT_STATE=START_WRITE;-系统复位 ELSIF(CLKEVENT AND CLK=1)THEN RAM_CURRENT_STATECS=1;WR=1;ADDRES_PL

21、US=0;IF(ADDRES_CNT=1111111111111)-数据写入初始化 THEN ENABLE=0;-SRAM地址计数器已满,禁止A/D转换 RAMM_NEXT_STATE=START_WRITE;ELSE ENABLE=1 -SRAM地址计数器未满,允许A/D转换 RAM_NEXT_STATECS=1;WR=1;ENABLE=1;ADDRES_PLUS=0;-判断A/D转换周期是否结束 IF(ADC_END=1)THEN RAM_NEXT_STATE=WRITE2;-已结束 ELSE RAM_NEXT_STATECS=1;WR=1;-打开SRAM片选信号 ENABLE=0;-禁止

22、A/D转换 ADDRES_PLUS=0;ADDRESS=ADDRES_CNT;-输出13位地址 RAM_DIN=ADC_DATA;-8位已转换好的数据输向SRAM数据口RAM_NEXT_STATECS=0;WR=0;-打开写允许信号 ENABLE=0;-仍然禁止A/D转换 ADDRES_PLUS=1;-产生地址加1时钟上升沿,使地址计数器加1 RAM_NEXT_STATECS=1;WR=1;ENABLE=1;-打开A/D转换允许开关 ADDRES_PLUS=0;-地址加1时钟脉冲结束 RAM_NEXT_STATE RAM_NEXT_STATE=START_WRITE;END CASE;END

23、PROCESS RAM_WRITE;COUNTER:PROCESS(ADDRES_PLUS)-地址计数器加1进程BEGIN IF(RST=1)THEN ADDRES_CNT=0000000000000;-计数器复位 ELSIF(ADDRES_PLUSEVENT AND ADDRES_PLUS=1)THEN ADDRES_CNT=ADDRES_CNT+1;END IF;END PROCESS COUNTER;END ART;本例是根据图3.32的摩尔状态机原理设计的具有同步双状态机的VHDL电路设计。两个状态机的功能和工作方式是:(1)ADC0809采样控制状态机。它由三个进程组成:“ADC”、

24、“AD_STATE”和“DATA_LOCK”。“ADC”是此状态机的组合逻辑进程,确定状态的转换方式和反馈控制信号的输出。工作过程中首先监测系统复位信号“RST”,当其为高电平时,使此进程复位至初始态“ST0”。在初始态中对转换允许信号“ENABLE”进行监测,当为低电平时,表明此时另一状态机正在对6264进行写操作,为了不发生误操作,暂停A/D转换。而在状态ST2时启动A/D转换信号“START”,在状态ST4搜索到状态转换信号“EOC”由0变1时,即在状态ST5开启输出使能信号“OE”,在下一状态使“LOCK”产生一个上跳沿,从而在此时启动进程“DATA_LOCK”,将由0809转换好的位

25、数据锁进锁存器“ADC _DATA中。在接下去的一个状态ST7中,将A/D转换周期结束的标志位“ADC_END”置为高电平,以便通知另一状态机,本周期的转换数据已经进入数据锁存器中,可以对6264进行写操作。进程“AD_STATE”是此状态机的动力部分,即时序逻辑部分,负责状态的转换运行。(2)SRAM6264数据写入控制状态机。它由三个进程组成:“WRIT_STATE”、“RAM_WRITE”和“COUNTER”。进程“WRIT_STATE”是此状态机时序逻辑部分,功能与进程“AD_STATE”类似,只是多了一个异步复位功能。进程“WRIT_STATE”的功能与进程“ADC”类似,在状态“S

26、TART_WRITE”中,监测地址计数器是否已计满。若计满(ADDRES_CNT=1111111111111)则发出A/D转换禁止命令(ENABLE=0),并等待外部信号为系统发出复位信号“RST”,以便使寄存器ADDRES_CNT清零;否则发出A/D转换允许命令(ENABLE=1),并转下一状态WRITE1,在此状态中监测A/D转换周期是否结束,若结束(ADC_END=1),则进入SRAM的各个写操作状态。在状态WRITE2中,ADDRES_CNT中的13位地址和ADC_DATA中8位数据预先输向6264的对应端口;ADC_DATA中的数据是在状态WRITE3,WR=0时被写入6264的。在

27、此状态中,同时进行了另外两项操作,即发出A/D转换禁止命令和产生一个地址数加一脉冲上升沿,以便启动进程“COUNTER”,使地址计数器加一,为下一数据的写入作准备(注意,此地址计数器的异步复位端是与全局复位信号线“RST”相接的)。在最后一个状态WRITE_END中打开了A/D转换允许开关。此程序中的两个状态机是同步工作的,同步时钟是CLK。但由于A/D采样的速度,即采样周期的长短在一定范围内是不可预测的,所以必须设置几个标准位来协调两个状态机的工作,这就是前面提到的A/D转换允许命令标志位ENABLE和A/D转换周期结束标志位ADC_END。此外还设定了两个异步时钟信号LOCK和ADDRES

28、_PLUS,分别在进程“ADC”和“WRIT_STATE”中的特定状态中启动进程“DATA_LOCK”或“COUNTER”。图3.34 例3.10.4源程序进程关系示意图3.10.4 米立状态机的米立状态机的VHDL设计设计【例例3.10.5】米立状态机的VHDL设计模型之一。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SYSTEM1 ISPORT(CLOCK:IN STD_LOGIC;A:IN STD_LOGIC;D:OUT STD_LOGIC);END SYSTEM1;ARCHITECTURE MEALY1 OF SYSTEM1 IS S

29、IGNAL C:STD_LOGIC;BEGIN COM:PROCESS(A,C)-此进程用于状态机的输出BEGIN D=FUNC2(A,C)END PROCESS;REG:PROCESS(CLOCK)-此进程用于状态机的状态转换BEGIN IF(CLOCK=1 AND CLOCKEVENT)THEN C=FUNC1(A,C);END IF;END PROCESS;END MEALY1;【例例3.10.6】米立状态机的VHDL设计模型之二。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SYSTEM2 IS PORT(CLOCK:IN STD_LO

30、GIC;A:IN STD_LOGIC;D:OUT STD_LOGIC);END SYSTEM2;ARCHITECTURE MEALY2 OF SYSTEM2 IS SIGNAL C:STD_LOGIC;SIGNAL B:STD_LOGIC;BEGIN REG:PROCESS(CLOCK)BEGIN IF(CLOCK=1 AND CLOCKEVENT)THEN C=B;END IF;END PROCESS;TRANSITIONS:PROCESS(A,C)BEGIN B=FUNC1(A,C);END PROCESS;OUTPUTS:PROCESS(A,C);BEGIN D MR=0;MY0=0;M

31、G0=1;BR=1;BY0=0;BG0=0;-A状态主干绿灯亮支道红灯亮 IF(SB AND SM)=1 THEN -若两个车道都有车 IF S=45 THEN STATE=B;CLR:=0;EN:=0;-若采集到45s标志信号则为B状态且清零停止计数 ELSE STATE=A;CLR:=1;EN:=1;-否则继续A状态计数 END IF;ELSIF(SB AND(NOT SM)=1 THEN STATE=B;CLR:=0;EN:=0;-若只有支道有车则为B状态且清零停止计数 ELSE STATE MR=0;MY0=1;MG0=0;BR=1;BY0=0;BG0=0;-B状态主黄支红 IF S=

32、5 THEN STATE=C;CLR:=0;EN:=0;-若采集到5s标志信号则为C状态且清零停止计数 ELSE STATEMR=1;MY0=0;MG0=0;BR=0;BY0=0;BG0=1;-C状态主红支绿 IF(SM AND SB)=1 THEN -若两个车道都有车 IF S=25 THEN STATE=D;CLR:=0;EN:=0;-若采集到25s标志信号则为D状态且清零停止计数 ELSE STATE=C;CLR:=1;EN:=1;-否则继续C状态计数 END IF;ELSIF SB=0 THEN STATE=D;CLR:=0;EN:=0;-若支到无车则为D状态且清零停止计数 ELSE STATE MR=1;MY0=0;MG0=0;BR=0;BY0=1;BG0=0;-D状态主红支黄 IF S=5 THEN STATE=A;CLR:=0;EN:=0;-若又采集到5s标志信号则为A状态且清零停止计数 ELSE STATE=D;CLR:=1;EN:=1;-否则继续d状态计数 END IF;END CASE;END IF;END PROCESS CNT;END ARCHITECTURE ART;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com