当前位置:首页 >> 工学 >>

基于VHDL的有限状态机设计方法与实现


第 25 卷第 1 期 2006 年 3 月

武 汉 工 业 学 院 学 报 Journal of W uhan Polytechnic University

Vol 25No. 1 . M ar 2006 .

文章编号 : 1009 - 4881 ( 2006 ) 01 - 0012 - 03

基于 VHDL 的有限状态机设计方法与实现
吴佳凤 , 肖 , 聂 安 兵
(武汉工业学院 电气信息工程系 ,湖北 武汉 430023 )

摘 : 介绍了有限状态机的设计步骤 ,给出了有限状态机的 VHDL 设计方法与实现手段 ,然 要 后完成了利用 VHDL 实现有限状态机的一个电梯控制器实例 ,并给出了仿真结果 . 关键词 : 状态机 ; VHDL; 电梯控制 中图分类号 : TP 391 文献标识码 : A

0 引言
自 IEEE 公布 VHDL (Very2 igh 2Speed Integrated H C ircuit Hardware Descrip tion Language ) 的标准版本 , VHDL 在电子 设计 领 域 被 广 泛 接 受 , 并 得 到 众 多 EDA 公司的支持 , 在电子工程领域 , 已成为事实上 的通用硬件描述语言 .VHDL 主要用于描述数字系 统的结构 , 行为 , 功能和接口 .其程序结构特点是 , 将一项工程设计实体 (可以是一个元件 , 一个电路 模块或一个系统 )分成外部 (即端口 ) 或内部 .在对 一个设计实体定义了外部界面后 , 一旦其内部开发 完成 ,其它设计就可以直接调用这个实体 .这种设 计实体分成内外部分的概念就是 VHDL 系统设计 [1] 的基本点 .设计实体可用传统有限状态机 ( Finite State M achine, FS )模型来描述 ,每一个控制步或进 M 程代表一种状态 ,与每一控制步相关的转移条件决 定次态的状态和输出 .有限状态机设计因其程序结 构较简单 , 是 VHDL 语言中一种较常用的描述方 法 .无论与基于 VHDL 的其他设计方案相比 , 还是 与可完成相同功能的 CPU 相比 ,状态机都有难以超 [2] 越的优越性 , 主要表现在以下几个方面 : ①控制
收稿日期 : 2005 - 06 - 06 作者简介 : 吴佳凤 ( 1980 - ) ,女 ,山东省新泰市人 ,学士 .

控制方面 ,状态机具有巨大的优势 ; ⑤ 状态机系统由 纯硬件电路构成 ,它的运行不依赖软件指令的逐条 执行 ,而且在它的设计中可使用完整的容错技术 ,所 以状态机具有极高的可靠性 .

1 设计方法
所谓状态机就是事物存在状态的一种综合描 述 ,说明任意两个状态之间的转变条件 .有限状态 机传统设计步骤是 : ① 绘制控制器的状态图 ; ② 列 出状态表 ,合并消除状态表中的等价状态 ; ③ 分配状 态寄存器 ; ④ 根据状态表拟定状态方程和输出方程 ; ⑤ 编写有限状态机设计程序 . 在 VHDL 设计中 ,可以不需要进行繁琐的状态 分配 , 化简状态方程等步骤 ,可以简便地定义状态变 量 ,将状态描述成进程 ,这个进程可以传出信号来控 制其他进程 ,从而实现各种功能 . 在 VHDL 语言中 ,状态机的状态通常用枚举型 [4] 数据 进 行 定 义 , 每 个 状 态 均 可 表 达 为 CASE _
WHEN 语句结构中的一条 CASE 语句 ; 状态机的转

灵活方便 ; ②结构模式相对简单 , 设计方案相对固 定 ,以 及 可 定 义 符 号 化 枚 举 类 型 的 状 态 , 对 发 挥 VHDL 综合器强大的优化功能提供了有利条件 ; ③ 状态机容易构成性能良好的同步时序模块 , 有利于 消除电路中的毛刺现象 ; ④ 由于状态机可以由多个 进程构成 ,而进程是并行执行的 ,所以在高速运算和

移条件则用 IF 语句描述 ,其输出组合逻辑可以用并 行信号赋值语句或独立的进程描述 , 生成的硬件电 路较简单 ,也就是节省硬件资源 .

2 一个设计实例
下面以三层电梯模型的电梯控制器为对象 , 完 成一个状态机的实现 . 三层电梯模型控制器的要求如下 : 每层电梯入

1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.

http://www.cnki.net

1期

吴佳凤 ,肖安 ,聂兵 : 基于 VHDL 的有限状态机设计方法与实现

13

