首页 基于FPGA的智能电梯控制系统的实现 毕业论文

基于FPGA的智能电梯控制系统的实现 毕业论文

举报
开通vip

基于FPGA的智能电梯控制系统的实现 毕业论文基于FPGA的智能电梯控制系统的实现 毕业论文 题目:基于FPGA的智能电梯控制系统的实现 2010 年 12 月 07 日 1 摘要 智能电梯控制系统的设计思想 智能电梯的编写的过程也不是一帆风顺的。而且我试过好多种方法去实现电梯的状态的转移。起初我想到的肯定是有限状态机。不过由于开始我想到只有六个请求(分别为1~6楼),后来在老师的启发下和东十二楼的电梯实际运行情况我发现,6个按钮肯定是不够的,所以我又加了5个向上的请求按钮和5个向下的请求按钮,这样总共就有16个按钮了,由于当时我没有想到用信号并置...

基于FPGA的智能电梯控制系统的实现 毕业论文
基于FPGA的智能电梯控制系统的实现 毕业论文 题目:基于FPGA的智能电梯控制系统的实现 2010 年 12 月 07 日 1 摘要 智能电梯控制系统的设计思想 智能电梯的编写的过程也不是一帆风顺的。而且我试过好多种方法去实现电梯的状态的转移。起初我想到的肯定是有限状态机。不过由于开始我想到只有六个请求(分别为1~6楼),后来在老师的启发下和东十二楼的电梯实际运行情况我发现,6个按钮肯定是不够的,所以我又加了5个向上的请求按钮和5个向下的请求按钮,这样总共就有16个按钮了,由于当时我没有想到用信号并置的方法,所以需要分析的情况实在是太多了,我也没有信心了。不过问题始终都是要得到解决的,后来我在我们寝室的一个同学的参考书上看到了一个用VHDL语言编写的智能电梯控制器的程序,不过很不完整,它给我的最大的启发就是“信号并置的算法”,我才发现这样一来的话,我的工作量就大大减少了。 当时我不仅采用“信号并置的算法”外,还采纳了它的“以楼层为电梯的状态转移的依据”的思想,这确实是一个不错的方法,不过当时我一直没有任何进展,一是它是用VHDL语言编写的,而且我对这个语言不是很熟悉所以不是特别理解。后来竟然干起了把VHDL语言翻译成verilog语言的工作,这样没有任何含金量的工作让我浪费了不少时间。现在想起来,我才发现我竟然迷失了自己,我原先自己的算法已经被丢失了,留下了的仅仅是一些他人的程序。“以楼层为电梯的状态转移的依据”的编程方法让我没有得到任何进展,我放弃的这种处理多种状态的方法,继而转向了我原先的“有限状态机”的方法。使用三段式的有限状态机的方法也花了很多时间去修正和改善。实现了基本的功能,当时一遇到比较复杂的情况时(比喻同时有几个人在请求或者是同时有两个在不同楼层的请求时电梯该如何运行呢,这些特殊情况我在当时一直没有找到合适和有效的方法去解决)。 关键词:信号并置 verilog 状态机 2 Intelligent elevator control system design thought Abstract Intelligent elevator compilation process is not easy. And I tried a variety of ways to realize the transfer of the state. At first I thought the affirmation is a finite state machine. But due to start I thought only six request (respectively for 1 ~ 6 / f) and then in teacher inspired and east ten on the second floor of the elevator actual operation situation I found, 6 button affirmation is not enough, so I added five upward request button and five downward request button, so it has 16 button, because at that time I didn't think by signal and inverted method, so need analysis of true is too many, I also have no confidence. Nevertheless the problem are always to be solved, later I in our bedroom is a classmate of reference books on saw a with VHDL language preparation intelligent elevator controller program, but is not complete, it gives me the greatest inspiration is "signal and inverted algorithm", I discovered this way, then my workload is greatly reduced.I was not only use "signal and inverted algorithm" outside, still adopted its "to the floor for elevator status transfer basis" thought, it is really a good method, but I haven't made any progress, one is it is with VHDL language preparation, and I'm not very familiar with the language so not particularly understanding. Later unexpectedly raised the VHDL language translation into verilog language job, so that no measure of work let I waste a lot of time. Now that I think about it, I found that I had lost themselves, I had his own algorithm has been lost, leaving the others are only some of the program. "To the floor for elevator status transfer basis" programming method, let I haven't got any progress, I give up this handle a variety of state method, then turned to my original "finite state machine" method. Use the finite state machine 3-sectional methods also spent a lot of time to modify and improve. Realize the basic functions, when a meet more complex situations (parables meanwhile several people in request or is also have two in different floor request? How should the elevator running these special cases I at that time has not find appropriate and effective approach to solve).Abstract KEY WORDS: A signal and buy verilog State machine 3 目 录 第一章 概述摘要 ................................................................................... 5 1.1 EDA概述 ........................................................................................................... 5 1.1.1什么是EDA ..................................................................................................... 5 1.1.2 EDA的特 ........................................................................................................ 6 1.1.3 EDA的应用 ..................................................................................................... 6 1.2 FPGA的简介及特点 .......................................................................................... 7 1.3 VHDL语言及程序概述 ..................................................................................... 8 1.3.1 VHDL语言的发展 ......................................................................................... .9 1.3.2 VHDL语言的特点 .......................................................................................... 9 1.3.3 VHDL语言程序的基本结构 ......................................................................... 10 1.4状态机的简介 ................................................................................................... 10 第二章 电梯控制系统的分析 .............................................................. 12 2.1选题的背景 ....................................................................................................... 12 2.2电梯控制的研究背景 ....................................................................................... 12 2.3 我国电梯的发展概况 ...................................................................................... 13 2.4 电梯设计的具体目的及控制要求 ................................................................... 13 2.5电梯控制器设计原理及思路 ............................................................................ 14 2.6 电梯控制系统状态图分析 ............................................................................... 15 第三章 电梯控制系统的设计与实现 .................................................. 17 3.1 MAX+PLUSII的介绍 ...................................................................................... 17 3.2 电梯控制系统的VHDL语言设计及仿真....................................................... 18 3.2.1 模块示意图和输入输出描述 ........................................................................ 18 3.2.2 模块设计过程 ............................................................................................... 20 3.2.3 波形仿真 ....................................................................................................... 21 3.3 电梯控制系统的实验平台实现 ....................................................................... 27 结论与体会 .......................................................................................... .28 致谢 ...................................................................................................... .30 附件程序 .............................................................................................. .31 参考文献 .............................................................................................. .43 4 第一章 概述摘要 1.1 EDA概述 EDA在通信行业(电信)里的另一个解释是企业数据架构,EDA给出了一个企业级的数据架构的总体视图,并按照电信企业的特征,进行了框架和层级的划分。 EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。 1.1.1什么是EDA 20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了 CPLD、FPGA)的应用,巨大成功。在电子技术设计领域,可编程逻辑器件(如 已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。 EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。 利用EDA工具,电子设计师可以从概念、算法、 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。 现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。 5 1.1.2 EDA的特点 (1) 高层综合和优化 为了能更好地支持自顶向下的设计方法,现代的EDA工具能够在系统进行综合和优化,这样就缩短了设计的周期,提高了设计效率。 (2)采用硬件描述语言进行设计 采用硬件描述语言进行电路与系统的描述是当前EDA技术的另一个特征。与传统的原理图设计方法相比,HDL语言更适合描述规模大的数字系统,它能够使设计者在比较抽象的层次上对所设计系统的结构和逻辑功能进行描述。采用HDL语言设计的突出优点是:语言的公开性和利用性;设计与工艺的无关性;宽范围的描述能力;便于组织大规模系统的设计;便于设计的复用,交流,保存和修改等。目前最常用的硬件描述语言有VHDL和Verilog HDL,它们都已经成为IEEE 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 。 (3)开放性和标准化 现代EDA工具普遍采用标准化和开放性框架结构,任何一个EDA系统只要建立了一个符合标准的开放式框架结构,就可以接纳其他厂商的EDA工具仪器进行设计工作。这样就可以实现各种EDA工具的优化组合,并集成在一个易于管理的统一环境下,实现资源共享。 1.1.3 EDA的应用 随着电子技术的发展,可编程逻辑器件和eda技术已广泛应用于通信、工业自动化、智能仪表、图像处理、计算机等领域。EDA(ElectronincDesign Automation,电子设计自动化)技术是现代电子工程领域的一门新技术,它提供了基于计算机和信息技术的电路系统设计方法。EDA技术的发展和推广应用极大地推动了电子工业的发展。随着EDA技术的发展,硬件电子电路的设计几乎全部可以依靠计算机来完成,这样就大大缩短了硬件电子电路设计的周期,从而使制造商可以快速开发出品种多、批量小的产品,以满足市场的众多需求。EDA教学和产业界的技术推广是当今世界的一个技术热点,EDA技术是现代电子工业中不可缺少的一项技术。 6 1.2 FPGA的简介及特点 背景 目前以硬件描述语言(Verilog或 VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术 、OR、主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如ANDXOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip,flop)或者其他更加完整的记忆块。 系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。 FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD(复杂可编程逻辑器件备)。 CPLD与FPGA的关系 早在1980年代中期,FPGA已经在PLD设备中扎根。CPLD和FPGA包括了一些相对大数量的可以编辑逻辑单元。CPLD逻辑门的密度在几千到几万个逻辑单元之间,而FPGA通常是在几万到几百万。 CPLD和FPGA的主要区别是他们的系统结构。CPLD是一个有点限制性的结构。这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。而FPGA却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。 CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。一个因此有关的重要区别是很多新的FPGA支持完全的或者部分的系统内重新配置。允许他们的设计随着系统升级或者动态重新配置而改变。一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行。 7 FPGA工作原理 FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 FPGA的基本特点 1)采用FPGA设计ASIC电路(特定用途集成电路),用户不需要投片生产,就能得到合用的芯片。 2)FPGA可做其它全定制或半定制ASIC电路的中试样片。 3)FPGA内部有丰富的触发器和I,O引脚。 4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 5) FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。 FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。 加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。 1.3 VHDL语言及程序概述 VHDL 的英文全名是 Very-High-Speed Integrated Circuit Hardware Description Language,诞生于 1982 年。1987 年底,VHDL被 IEEE 和美国国防部确认为标准硬件描述语言。 VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分 8 类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。 1.3.1 VHDL语言的发展 在集成电路制造工艺的发展的过程中,微电子设计工艺已经达到了深亚微米时代,在EDA设计中主要有软硬件协作设计的要求,现有的工具支持SOC设计尚有难度,迫切需要提高设计能力。在设计语言中,由于VHL和Verilog HDL是目前通用的设计语言,在设计大系统时,不够方便直观,所以需要进一步完善。 电子产品随着技术的进步,更新换代日新月异,而掌握电子产品开发研制的动力源—EDA技术,是我们国家工程技术人员不可推卸的责任,因为中国的设计公司大多还处在发展的初级阶段,所使用的设计工具都是几年前国外的主流工具。 1.3.2 VHDL语言的特点 VHDL 语言能够成为标准化的硬件描述语言并获得广泛应用 , 它自身必然具有很多其他硬件描述语言所不具备的优点。归纳起来 ,VHDL 语 [1]言主要具有以下优点: (1) VHDL 语言功能强大 , 设计方式多样 VHDL 语言具有强大的语言结构, 只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。同时, 它还具有多层次的电路设计描述功能。此外 ,VHDL 语言能够同时支持同步电路、异步电路和随机电路的设计实现, 这是其他硬件描述语言所不能比拟的。VHDL 语言设计方法灵活多样 , 既支持自顶向下的设计方式, 也支持自底向上的设计方法; 既支持模块化设计方法, 也支持层次化设计方法。 (2) VHDL 语言具有强大的硬件描述能力 VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路 , 也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。同时,VHDL 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL 语言的强大描述能力还体现在它具有丰富的数据类型。VHDL 语言既支持标准 9 定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。 (3) VHDL 语言具有很强的移植能力 VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述 , 它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。 (4) VHDL 语言的设计描述与器件无关 采用 VHDL 语言描述硬件电路时, 设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化, 而不需要考虑其他的问题。当硬件电路的设计描述完成以后 ,VHDL 语言允许采用多种不同的器件结构来实现。 (5) VHDL 语言程序易于共享和复用 VHDL 语言采用基于库 ( library) 的设计方法。在设计过程中 , 设计人员可以建立各种可再次利用的模块 , 一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计 , 而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块, 将这些模块存放在库中 , 就可以在以后的设计中进行复用。 由于 VHDL 语言是一种描述、模拟、综合、优化和布线的标准硬件描述语言 , 因此它可以使设计成果在设计人员之间方便地进行交流和共享, 从而减小硬件电路设计的工作量, 缩短开发周期。 1.3.3 VHDL语言程序的基本结构 实体(Entity)结构体 (Architecture) 包集合(Package) 配(Configuration) 库(Library) 1.4状态机的简介 关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。 包含一组状态集(states)、一个起始状态(start state)、一组输入符号 10 集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型。当输入符号串,模型随即进入起始状态。它要改变到新的状态,依赖于转换函数。在有限状态机中,会有有许多变量,例如,状态 机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有 限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态,等等。 传统应用程序的控制 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 基本是顺序的:遵循事先设定的逻辑,从头到尾地执行。很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况。“命令行实用程序”是这种传统应用程序的典型例子。 另一类应用程序由外部发生的事件来驱动——换言之,事件在应用程序之外生成,无法由应用程序或程序员来控制。具体需要执行的代码取决于接收到的事件,或者它 相对于其他事件的抵达时间。所以,控制流程既不能是顺序的,也不能是事先设定好的,因为它要依赖于外部事件。事件驱动的GUI应用程序是这种应用程序的典 型例子,它们由命令和选择(也就是用户造成的事件)来驱动。 Web应用程序由提交的表单和用户请求的网页来驱动,它们也可划归到上述类 别。但是,GUI应用程序对于接收到的事件仍有一定程度的控制,因为这些事件要依赖于向用户显示的窗口和控件,而窗口和控件是由程序员控制的。Web应用 程序则不然,因为一旦用户采取不在预料之中的操作(比如使用浏览器的历史记录、手工输入链接以及模拟一次表单提交等等),就很容易打乱设计好的应用程序逻辑。 显然,必须采取不同的技术来处理这些情况。它能处理任何顺序的事件,并能提供有意义的响应——即使这些事件发生的顺序和预计的不同。有限状态机正是为了满足这方面的要求而设计的。 有限状态机是一种概念性机器,它能采取某种操作来响应一个外部事件。具体采取的操作不仅能取决于接收到的事件,还能取决于各个事件的相对发生顺序。之所以能 做到这一点,是因为机器能跟踪一个内部状态,它会在收到事件后进行更新。为一个事件而响应的行动不仅取决于事件本身,还取决于机器的内部状态。另外,采取 的行动还会决定并更新机器的状态。这样一来,任何逻辑都可建模成一系列事件/状态组合。 状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。详解如下: ?现态:是指当前所处的状态。 11 ?条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 ?动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 ?次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。 第二章 电梯控制系统的分析 2.1选题的背景 随高层楼宇的增加,电梯越来越多的走进了人们的生活,对人们的生活的影响越来越大。为了让电梯更好的服务人们,各种电梯新技术不断地发展起来。随着人们生活水平的不断提高,经济的快速发展和生产生活的需要,城市高层建筑如雨后春笋拔地而起。与此相应,作为一种可以垂直升降运输的工具一电梯也得到迅猛的发展。现在,电梯己完全融入我们的生活、工作及学习中,人们越来越离不开它。因此,它的安全可靠性、迅速准确性、舒适性,对人们来说都是非常重要的。为了确保电梯正常运行、安全使用,一般电梯都有专业的维修管理人员。他们必须对电梯原理、性能、特点、控制、运行要全面认识和掌握,才能做到对电梯的正确使用、管理及维护。根据我国有关部门的规定,电梯作业属于特种作业,其作业人员必须经过专门 培训 焊锡培训资料ppt免费下载焊接培训教程 ppt 下载特设培训下载班长管理培训下载培训时间表下载 ,并经理论考试和实践考核合格后,发给《特种作业操作证》方可上岗操作。同时,对电梯操作人员定期考核,让他们定期参加安全技术学习,扎扎实实地做好电梯维护和保养工作,才能使人们平安长久的使用电梯少, 2.2电梯控制的研究背景 电梯控制系统是一个相当复杂的逻辑控制系统(系统要同时对几百个信号进行接收、处理。由于用户对电梯功能的要求不断提高(其相应控制方式也在不断发生变化。随着EDA技术的快速发展(基于FPGA的微机化控制已广泛应用于电梯电路设计与控制的各个方面。 12 2.3 我国电梯的发展概况 电梯控制是属于机电一体化研究领域,它涉及到多个方面,包括:机械工程、电子技术、电力电子技术、电机与拖动理论、自动控制理论、电力拖动自动控制系统、微机技术和土建工程等多个科学领域。 ?对进口电梯的销售、安100多年来,我国电梯行业的发展经历以下几个阶段: 装、维护阶段(1900-1949年),这一阶段我国电梯拥有数量仅约1100多台;?独立自主、艰苦研制、生产阶段(1950-1979年),这一阶段我国共生产安装电梯 约1万台;?建立三资企业,行业快速发展阶段(自1980年至今),这一阶段我国 共生产安装电梯约40万台。目前,我国已经成为世界最大的新装电梯市场和最 大的电梯生产国。并且还有着巨大市场和发展潜力空间。2002年,中国电梯行 业电梯年产量首次突破6万台。中国电梯行业自改革开放以来第三次发展浪潮正 在掀起。第一次出现在1986-1988年,当时适逢我国高层建筑业的大规模浪潮的 第一次兴起。第二次出现在1995^-1997年。应该说,随着我国经济的增长,电 梯市场一直保持着旺盛的需求。其次表现在企业的规模效益逐步展现。随着我国 经济平稳持续的发展,尤其是住宅产业作为国民经济新增长点的提出,为电梯业 的发展提供了良好的机遇。今后几年,我国将年建住宅3. 5亿平方米,公建项目 1.2亿平方米。随着城市向大型化、高层化的发展,我国每年将需要电梯在40000 台以上。如此大的市场需求,将是电梯业再创辉煌的最好契机。 2.4 电梯设计的具体目的及控制要求 使用FPGA完场6层的电梯控制系统。可以使用状态机实现。要求指示电梯所在楼层位置等其他必要的信号。通过仿真结果验证其正确性,并在开发板上进行硬件测试。 系统的要求如下: (1) 电梯共有6层。电梯运行规则:上升时:响应比当前位置高的上楼要求,由下往上逐个执行;如果楼层有下楼请求,直接升到由此请求的最高层,然后进入下降模式。进入下降模式后,只响应比当前位置低的下楼请求,由上到下逐个执行。电梯有6层,每1秒上升或者下降1层。 13 (2) 有信号灯指示电梯处于上升或者下降状态,并有数码管显示电梯到达层数。 (3) 每一层有信号灯指示该层电梯门状态,有两个按键分别响应上升或下降的请求 (4) 每一层电梯内部有乘客到达楼层的停站请求开关及其显示 (5) 电梯到达有停站请求的楼层后,电梯门打开,指示灯亮,4秒后电梯门关闭,指示灯灭,直至执行完。最后停在发出最后一个请求的楼层。 (6) 电梯的初始位置为一层,处于开门状态。 2.5电梯控制器设计原理及思路 原理与系统设计 思想来源: 平时我们上课或者是上自习都去过东十二楼或者去过科技楼、南一楼,免不了坐坐电梯,对它的基本工作原理我们有知道多少了,这次我们要制作一个智能电梯控制器,必须对它的工作原理有十分清晰的了解。我们设计的智能电梯控制器应该可以实时接受各楼层的上下请求信号及电梯内部的停靠请求,然后根据这些请求实现对电梯正确的控制: 1、除了顶层和底层外,各楼层均设有上下请求开关,顶层和底层分别设有下降和上升请求开关,这一点应该不难理解;电梯内设有乘客到达层次的请求开关。 2、电梯每1s上升或下降一层 3、电梯到达有停站请求的楼层后,经过1s后电梯门打开,开门指示灯亮,开门5s后电梯指示灯灭,电梯继续运行,直至运行完最后一个请求后停靠在当前层。以上是我们所应实现的基本功能。我在序言中也讲到了,“应用有限状态机”实现电梯的实时控制是最好不过的方法了,通过我的分析以及参考图书馆的有关书籍,也少不了参照一些网上的程序,最后总结出了电梯正常运行的七个状态:上升、下降、上升的过程中途停止、下降的过程中途停止、开门、关门、等待状态。电梯在上述七个状态间的转移是通过三段式状态机来实现的,各状态间的转移大体与生活中的电梯运转一致,有如下的基本原则: 14 1、方向为第一优先准则,这就是曾老师给我们的技术指标。电梯在运转时先响 应同方向上的请求,只有当同方向上的请求响应完后,才能转而响应不同方向上 的请求。 2、初始化状态为1楼等待门是关闭的。这个就不用多解释了。除了我对电梯的 运行规律做出如上的分析外,我的另一个选择开发智能电梯控制器的原因是我想 锻炼一下自己的逻辑思维和分析复杂问题的能力。 2.6 电梯控制系统状态图分析 最开始我根据DE2板子所能提供的资源,把楼层数设为6层。从我查阅的书籍中 我总结了两点是我可以借鉴的。首先,是怎样处理数量繁多的电梯输入信号,如 果采用分情况讨论的话,程序一路写完,复杂度肯定是不堪设想,而且我还不敢 保证是否分析到所有的情况了。 always @(call_up_1 or call_up_2 or call_up_3 or call_up_4 or call_up_5) up_all={1'b0, call_up_5, call_up_4, call_up_3, call_up_2, call_up_1}; //将各下降请求信号实时地合并(1楼为底层,无下降请求,考虑到通用性,将第 1位填零) always @(call_down_2 or call_down_3 or call_down_4 or call_down_5 or call_down_6) down_all={call_down_6, call_down_5, call_down_4, call_down_3, call_down_2, 1'b0}; //将各停靠请求信号实时地合并 always @(request_1 or request_2 or request_3 or request_4 or request_5 or request_6) request_all={request_6, request_5, request_4, request_3, request_2, request_1}; 以上这一段程序就是我采用的信号并置处理很多输入信号的一种行之有效的方 法。 其次,我从 资料 新概念英语资料下载李居明饿命改运学pdf成本会计期末资料社会工作导论资料工程结算所需资料清单 中学习到的方法就是如何把信号并置的方法和有限状态机联系起 来。这一点从下面的参数定义中可以窥见一二。 parameter WAIT=7'b0000001, UP=7'b0000010, DOWN=7'b0000100, UPSTOP=7'b0001000 , DOWNSTOP=7'b0010000, OPENDOOR=7'b0100000, CLOSEDOOR=7'b1000000; 15 //定义楼层的符号常量 parameterFLOOR1=6'b000001,FLOOR2=6'b000010,FLOOR3=6'b000100, FLOOR4=6'b001000, FLOOR5=6'b010000, FLOOR6=6'b100000; parameter TRUE=1'b1, FALSE=1'b0;//定义门打开和门关闭的符号常量 parameter OPEN=1'b1, CLOSED=1'b0;//定义电梯上升,下降和静止的符号常 量 parameter UPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00; 这里采用了七个状态实现了有限状态机。 UP WAIT DOWN UPSTOP DOWNSTOP OPENDOOR CLOSEDOOR 以上是我分析的两种基本的电梯状态转换图: 黑线:WAIT TO UP TO UPSTOP TO OPENDOOR TO CLOSEDOOR TO WAIT 粉红线:WAIT TO DOWN TO DOWNSTOP TO OPENDOOR TO CLOSEDOOR TO WAIT 由于状态转换的输入条件实在太多,在此我不画出,读者可以自行在程序(附有 详细注释)中领会。我的程序中采用的是标准的MEALY型状态状态机。而且是 老师建议的三段式的结构来写的。不过我有一点不明白的就是为什么在我的 QUARTUS7.1中运用RTL VIEW不能显示出这个三段式的有限状态机。不过我 16 会继续努力一下的,目前我智能用图形框来表示这个状态的流程了。 第三章 电梯控制系统的设计与实现 3.1 MAX+PLUSII的介绍 Max+plusII(或写成Maxplus2,或MP2) 是Altera公司推出的的第三代PLD开发系统(Altera第四代PLD开发系统被称为:QuartusII,主要用于设计新器件和大规模CPLD/FPGA).使用MAX+PLUSII的设计者不需精通器件内部的复杂结构。设计者可以用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MAX+PLUSII把这些设计转自动换成最终所需的格式。其设计速度非常快。对于一般几千门的电路设计,使用MAX+PLUSII,从设计输入到器件编程完毕,用户拿到设计好的逻辑电路,大约只需几小时。设计处理一般在数分钟内内完成。特别是在原理图输入等方面,Maxplus2被公认为是最易使用,人机界面最友善的PLD开发软件,特别适合初学者使用。在这里我们可以先看一看用FPGA,CPLD开发工具进行电路设计的一般流程 通常可将FPGA/CPLD设计流程归纳为以下7个步骤,这与ASIC设计有相似之处。 1.设计输入。在传统设计中,设计人员是应用传统的原理图输入方法来开始设计的。自90年代初, Verilog、VHDL、AHDL等硬件描述语言的输入方法在大规模设计中得到了广泛应用。 2.前仿真(功能仿真)。设计的电路必须在布局布线前验证电路功能是否有效。(ASCI设计中,这一步骤称为第一次Sign-off)PLD设计中,有时跳过这一步。 3.设计编译。设计输入之后就有一个从高层次系统行为设计向门级逻辑电路设转化翻译过程,即把设计输入的某种或某几种数据格式(网表)转化为软件可识别的某种数据格式(网表)。 17 4.优化。对于上述综合生成的网表,根据布尔方程功能等效的原则,用更小更快的综合结果代替一些复杂的单元,并与指定的库映射生成新的网表,这是减小电路规模的一条必由之路。 5.布局布线。在PLD设计中,3-5步可以用PLD厂家提供的开发软件(如 Maxplus2)自动一次完成。 6.后仿真(时序仿真)需要利用在布局布线中获得的精确参数再次验证电路的时序。(ASCI设计中,这一步骤称为第二次Sign—off)。 7.生产。布线和后仿真完成之后,就可以开始ASCI或PLD芯片的投产。同样,使用Maxplus2基本上也是有以上几个步骤,但可简化为:1.设计输入 2.设计编译 3.设计仿真 4.下载 3.2 电梯控制系统的VHDL语言设计及仿真 3.2.1 模块示意图和输入输出描述 elevator_controller(1) 电梯主控制器模块elevator_controller: Parameter...Value... cp_50Mout[6..0] clkLiftState[6..0] resetover_alarm forbidcount_out[6..0] call_up_1count[2..0] call_up_2 call_up_3 call_up_4 call_up_5 call_down_2 call_down_3 call_down_4 端口声明: call_down_5 Input Port: call_down_6 18 request_1 request_2 request_3 request_4 request_5 request_6 inst3 call_up_1, call_up_2, call_up_3, call_up_4, call_up_5分别为1-5楼的上行请求信号, call_down_2, call_down_3, call_down_4, call_down_5, call_down_6则分别为2-6楼的下行请求信号 request_1, request_2, request_3, request_4, request_5, request_6则分别为电梯内部 -6楼的请求 的停靠1 上述各端口均为有请求时,输入为高电平,否则为低电平; clk分别为状态转移时钟,reset为复位信号 Output Port: PosOut输出当前电梯所在的楼层,DoorFlag为开门标志,UpDnFlag为电梯上下标志 LiftState输出当前电梯的状态. PosOut取值可为6'b000001,6'b000010,6'b000100,6'001000,6'b010000,6'b100000分别代表电梯处在1,2,3,4,5,6楼。这样编码的话,有利于后面的比较判断。 DoorFlag取值可为1'b0,1'b1,分别代表当前门是关闭和当前门是打开的。 UpDnFlag取值可为2'b00,2'b01,2'b10,分别代表当前电梯是上升的,下降的和静止的。 LiftState7'b0000001,7'b0000010,7'b0000100,7'b0001000,7'b0010000,7'b0100000,7'b 1000000, 分别电梯处于等待模式、上升模式、下降模式、上升停止,下降停止、开门和关门等7个状态。 frequence_div(2)分频模块frequence_div: cp_50Mcp_1 端口说明: inst2Input ports: cp_50M; output ports: cp_1; (3)电梯状态仲裁器arbitrator: arbitrator elevator_state[6..0]open_enable count_in[2..0]stop_enable up_enable down_enable close_enable 19 inst5 端口说明: Input ports: elevator_state; count_in; output ports: output open_enable,stop_enable,up_enable,down_enable,close_enable; (4)LCD驱动模块DE2_Default: DE2_Default open_enableLCD_ON stop_enableLCD_BLON up_enableLCD_RW down_enableLCD_EN close_enableLCD_RS CLOCK_50LCD_DATA[7..0] KEY端口说明: Input ports: inst4 input open_enable,stop_enable,up_enable,down_enable,close_enable; input CLOCK_50; // 50 MHz input KEY; output ports: inout [7:0] LCD_DATA; // LCD Data bus 8 bits output LCD_ON; // LCD Power ON/OFF output LCD_BLON; // LCD Back Light ON/OFF output LCD_RW; // LCD Read/Write Select, 0 = Write, 1 = Read output LCD_EN; // LCD Enable output LCD_RS;// LCD Command/DataSelect, 0= Command, 1 = Data 3.2.2 模块设计过程 现在我简要的说明一下我的模块的设计过程: (1)电梯主控制器模块elevator_controller: 此段智能电梯控制器由三个重要部分组成的。 (a)信号并置部分,完成对5路向上请求、5路向下请求、6路内部请求的信号 并置,化繁为简。 (b)三段式有限状态机部分。在有请求的情况下,电梯控制器还要根据电梯的 20 当前状态和当前的楼层去判断电梯的下一步该如何运作。 (c)计数器部分。完成电梯的开门、关门的时间管理。 (2)分频模块frequence_div: 这段分频器完成对50Mhz的1分频操作。采用传统的“一半就翻转”的计数技巧。 (3)电梯状态仲裁器arbitrator: 完成电梯信号到LCD控制的信号转换。其中也采用了“电梯主控制器”中的信号并置的思想。这一点可以在我的程序中十分清楚的看到,在此我不再赘述。 (4)LCD驱动模块DE2_Default: 这个模块我是采用“ 拿来主义”的。因为是DE2板子提供的源程序,所以编写起来还算比较轻松。就只加了一个“ 根据不同的输入产生不同的输出 ”的模块。中途还遇到了字符型液晶不能更新的问题,不过在同学的帮助下,最终还是解决了。 (5)数码管译码模块: (6)数码管时间译码模块: 以上两个模块一起讲比较合适,因为它们都是采用了同样的译码原则,只不过条件不一样而已。我们可以针对不同的输入根据自己的意愿把它译成同样的数码显示。 以上的模块设计过程说的比较的简约。主要是大概的介绍了我的各个模块的基本设计原理,希望读者能从程序中仔细体会这种原理。 3.2.3 波形仿真 (1)当电梯处于初始状态时,电梯在高层有向下的请求时: 21 (2)LCD的显示由于数据太多,所以单独显示如下: 首先显示:“ it is static.. ” 随后会显示: 22 以上的字符发送到液晶显示模块之后,可以显示“ door is rising.. ” 随后会显示: 可以显示“ it is static.. ” 以上的字符发送到液晶显示模块之后,可以显示“ door is opening.. ” 随后会显示: 23 以上的字符发送到液晶显示模块之后,可以显示“ it is closing.. ” 最后会显示下列字符,电梯重新回到初始等待状态: 以上可以显示“ it is static.. ” 说明:由于LCD显示波形会占用比较多的空间,所以以上我仅以在高层有向下的请求为例来说明,电梯的状态完全可以通过LCD来正确地显示出来。鉴于此,我的下面的波形将不展示LCD显示部分的波形图。 (3)当电梯停在6楼处于等待状态时,在1楼和2楼同时有向上的请求时: 24 (4)当电梯停在1楼处于等待状态时,在6楼和5楼同时有向下的请求时: 25 (5)当电梯停在6楼时,有在5楼的向下的请求时,电梯应该先到五楼,电梯内部请求到1楼,如果电梯在下降的过程中,有在2楼的向上的请求时,电梯应该先相应内部请求,然后相应外部请求: (6)电梯的强制运行按钮forbid: 26 3.3 电梯控制系统的实验平台实现 OUTPUTover_alarm PIN_AE23OUTPUTfloor_digital[3..0] Parameter...Value...elevator_controller arbitratorDE2_DefaultINPUTcp_50Mcp_50Mfloor_digital[3..0]VCCINPUTOUTPUTclkLCD_ONPIN_N2clkLiftState[6..0]elevator_state[6..0]open_enableopen_enableLCD_ONVCCINPUTOUTPUTresetLCD_BLONPIN_L4resetover_alarmcount_in[2..0]stop_enablestop_enableLCD_BLONVCCINPUTOUTPUTforbidLCD_RWPIN_K2PIN_V2forbidcount[2..0]up_enableup_enableLCD_RWVCCINPUTOUTPUTcall_up_1LCD_ENPIN_K4PIN_V1call_up_1down_enabledown_enableLCD_ENVCCINPUTOUTPUTcall_up_2LCD_RSPIN_N25PIN_K3call_up_2close_enableclose_enableLCD_RSVCCINPUTOUTPUTcall_up_3LCD_DATA[7..0]PIN_N26call_up_3CLOCK_50LCD_DATA[7..0]VCCinst1INPUTOUTPUTcall_up_4LUT_DATA[8..0]PIN_P25call_up_4KEYLUT_DATA[8..0]VCCINPUTOUTPUTcall_up_5LUT_INDEX[5..0]PIN_AE14call_up_5LUT_INDEX[5..0]VCCINPUTINPUTOUTPUTcall_down_2keymLCD_ST[5..0]PIN_AF14call_down_2mLCD_ST[5..0]VCCVCCPIN_K1INPUTOUTPUTcall_down_3mDLY[17..0]call_down_3PIN_AD13PIN_J1mDLY[17..0]PIN_G26VCCINPUTOUTPUTPIN_J2call_down_4mLCD_Startcall_down_4mLCD_StartPIN_AC13VCCPIN_H1INPUTOUTPUTcall_down_5mLCD_DATA[7..0]call_down_5mLCD_DATA[7..0]PIN_C13VCCPIN_H2INPUTOUTPUTcall_down_6mLCD_RScall_down_6mLCD_RSPIN_B13VCCPIN_J4INPUTOUTPUTrequest_1I2C_SDATrequest_1I2C_SDATPIN_A13VCCPIN_J3INPUTOUTPUTrequest_2I2C_SCLKrequest_2I2C_SCLKPIN_N1PIN_B6PIN_H4VCCINPUTrequest_3request_3PIN_P1PIN_A6PIN_H3VCCinst4INPUTrequest_4request_4PIN_P2VCCINPUTrequest_5request_5PIN_T7VCCINPUTrequest_6request_6PIN_U3VCCPIN_U4 inst 27 结论与体会 结论:我们设计的智能电梯控制器应该可以实时接受各楼层的上下请求信号及电梯内部的停靠请求,然后根据这些请求实现对电梯正确的控制: 1、除了顶层和底层外,各楼层均设有上下请求开关,顶层和底层分别设有下降和上升请求开关,这一点应该不难理解;电梯内设有乘客到达层次的请求开关。 2、电梯每1s上升或下降一层 3、电梯到达有停站请求的楼层后,经过1s后电梯门打开,开门指示灯亮,开门5s后电梯指示灯灭,电梯继续运行,直至运行完最后一个请求后停靠在当前层。 以上是我们所应实现的基本功能。我在序言中也讲到了,“应用有限状态机”实现电梯的实时控制是最好不过的方法了,通过我的分析以及参考图书馆的有关书籍,也少不了参照一些网上的程序,最后总结出了电梯正常运行的七个状态: 上升、下降、上升的过程中途停止、下降的过程中途停止、开门、关门、等待状态。 电梯在上述七个状态间的转移是通过三段式状态机来实现的,各状态间的转移大体与生活中的电梯运转一致,有如下的基本原则: 1、方向为第一优先准则,这就是老师给我们的技术指标。电梯在运转时先响应同方向上的请求,只有当同方向上的请求响应完后,才能转而响应不同方向上的请求。 2、初始化状态为1楼等待门是关闭的。这个就不用多解释了。 除了我对电梯的运行规律做出如上的分析外,我的另一个选择开发智能电梯控制器的原因是我想锻炼一下自己的逻辑思维和分析复杂问题的能力。 体会:本人认为电梯时未来高层建筑必不可少的一种工具,并且由于世界人 口的急剧增加和地球的有效使用面积的减少,未来的建筑都在向越来越高的方向 发展,所以电梯在未来有着举足轻重的作用,对此研究有着十分积极的作用。 通过对此课题的研究,本人还发现一个优秀的电子产品必须具备自动化能 力,本人还认为此课题还培养了我们更好的了解本专业的知识,提高个人修养, 锻炼自己的实际操作能力以及对待一件事的严谨态度,以及对以后的工作提出了 宝贵的经验。首先感谢我们学校给了我们这样一个宝贵的锻炼自己的能力的机会。我觉得在大学缺少的就是象这样的锻炼,我们不是有好多同学抱怨自己工作没经验、做项目没有经验吗,我觉得只要象这样的机会都每次认真对待了,我觉 28 得我们就会有一个很不一样的看法。回顾一下我们从大一到现在象这样的机会不多:大二上的C语言程序课程设计;大二下的电工实习;大三上的电子线路设计与测试实验—多功能数字钟的设计;大三上的IC课程设计;可以看出我们这样的机会不是没有,如果每一次我们都认真做了,认真总结了,认真分析了,资料认真查了,那么不管你最终成绩如何,我觉得我们都成功了。 29 致谢 回首课题研究的历程,对那些引导我、帮助我、激励我的人心中充满了感激。 首先要感谢导师杨小献老师,虽然我们是在开始毕设时才算真正的认识,但他却 能以一位长辈的风范来容谅我的无知,给我不厌其烦的指导,从论文定题、开发 过程的疑难解决到论文概要、写作方式以及用词造句、标点符号,倾注了杨老师 大量的心血。课题研究开发以及论文写作期间,深深受益于杨老师的关心、爱护 和谆谆教导。能在杨老师手下做毕设,我为自己感到庆幸。在此谨向杨老师表示 我最诚挚的敬意和感谢! 同时,感谢所有教导过我、关心过我的老师以及电信学 院的所有老师。他们为我的学业倾注了大量心血,为人师表的风范令我敬仰,严 谨治学的态度令我敬佩。最后再次我非常感谢杨老师对我的帮助。 30 附件程序 智能电梯主控制器模块 module elevator_controller(//input ports: cp_50M,clk,reset,forbid, call_up_1, call_up_2, call_up_3, call_up_4, call_up_5, call_down_2, call_down_3, call_down_4, call_down_5,call_down_6, request_1, request_2, request_3, request_4, request_5, request_6, //output ports: out,LiftState,over_alarm,count_out,count ); //output ports: output [6:0]out;//输出楼层 output [6:0] LiftState;//输出电梯状态 output over_alarm;//出错 output [6:0]count_out;//计数器输出,便于我控制开关门的状态显示 output [2:0]count;//计数器 //input ports: input cp_50M; input clk,reset,call_up_1,call_up_2,call_up_3,call_up_4,call_up_5,call_down_2,call_down _3,call_down_4,call_down_5,call_down_6,request_1,request_2,request_3,request_4,r equest_5,request_6; input forbid; //pos与Posout的关系:当前状态一改变,pos立即作相应改变,而PosOut则是当前状态在要变到下一状态的瞬间 //,将PosOut作相应改变。如从WAIT切换到第一个UP时,pos立即加一,而PosOut则要等到第一个UP //即将切换到第二个UP时,才加一。 //这个说的简单一点,就是移位寄存器,便于对电梯状态的实时的控制 wire over_alarm; wire [6:0]out; 31 wire [6:0]count_out; reg [5:0]pos,PosOut; reg [2:0] count;//门开后要持续5个时钟周期,用count来计数 reg DoorFlag; reg [1:0] UpDnFlag; reg [6:0] LiftState,NextState;//分别表示电梯的当前状态和下一状态 wire real_clk; //up_all,down_all,request_all分别用来合并向上请求的各信号,向下请求的各 信号和停靠请求的各信号 //以便判断电梯在状态间如何转移时更简洁 reg [5:0] up_all,down_all,request_all; //定义电梯7种状态的符号常量 parameter WAIT=7'b0000001, UP=7'b0000010, DOWN=7'b0000100, UPSTOP=7'b0001000 , DOWNSTOP=7'b0010000, OPENDOOR=7'b0100000, CLOSEDOOR=7'b1000000; //定义楼层的符号常量 parameter FLOOR1=6'b000001, FLOOR2=6'b000010, FLOOR3=6'b000100, FLOOR4=6'b001000, FLOOR5=6'b010000, FLOOR6=6'b100000; parameter TRUE=1'b1, FALSE=1'b0; //定义门打开和门关闭的符号常量 parameter OPEN=1'b1, CLOSED=1'b0; //定义电梯上升,下降和静止的符号常量 parameter UPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00; assign real_clk=(clk&(~forbid)); //采用屏蔽时钟的方法来实现“电梯强制禁止运行”。方法虽然违反了“同步 电路最好 //没有时钟门控”的要求,但是在此只要“负面影响”不是很大还是可以接受的。 //将各上升请求信号实时地合并(6楼为顶层,无上升请求,考虑到通用性,将 第4位填零) always @(call_up_1 or call_up_2 or call_up_3 or call_up_4 or call_up_5) 32 up_all={1'b0, call_up_5, call_up_4, call_up_3, call_up_2, call_up_1}; //将各下降请求信号实时地合并(1楼为底层,无下降请求,考虑到通用性,将第 1位填零) always @(call_down_2 or call_down_3 or call_down_4 or call_down_5 or call_down_6) down_all={call_down_6, call_down_5, call_down_4, call_down_3, call_down_2, 1'b0}; //将各停靠请求信号实时地合并 always @(request_1 or request_2 or request_3 or request_4 or request_5 or request_6) request_all={request_6, request_5, request_4, request_3, request_2, request_1}; always @(posedge real_clk or posedge reset) if(reset) count<=0; else if((NextState==OPENDOOR)&&(count<5))//or else if(NextState==OPENDOOR) count<=count+1;//如果计数不到5且下一状态为OPENDOOR的话, 继续计数 else count<=0;//清零,以备下次计数 //display which floor the elevator is.... display_decode h1(cp_50M,PosOut,out,over_alarm); display_decode_count h2(cp_50M,count,count_out); // finite state machine in the style of three segments ,三段式 //1st StateShift always block,sequential state transition,有限状态机第一段 always @(posedge real_clk or posedge reset) if(reset) begin LiftState<=WAIT; end 33 else LiftState<=NextState; //2nd StateShift always block,combinational condition judgement,有限状态机第二段 always @(LiftState or up_all or down_all or request_all or pos or count or UpDnFlag) case(LiftState) WAIT: begin if(request_all>0)//有停靠请求否 begin if((request_all&pos)>0)//停靠请求中有当前楼层停靠请求否 NextState=OPENDOOR;//有当前楼层请求,则下一状态转开门 else if(request_all>pos)//有当前楼层之上的停靠请求否(优先向上的请求) NextState=UP;//有则,下一状态转上升 else NextState=DOWN;//只有当前楼层之下的停靠请求,下一状态转下降 end else if((up_all&pos)||(down_all&pos))//上下请求中有当前楼层请求否 begin NextState=OPENDOOR; end else if((up_all>pos)||(down_all>pos))//上下请求中有当前楼层之上的请求否 NextState=UP; else if(up_all||down_all)//上下请求中有当前楼层之下的请求否 NextState=DOWN; 34 else NextState=WAIT;//无任何请求,继续处于WAIT模式 end UP: begin if((request_all&pos)||(up_all&pos))//停靠或上升请求中有当前楼层的请求否 NextState=UPSTOP;//有,下一状态转为UPSTOP(停靠后要1s才开门,UPSTOP即为这1s的过渡期) else if((request_all>pos)||(up_all>pos))//停靠或上升请求中有当前楼层之上的请求否 NextState=UP; else if(down_all>0)//有下降请求否 begin if((down_all>pos)&&((down_all^pos)>pos))//下降请求中有当前楼层的请求否 NextState=UP; else if((down_all&pos)||(pos0) begin if(((up_all&FLOOR1)FLOOR1)) NextState=DOWNSTOP; else if((up_all&pos)&&(pos==FLOOR1)) NextState=UPSTOP; else NextState=UP; end else if(request_all||down_all) NextState=UP; 36 else NextState=WAIT; end UPSTOP: begin NextState=OPENDOOR;//停靠1时钟周期后开门 end DOWNSTOP: begin NextState=OPENDOOR;//停靠1时钟周期后开门 end OPENDOOR: begin if(count<5)//开门不足5周期,则继续转移到开门状态 NextState=OPENDOOR; else NextState=CLOSEDOOR;//开门5周期后,关门 end CLOSEDOOR: begin if(UpDnFlag==UPFLAG)//开门关门前电梯是处于上升状态吗 begin if((request_all&pos)||(up_all&pos))//上升或停靠请求中有当前楼层的请求否,有可能关门的瞬间又有新的请求 NextState=OPENDOOR; else if((request_all>pos)||(up_all>pos))//上升或停靠请求中有当前楼层之上的请求否 NextState=UP; else if(down_all>0)//有下降请求否 begin if((down_all>pos)&&((down_all^pos)>pos)) 37 NextState=UP;//有当前楼层之上的 下降请求,则下一状态转移上升 else if((down_all&pos)>0)//有当前楼层 的下降请求信号,且更上层无下降请求 NextState=OPENDOOR; else//只有低于当前层的下降请求 NextState=DOWN; end else if(request_all||up_all)//上升和停靠请求中有 当前层的请求且只有当前层下的请求 NextState=DOWN; else NextState=WAIT;//无任何请求,转为WAIT 模式 end //请参考UpDnFlag=UPFLAG的注释 else if(UpDnFlag==DNFLAG) begin if((request_all&pos)||(down_all&pos)) NextState=OPENDOOR; else if(((request_all&FLOOR1)0) 38 begin if(((up_all&FLOOR1)0) NextState=OPENDOOR; else NextState=UP;// end else if(request_all||down_all) NextState=UP; else NextState=WAIT;// end //请参考WAIT模式的注释 else begin if(request_all>0) begin if((request_all&pos)>0) NextState=OPENDOOR; else if(request_all>pos) NextState=UP; else NextState=DOWN; end else if((up_all&pos)||(down_all&pos)) begin NextState=OPENDOOR; end else if((up_all>pos)||(down_all>pos)) 39 NextState=UP; else if(up_all||down_all) NextState=DOWN; else begin NextState=WAIT; end end end default: NextState=WAIT; endcase //3rd StateShift always block,the sequential FSM output,有限状态机第三段 always @(posedge real_clk or posedge reset)//output if(reset) //复位后初始化当前楼层为第一层,门是关闭的,电梯是静止的 begin pos<=FLOOR1; DoorFlag<=CLOSED; UpDnFlag<=STATIC; end else begin PosOut<=pos;//PosOut的输出慢pos一个时钟周期 case(NextState) WAIT: //状态为WAIT时,楼层不变,门是关闭的,电梯是静止的,其他模式的情况请大家自己推导 begin pos<=pos; DoorFlag<=CLOSED; 40 UpDnFlag<=STATIC; end UP: begin pos<=pos<<1; DoorFlag<=CLOSED; UpDnFlag<=UPFLAG; end DOWN: begin pos<=pos>>1; DoorFlag<=CLOSED; UpDnFlag<=DNFLAG; end UPSTOP: begin pos<=pos; DoorFlag<=CLOSED; UpDnFlag<=UPFLAG; end DOWNSTOP: begin pos<=pos; DoorFlag<=CLOSED; UpDnFlag<=DNFLAG; end OPENDOOR: begin pos<=pos; DoorFlag<=OPEN; UpDnFlag<=UpDnFlag; end CLOSEDOOR: begin pos<=pos; 41 DoorFlag<=CLOSED; UpDnFlag<=UpDnFlag; end default: //默认情况 begin pos<=FLOOR1; DoorFlag<=CLOSED; UpDnFlag<=STATIC; end endcase end endmodule 42 参考文献 [1] 王伟.Verilog HDL 程序设计与应用.人民邮电出版社 [2] 夏宇闻数字系统设计:Verilog实现.高等教育出版社 [3] 王金明.数字系统设计与Verilog HDL.电子工业出版社 [4] 李彦宏.百度 43
本文档为【基于FPGA的智能电梯控制系统的实现 毕业论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_321635
暂无简介~
格式:doc
大小:260KB
软件:Word
页数:0
分类:生活休闲
上传时间:2018-01-10
浏览量:16