当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]用VHDL设计有限状态机的方法

现代数字系统的设计一般都采用自顶向下的模块化设计方法。即从整个系统的功能出发,将系统分割成若干功能模块。在自顶向下划分的过程中,最重要的是将系统或子系统按计算机组成结构那样划分成控制器和若干个受控制的功能模块。受控部分通常是设计者们所熟悉的各种功能电路,设计较为容易。主要任务是设计控制器,而其控制功能可以用有限状态机来实现。因而有必要深入探讨有限状态机的设计方法。

1 状态机设计的一般方法

  传统的设计方法是首先绘制出控制器的状态图,并由此列出状态表,再合并消除状态表中的等价状态项。在完成状态寄存器的分配之后,根据状态表求出次态及输出方程,最后画出设计原理图。采用这种方法设计复杂状态机将会十分繁杂。

  利用VHDL设计状态机,不需要进行繁琐的状态分配、绘制状态表和化简次态方程。设计者不必使用卡诺图进行逻辑化简,不必画电路原理图,也不必搭试硬件电路进行逻辑功能的测试,所有这些工作都可以通过EDA工具自动完成。应用VHDL设计状态机的具体步骤如下:

  (1)根据系统要求确定状态数量、状态转移的条件和各状态输出信号的赋值,并画出状态转移图;

  (2)按照状态转移图编写状态机的VHDL设计程序;

  (3)利用EDA工具对状态机的功能进行仿真验证。

  下面以离心机定时顺序控制器的设计为例,说明状态机的设计方法。

2 定时顺序控制状态机的设计

  在化工生产中,离心机用于固、液分离的工艺流程,如图1所示。

 加料至刮刀回程循环N次之后,进入大洗网工序,随后又开始进入新一轮顺序循环工作。该系统控制器的框图如图2所示。

   图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,系统进入加料工序并开始自动控制离心机的运行。以加水工序为例,首先在加水预置数状态(water_ld)时,状态机输出信号FO,开启加水电磁阀及指示灯,同时输出信号G控制选通加水时间预置数,在LD1信号的控制下,将预置数送入COUNTER1。此时ENA1=1,J=1,使计数器为减计数状态。然后,在下一个时钟周期进入加水工作状态(water),并开始减计时。当计时为零时,计数器发出借位信号R1作为此工序结束的信号送入状态机,使其转入下一个工作状态。根据系统要求可画出状态转移图如图3所示。其中图3表示各状态转移的顺序和转移条件,表1列出了与各状态相应的输出信号值。


按照状态转移图可编写状态机的VHDL源程序。采用双进程描述法设计的离心机控制器源程序如下:

library ieee;

use ieee.std_logic_1164.all;

entity controller is

port (c0,reset: in std_logic;

clk1,k1,k2,r1,r2,r3: in std_logic;

clr1,clr2,clr3,j,enal,ena2: out std_logic;

ld1,ld2,ld3,g1,a,b,c: out std_logic;

fo: out std_logic_vector(6 downto 0));

end controller;[!--empirenews.page--]

architecture state_machine of controller is

type statetype is (system_reset,load,one_dry,water_ld, water,

two_dry_ld,two_dry,unload_reset,unload,return_trip,decision,

wash,cycle_ld);

signal present_state,next_state : statetype;

begin

state_comb:process (present_state,c0,reset,k1,k2,r1,r2,r3)

begin

  if reset='1' then

 clr1<='1';clr2<='1';clr3<='1';j<='0';ena1<='0';

ena2<='0';

  g1<='0';c<='0';b<='0';a<='0';

fo<=″0000000″;ld1<='0';ld2<='0';ld3<='0';

next_state <= system_reset;

else

case present_state is

when system_reset =>

clr1<='1';clr2<='1';clr3<='0';j<='0';

ena1<='0';ena2<='0';

g1<='1';c<='1';b<='0';a<='1';

fo<=″0000000″;ld1<='0';ld2<='0';ld3<='1';

if (c0='1') then

next_state<=load;

else

next_state<=system_reset;

end if;

when load =>

clr1<='0';clr2<='0';clr3<='0';j<='0';

ena1<='1';ena2<='0';

g1<='0';c<='0';b<='0';a<='0';

fo<=″0000001″;ld1<='0';ld2<='0';ld3<='0';

if (k1='1') then

next_state<=one_dry;

else

next_state<=load;

end if;

……

end case;

end if;

end process state_comb;

state_clocked:process(clk1,reset)

begin

if reset='1' then

present_state<=system_reset;

elsif rising_edge(clk1) then

present_state<=next_state;[!--empirenews.page--]

end if;

end process state_clocked;

end state_machine;利用EDA软件MAX+plus Ⅱ对该程序进行编译、仿真,其仿真波形见图4。

 

  从图4仿真波形图上可以看出,状态机的输出信号有许多“毛刺”产生。如何消除这些“毛刺”是下面将讨论的问题。

3 在状态机设计中如何消除“毛刺”

  在同步电路中,一般情况下“毛刺”不会产生重大影响。因为“毛刺”仅发生在时钟有效边沿之后的一小段时间内,只要在下一个时钟有效边沿到来之前“毛刺”消失即可。但是,由于状态机的输出信号都是作为其它功能模块的控制信号,如果这些控制信号作为异步控制(如本系统中的CLR)、三态使能控制或时钟信号来使用,则将会使受控模块发生误动作,造成系统工作混乱。因此,在这种情况下必须保证状态机的输出没有“毛刺”。

  消除状态机输出信号的“毛刺”有以下三种方案:

  ·在状态机输出信号较少的情况下,直接把状态作为输出信号;

  ·对于顺序迁移的状态机,选择雷格码作为状态编码;

  ·在Moore型或Mealy型状态机基础上,用时钟同步输出信号。

  本设计采用后两种方案,较简便。雷格码的特点是:当状态机改变状态时,状态向量中仅1位发生变化。与前面用可枚举类型定义的状态变量不同,现在选用常数来指定各状态变量的取值为格雷码。修改部分设计程序如下:

若要完全消除状态机的“毛刺”,则应采用第三种方案。这时,设计程序要作相应改变,状态的转移和输出信号的赋值要写在同一个时钟进程中。

  综上所述,采用VHDL设计状态机,能够大大降低设计难度。使用双进程描述风格编写VHDL设计程序,可以清楚地在一个进程中确定状态的转移和对输出的赋值,而且具有易于建立、理解和维护的优点。特别针对大型或具有大量状态转移和输出信号的状态机设计,将会更加显示出它的优势。对于状态机输出信号所产生的“毛刺”,可以按照系统的要求,根据不同的情况采用相应的设计方案予以消除

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

加州卡尔弗城2023年8月3日 /美通社/ -- 蜗牛游戏公司(纳斯达克代码:SNAL)("蜗牛游戏"或"公司"),一家全球领先的独立互动数字娱乐开发商和出版商,今日宣布与Wolp...

关键字: TI GE AI STATE

更加智能的农业用喷药机,为农民带来更大收益 伦敦2023年3月14日 /美通社/ -- 凯斯纽荷兰工业集团收购了Augmenta,加速发展创新的“感知与执行”技术...

关键字: 机器视觉 UG STATE FORWARD

上海2023年2月10日 /美通社/ -- 作为全球领先的多元化科技创新企业,3M长期以来致力于为多元化的STEM(科学、技术、工程及数学)人才创造成长的沃土,借助科学的力量携手各界创造更美好的未来。在第八个&...

关键字: SCIENCE BSP INDEX STATE

暴雪与网易的授权协议将于2023年1月23日到期 暴雪部分国服游戏将随即下线 上海2022年11月17日 /美通社/ -- 2022年11月17日,暴雪娱乐今日宣布,其与网易公司现有的授权协议将于2...

关键字: STATE FORWARD BSP FUTURE

"企业数字化运营解决方案" 收入在封城影响下仍然取得同比增长 "企业数字化运营解决方案"收入占比创新高达36% 香港2022年8月...

关键字: ICL CK STATE 数字化

合作将为生物制药公司提供 Guardant Health 系列肿瘤检测产品,以推进临床试验开展和创新药物开发。 中国杭州和新加坡2022年7月6日 /美通社/ -- 中国领...

关键字: HEALTH AN STATE BSP

星标「嵌入式大杂烩」,一起进步!来源:https://gitee.com/simpost/EFSM/tree/master/一、介绍EFSM(eventfinitestatemachine,事件驱动型有限状态机),是一个...

关键字: 有限状态机 事件驱动

摘要:随着物联网技术的发展,硬件间的相互通信速度要求越来越快。文中给出了采用VerilogHDL语言以有限状态机的形式,在FPGA中实现对带寄存器寻址的SPI接口控制的方法;同时介绍了通过SPI接口的结构和工作原理,提出...

关键字: 物联网 VerilogHDL FPGA 有限状态机 SPI

摘要:针对传统的条形码识别管理系统数据实时性差,自动化程度低,以及单一的RFID管理系统因为与服务器的有线通信而受到的诸多限制缺点,提出了一种将搜集电子设备健康信息的RFID射频识别系统整合到ZigBee无线网络中的无线...

关键字: 关键词 Zigbee CC2430 有限状态机 混合组网

随着对精度要求的不断提高,全差分信号链组件因出色的性能脱颖而出,这类组件的一个主要优点是可通过信号路由拾取噪声抑制。由于输出会拾取这种噪声,输出经常会出现误差并因而在信号链中进一步衰减。此外,差分信号可以实现两倍于同一电...

关键字: 仪表放大器 输出信号
关闭
关闭