口处设有上下请求开关 , 电梯内设有顾客到达层次 的停站请求开关 ; 电梯内部设有所处位置指示装置 及电梯运行模式 (上升或下降 ) 指示装置 ; 电梯到达 有停站请求的楼层 ,经过 1 秒电梯门打开 ,开门 4 秒 后 ,电梯门关闭 (开门指示灯灭 ) , 电梯继续运行 , 直 至执行完最后一个请求信号后停留在当前层 ; 能记 忆电梯内外所有请求信号 , 并按照电梯运行规则按 顺序响应 ,每个请求信号保留至执行后消除 . 由此 ,设定电梯运行规则 : 当电梯处于上升模式 时 ,只响应比电梯所在位置高的上楼请求信号 ,由下 而上逐个执行 ,直到最后一个上楼请求执行完毕 ; 如 果高层有下楼请求 , 则直接升到有下楼请求的最高 层 ,然后进入下降模式 .当电梯处于下降模式时则 与上升模式相反 .电梯初始状态为一层开门 . 根据以上控制模型要求 , 可以描述为有限状态 机 形 式 , 可 以 划 分 为 doorwait, doorclose, stop ( dooropen ) , up , down 等主要状态 , 图 1 是简化了的 状态图 .

fdnlight: buffer std _ logic _ vector ( 3 downto 1 ) ; - - 电梯外部下降请求指示灯 stop1button, stop2button, stop3button: in std_logic; - - 电梯内部各层请求按键 stop light: buffer std _ logic _ vector ( 3 downto 1 ) ; - - 电梯内部各层请求指示灯 position: buffer integer range 1 to 3; - - 电梯位

图 1 简化的状态图 图中转换条件为 : ① 没有任何请求 ; ②内部有 下降请求或在较低层有下降或上升请求 ; ③ 内部有 上升请求或在较高层有上升或下降请求 ; ④ 电梯在 下降模式时 ,等待请求 ; ⑤ 电梯处于上升模式时 , 等 待请求 ; ⑥ 电梯所到楼层的下一层有停站请求或外 部有下降请求或底层有上升请求 ; ⑦ 电梯所到楼层 的上一层有停站请求或外部有上升请求或顶层有下 降请求 . 由图 1 的状态转换图便可对电梯控制器状态机 进行描述 .各状态定义为枚举变量 , 其实体定义 如下 : en tity threeflift is port ( buttonclk: in std_logic; - - 按键时钟 liftclk: in std_logic; - - 电梯时钟 reset: in std_logic; - - 异步置位按键 f1upbutton: in std_logic; - - 1 层上升请求 f2upbutton: in std_logic; - - 2 层上升请求 f2dnbutton: in std_logic; - - 2 层下降请求 f3dnbutton: in std_logic; - - 3 层下降请求 fup light: buffer std _ logic _ vector ( 3 downto 1 ) ; - - 电梯外部上升请求指示灯

置指示 doorlight: out std_logic; - - 电梯门开关指示灯 udsig: buffer std _ logic ) ; - - 电 梯 升 降 指 示 end threeflift; 在 entity 实 体 说 明 定 义 完 端 口 之 后 , 需 要 在 architecture 和 begin 之间 用如 下的 语句 来 定 义 状 态机 . - - 电梯状态总共有 10 个 type lift_state is ( stopon1, dooropen, doorclose, doorwait1, doorwait2, doorwait3, door wait4, up , down, stop ) ; - - 定义为 lift类型的信号 m ylift: 表示状态的转 换 signal m ylift: lift_state; 主控进 程 中 一 个 典 型 的 状 态 转 换 环 节 如 下 所示 : ctrlift: p rocess ( reset, liftclk ) begin …… case mylift is - - 处于上升模式 when up => position < = position + 1; - - 上升一层 pos: = pos + 1; - - 变量 pos + 1 表示上升一层 - - 若即将到达的不是最高层且该层内部有停 站请求或外部有上升请求 if pos < 3 and ( stop light ( pos) = ' 'or fup light 1 ( pos) = ' ' then ) 1 m ylift < = stop; - - 转移为停止状态 - - 若即将到达的是最高层且该层内部有停站 请求或外部有下降请求 elsif pos = 3 and ( stop light ( pos ) = ' ' or 1 fdnlight ( pos) = ' ' then 1 ) mylift < = stop; else mylift < = doorclose; - - 转移到关门状态 end if; …… end case;
http://www.cnki.net

1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.

14

武 汉 工 业 学 院 学 报

2006 年

