用vhdl设计有限状态机的方法

用vhdl设计有限状态机的方法

ID:10641473

大小:54.50 KB

页数:3页

时间:2018-07-07

用vhdl设计有限状态机的方法_第1页
用vhdl设计有限状态机的方法_第2页
用vhdl设计有限状态机的方法_第3页
资源描述:

《用vhdl设计有限状态机的方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、用VHDL设计有限状态机的方法

2、第1利用VHDL设计状态机,不需要进行繁琐的状态分配、绘制状态表和化简次态方程。设计者不必使用卡诺图进行逻辑化简,不必画电路原理图,也不必搭试硬件电路进行逻辑功能的测试,所有这些工作都可以通过EDA工具自动完成。应用VHDL设计状态机的具体步骤如下:(1)根据系统要求确定状态数量、状态转移的条件和各状态输出信号的赋值,并画出状态转移图;(2)按照状态转移图编写状态机的VHDL设计程序;(3)利用EDA工具对状态机的功能进行仿真验证。下面以离心机定时顺序控制器的设计为例,说明状态机的设计方法。2定时顺序控制状态机的设计在化工生产中,离心机用于固

3、、液分离的工艺流程,如图1所示。从加料至刮刀回程循环N次之后,进入大洗网工序,随后又开始进入新一轮顺序循环工作。该系统控制器的框图如图2所示。500)this.style.ouseg(this)">图2中计数模块是由三个带异步复位和并行预置的计数器组成。其中COUNTER1是2位加/减法计数器,用于控制从加料至刮刀回程的各工序时间,其中加料和卸料工序为加计时,其余工序为减计时;COUNTER2是3位减法计数器,用于控制大洗网的时间;COUNTER3是2位加法计数器,用于控制循环工作次数。译码器用于选通与各工序相对应的预置数。图2中K1、K2分别是加料和卸料限位开关信号,R{

4、R1、R2、R3}为计数器减为零(或循环次数等于预置数)时发出的信号,它们都可作为状态转移的控制信号。LD(LD1、LD2、LD3)为并行置数控制信号,CLR(CLR1、CLR2、CLR3)为异步清零信号,ENA(ENA1、ENA2)为计数使能信号,J为加/减计数控制信号,G(G1、A、B、C)为译码器控制信号,FO为各工序电磁阀和指示灯控制信号。系统工作方式如下:当系统处于初始状态或复位信号reset有效时,系统处于复位状态。按下自动工作键C0,系统进入加料工序并开始自动控制离心机的运行。以加水工序为例,首先为加水预置数状态(-11000011010010000000re

5、setS1Load00001000000000000001S2One_dry_0001101000K1000000010S3AX+plusⅡ对该程序进行编译、仿真,其仿真波形见图4。从图4仿真波形图上可以看出,状态机的输出信号有许多“毛刺”产生。如何消除这些“毛刺”是下面将讨论的问题。3在状态机设计中如何消除“毛刺”在同步电路中,一般情况下,“毛刺”不会产生重大影响。因为“毛刺”仅发生在时钟有效边沿之后的一小段时间内,只要在下一个时钟有效边沿到来之前“毛刺”消失即中。但是,由于状态机的输出信号都是作为其它功能模块的控制信号,如果这些控制信号作为异步控制(如本系统中的CLR)

6、、三态使能控制或时钟信号来使用,则将会使受模块发生误动作,造成系统工作混乱。因此,在这种情况下必须保证状态机的输出没有“毛刺”。消除状态机输出信号的“毛刺”有以下三种方案:·在状态机输出信号较少的情况下,直接把状态作为输出信号;·对于顺序迁移的状态机,选择雷格码作为状态编码;·在Moore型或Mealy型状态机基础上,用时钟同步输出信号。500)this.style.ouseg(this)">本设计采用后两种方案,较简便。雷格码的特点是:当状态机改变状态时,状态向量中仅1位发生变化。与前面用可枚举类型定义的状态变量不同,现在选用常数来指定各状态变量的取值为格雷码。修改部分设

7、计程序如下:architecturestate_machineofcontroller1issignalpresent_state,next_state:std_logic_vector(3downto0);constantload:std_logic_vector(3downto0):="0001";constantone_dry:std_logic_vector(3downto0):="0011";constantwater_ld;std_logic_vector(3downto0):="0010";constantwater:std_logic_(3downto0):

8、="0110";constanttwo_dry_ld:std_logic_vector(3downto0):="0111";constanttwo_dry:std_logic_vector(3downto0);="0101";constantunload_reset:std_logic_vector(3downto0):="0100";constantunload:std_logic_vector(3downto0);="1100";constantreturn_trip:std_logic_vector(3dow

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。