用VHDL设计有限状态机的方法.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用VHDL设计有限状态机的方法.doc

  用VHDL设计有限状态机的方法|第1 利用VHDL设计状态机,不需要进行繁琐的状态分配、绘制状态表和化简次态方程。设计者不必使用卡诺图进行逻辑化简,不必画电路原理图,也不必搭试硬件电路进行逻辑功能的测试,所有这些工作都可以通过EDA工具自动完成。应用VHDL设计状态机的具体步骤如下: (1)根据系统要求确定状态数量、状态转移的条件和各状态输出信号的赋值,并画出状态转移图; (2)按照状态转移图编写状态机的VHDL设计程序; (3)利用EDA工具对状态机的功能进行仿真验证。 下面以离心机定时顺序控制器的设计为例,说明状态机的设计方法。 2 定时顺序控制状态机的设计 在化工生产中,离心机用于固、液分离的工艺流程,如图1所示。 从加料至刮刀回程循环N次之后,进入大洗网工序,随后又开始进入新一轮顺序循环工作。该系统控制器的框图如图2所示。500)this.style.ouseg(this) 图2中计数模块是由三个带异步复位和并行预置的计数器组成。其中COUNTER1是2位加/减法计数器,用于控制从加料至刮刀回程的各工序时间,其中加料和卸料工序为加计时,其余工序为减计时;COUNTER2是3位减法计数器,用于控制大洗网的时间;COUNTER3是2位加法计数器,用于控制循环工作次数。译码器用于选通与各工序相对应的预置数。图2中K1、K2分别是加料和卸料限位开关信号,R{R1、R2、R3}为计数器减为零(或循环次数等于预置数)时发出的信号,它们都可作为状态转移的控制信号。LD(LD1、LD2、LD3)为并行置数控制信号,CLR(CLR1、CLR2、CLR3)为异步清零信号,ENA(ENA1、ENA2)为计数使能信号,J为加/减计数控制信号,G(G1、A、B、C)为译码器控制信号,FO为各工序电磁阀和指示灯控制信号。 系统工作方式如下:当系统处于初始状态或复位信号reset有效时,系统处于复位状态。按下自动工作键C0,系统进入加料工序并开始自动控制离心机的运行。以加水工序为例,首先为加水预置数状态(-11000011010010000000resetS1Load00001000000000000001S2One_dry_0001101000K1000000010S3AX+plus Ⅱ对该程序进行编译、仿真,其仿真波形见图4。 从图4仿真波形图上可以看出,状态机的输出信号有许多“毛刺”产生。如何消除这些“毛刺”是下面将讨论的问题。 3 在状态机设计中如何消除“毛刺” 在同步电路中,一般情况下,“毛刺”不会产生重大影响。因为“毛刺”仅发生在时钟有效边沿之后的一小段时间内,只要在下一个时钟有效边沿到来之前“毛刺”消失即中。但是,由于状态机的输出信号都是作为其它功能模块的控制信号,如果这些控制信号作为异步控制(如本系统中的CLR)、三态使能控制或时钟信号来使用,则将会使受模块发生误动作,造成系统工作混乱。因此,在这种情况下必须保证状态机的输出没有“毛刺”。 消除状态机输出信号的“毛刺”有以下三种方案: ·在状态机输出信号较少的情况下,直接把状态作为输出信号; ·对于顺序迁移的状态机,选择雷格码作为状态编码; ·在Moore型或Mealy型状态机基础上,用时钟同步输出信号。 500)this.style.ouseg(this) 本设计采用后两种方案,较简便。雷格码的特点是:当状态机改变状态时,状态向量中仅1位发生变化。与前面用可枚举类型定义的状态变量不同,现在选用常数来指定各状态变量的取值为格雷码。修改部分设计程序如下: architecture state_machine of controller1 is signal present_state,next_state:std_logic_vector(3 downto 0); constant load:std_logic_vector(3 downto 0):=0001; constant one_dry: std_logic_vector(3 downto 0):=0011; constant water_ld;std_logic_vector(3 downto 0):=0010; constant water:std_logic_(3 downto 0):=0110; constant two_dry_ld:std_logic_vector(3 downto 0):=0111; constant two_dry:std_logic_vector(3 downto 0);=0101; constant unload_reset:std_logic_vector(3 downto 0):=0100; constant unload:s

您可能关注的文档

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档