…… end p rocess ctrlift; 当设置如图 2 中所示的输入 (按钮波形 ) 时 , 通 过 M axPlusII软件仿真得到输出 (位置和运行显示 ) 的仿真结果如图 2 所示 (设定时钟周期为 0. 2 s) . 当 2 楼有上升请求时 fup light 的值由 0 变为 2 (注 意 , fup light和 fdnlight是 3 位的二进制向量 ,这里的 2 代表"010 "表示二楼有请求 ) position 值的由 1 变 , 为 2,电梯开门 , 表明上升请求被响应 , fup light的值 又变为 0,之后有 3 楼停止请求 , position值的由 2 变 为 3,电梯开门后又收到 2 楼下降请求 , fdnlight的值 由 0 变为 2, position 值的由 3 变为 2 后下降请求被 响应 fdnlight的值又变为 0.通过分析仿真结果可 以看出结果达到设计要求 .

3 结束语
通过应用状态机转换原理 , 并采用 VHDL 语言 完成一个电梯控制器实例的设计 , 这个设计预留了 扩展空间 ,同时还可以以模块的形式加入显示部分 . 以状态机来实现控制可以使程序结构较简单 , 设计 方法也较为固定 ,在高速运算和控制方面优势明显 . 参考文献 :
[1] 张亦华 ,延明 , 肖冰 . 数字逻辑器设计实践技

术与 EDA 工具 [M ]. 北京 : 北京邮电大学出 版社 , 2003. [2] 潘松 , 黄继业 . EDA 技术实用教程 [M ]. 北 京 : 科学出版社 , 2002.
[ 3 ] 王振红 . VHDL 数字设计与应用实践教 程 [M ]. 北京 : 机械工业出版社 , 2003. [4] 孔健 ,杨洪斌 ,吴悦 ,等 . 基于 VHDL 的有限状

态机描述及综合 [ J ]. 计算机工程 , 2003, 29 ( 15 ) : 82 - 83.

图 2 仿真结果

D ES IGN M ETHOD AND M PLEM EN TAT I N O F FSM I O BASED ON VHDL
(Depart ent of Electrical and Information Engineering, W uhan Polytechnic University, W uhan 430023, China ) m Ab s tra c t: This paper describes the design method of Finite State M achine ( FS ) . The i p lem entation of FS M m M based on VHDL is p roposed and the sim ulation results are given. Ke y wo rd s: FS VHDL; elevator control M;
WU J ia 2feng, X IAO A n, N IE B ing

1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.

http://www.cnki.net


相关文章:
状态机VHDL讲解
状态机VHDL讲解 - VHDL 的结构非常适合编写状态机, 而且编写方式不唯一, 电路的集成也会随着编写的方式 而改变。状态机设计主要用到 case when 和 if else ...
基于FPGA的状态机的实现
基于FPGA的状态机的实现 - 序列检测有限状态机实现 一、 有限状态机 有限状态机是绝大部分控制电路的核心结构,是表示有限个状态以及在这些 状态之间转移和动作等...
VHDL设计 有限状态机设计
基于VHDL的有限状态机设计... 3页 1财富值喜欢此文档的还喜欢 有限状态机FSM设计 10页 1财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建...
基于VHDL语言状态机编写流水灯
基于VHDL语言状态机编写流水灯_电子/电路_工程科技_专业资料。基于VHDL语言利用状态机编写流水灯 程序采用元件例化方式编写基于VHDL 语言状态机编写流水灯采用元件例化...
基于VHDL状态机设计的智能交通控制灯
基于VHDL状态机设计的智能交通控制灯 - 基于 VHDL 状态机设计的智能交通控制灯 来源:国外电子元器件 作者:徐春娇 1 设计方案 十字路口设计两组交通灯分别控制东西...
VHDL状态机程序
三种编码形式实现方式: 一位热码: ARCHITECTURE ONE...第5章 VHDL 状态机 62页 1下载券 基于VHDL语言...有限状态机VHDL设计及... 4页 1下载券 第八...
状态机设计交通灯
在用 VHDL 语言来设计实用系统的控制功能时, 通常会选用有限状态机方法实现,...2 基于有限状态机的交通灯控制系统设计 2.1 功能分析 作为一个十字路口交通...
基于EDA的VHDL语言设计的交通灯
基于EDA的VHDL语言设计的交通灯_计算机软件及应用_IT/计算机_专业资料。用有限状态机设计一个交通灯控制器,设计要求:A路和B路,每路都有红、黄、绿三种灯,持续时...
自动售货机控制系统VHDL有限状态机实现
自动售货机控制系统VHDL有限状态机实现 - 自动售货机控制系统 VHDL 有限状态机实现 1 引言 有限状态机 FSM(Finite State Machine)及其设计技术是实用数字系统设计....
FPGA Verilog HDL 设计实例系列连载---有限状态机设计
FPGA Verilog HDL 设计实例系列连载---有限状态机设计_电子/电路_工程科技_专业...语句来实现时序逻辑, 另外一个 always 语 句来实现组合逻辑,提高了代码的可读...
更多相关标签: