1、专业综合课程设计基于VHDL的电梯控制器设计目录一、设计题目 2二、设计目的 2三、设计要求 2四、设计的基础依据 2(一)FPGA芯片介绍 2(二)VHDL语言介绍 3五、电梯控制器的基本设计原理 4(一)电梯控制器的工作原理 4(二)电梯控制器的设计 7七、参考文献 10附录1、VHDL源代码 11附录2、三层电梯的电路总图 17一、设计题目基于VHDL的三层电梯控制器设计二、设计目的掌握电梯控制器的工作原理,对系统进行基于VHDL的设计与实现。三、设计要求1、阐述电梯控制器系统工作原理2、画出电梯控制器的结构方框图 3、基于VHDL的设计实现4、写出详细的设计报告四、设计的基础依据(一)
2、FPGA芯片介绍FPGA是FieldProgrammable Gate Array(现场可编程门阵列)的缩写,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是专用集成电路中一种半定制电路。具克服了传统可编程器件数有限的缺点,又具有可编程的特点。FPGA器件是由美国XILINX公司于1985年首先推出。一般把FPGA定义为基于查找表技术(LOOK-UP Tablc,LUT)和SRAM工艺的PLD,目前的FPGA已远超出先前产品的基本功能,并且整合了许多常用功能( 如RAM、时钟管理和DSP),在新型的的系统级可编程逻辑器件中还可以以IP核的形式来进行功能设计,或许只需要一
3、块FPGA芯片就可以实现所有功能,成为片上系统。FPGA芯片的结构如图4-1所示。图4-1 FPGA芯片结构图近几年来FPGA有了很快的发展,按照传统观点,FPGA仅用于产品原型设计和ASIC的验证,用于大规模的数字系统开发就过于昂贵且功耗巨大。随着FPGA的研究突破了低功率、低成本和先进工艺的瓶颈后,FPGA的应用领域日益扩张,随着功能和性能的进一步提高,FPGA应用领域已成可编程逻辑领域扩展到了高性能DSP、高性能嵌入式等领域。2(二)VHDL语言介绍VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Lang
4、uage,于1983年由美国国防部(DOD)发起创建,由IEEE(The Institute of Electrical and Engineers)进一步发展并在1987年作为“IEEE标准1076”发布,从此VHDL成为硬件描述语言的业界标准之一。至IEEE公司发布了VHDL语言标准版之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具支持VHDl。此后VHDL语言在电子设计领域的得到了广泛的应用,并逐步取代了原有的非标准硬件描述语言。VHDL语言作为一个规范语言和建模语言,具有和强的电路描述和建模能力,能从多个多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任
5、务,提高了设计效率和可靠性。VHDL具有与具体硬件无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述能力。用VHDL语言进行电子系统设计的最大优点是设计者专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。其具体的流程图如图4-2所示。图4-2 VHDL语言的设计流程五、电梯控制器的基本设计原理(一)电梯控制器的工作原理1、请求信号分析:电梯控制器的请求信号分为电梯内部请求和外部请求,如果从这角度就很难对电梯运行情况进行分析,因为电梯梯内梯外的请求是随机且不能以有限的规则去对进行说明的,因此本设计把电梯的请求信号划分为上升信号和下降信号。电梯收到请
6、求信号后,都必需做预操作。使电梯进入预上升状态的请求信号就是上升请求信号,具体来说就是当电梯所在楼层低于发出电梯外部请求的楼层或者低于楼内请求所要达到的目的楼层时,电梯必需在下一操作中上升,这时的请求信号就是上升信号。反之,则是下降信号。2、电梯处于各层时的情况:当电梯在一楼时,不管电梯内部还是外部,电梯只能收到上升请求信号,此时电梯进入预上升状态,准备上升,如果没有收到上升请求,则电梯待在一楼。如图5-1a所示。当电梯在二楼时,如电梯外部内部均没有收到任何请求,电梯将返回一楼待机;如电梯接收到上升请求信号,则进入预上升状态;如电梯接收到下降请求信号,电梯进入预下降状态。如图5-1b所示。当电
7、梯在三楼时,电梯只能接收到下降请求信号,此时电梯进入预下降状态,准备下降,没有收到请求信号则返回一楼。如图5-1c所示。图5-1a电梯处于一楼的情况分析图5-1b 电梯处于二楼的情况分析图5-1c 电梯处于三楼的情况分析对三个楼层的情况进行汇总,可得到如图5-2的状态图。 图5-2电梯运行状态图电梯运行过程中,还存在处理信号优先的问题,单纯的顺序优先或逻辑优先是不能满足控制要求的,因此采用随机逻辑的方式控制去解决信号优先的问题,即在顺序逻辑控制的基础上根据随机的信号输入,以及电梯的相应状态适时的控制电梯运行,如当电梯在三楼时,一楼、二楼均有上升请求,电梯则在二楼不停止,先直接到一楼接客。(二)
8、电梯控制器的设计本设计由3个模块组成:控制模块、楼层显示模块、电梯状态显示模块。电梯控制的结构框图如图5-3所示,电梯控制器的电路总图见附录1。 图5-3 电梯控制器整体框图1、控制模块控制模块如图5-4,该模块是整个程序的核心,设计思想是将电梯的状态分为四个状态:一层状态c1,二层状态c2,三层状态c3,开门状态kai,对每一个状态分析其所有可能。程序见附录1。图5-4控制模块端口up1,up2,down2,down3分别是电梯外部一层上升请求、二层上升请求、二层下降请求、三层下降请求。端口k1、k2、k3是电梯内部所要到达的楼层请求。端口clk为时钟信号。端口site3.1输出的是电梯所在
9、的楼层。端口mode输出的是电梯运行状态。端口door是电梯开门关门状态。3、楼层显示模块楼层显示模块如图5-5,该模块的主要功能是将电梯所在的楼层显示的信号转换成数码管显示信号。图5-5楼层显示模块端口a3.1输入的是电梯楼层信号。端口clk为时钟信号。端口p6.0为输出数码管显示信号。七段数码管显示的原理是:当a、b、c、d、e、f、g输入正电源时,对应的LED灯就会亮,如当b、c接入正电源时,数码管就的b、c所对应的LED灯亮,达到显示“1”的效果。数码管显示器的发光排列如图5-6.图5-6七段数码管4、电梯状态显示模块电梯状态显示模块图5-7译码显示模块端口clk为时钟输入信号。端口m
10、ode为电梯状态信号输入。端口sel3.0为输出sel信号。端口q0.15输出的是点阵显示信号。5、VHDL源代码语法的说明(1)本程序设计调用了ieee库,ieee库是VHDL设计中最为常用的库,它包含有ieee标准的程序包和其他一些支持工业标准的程序包。本设计采用std-logic-1164、std-logic-unsigned、std-logic-arith程序包。(2)以关键词entity引导,end entity threelift结尾的部分是程序的实体部分。VHDL的实体描述了电路器件的外部情况,本设计定义了关于三层电梯控制器用到的各类时钟、异步复位按键、信号灯指示端口、电梯的请求
11、端口。它描述了端口模式主要有in、buffer、out,以及各端口信号的数据类型主要有std-logic、std-logic-vector、integer。(3)以关键词architecture引导,end architecture one结尾的语句部分是结构体部分,结构体描述电路器件的内部逻辑功能。VHDL源代码见附录1七、参考文献1陈雪松,VHDL入门与应用.北京人民邮电出版社20002侯伯亨,VHDL硬件描述语言与数字逻设计.西安电子科技大学出版社20013臧春华,蒋璇.数字系统设计与PLD应用.北京电子工业出版社20094段吉海,数字通信系统建模与设计. 电子工业出版社20045程佩青
12、,数字信号处理教程.清华大学出版社2013附录1、VHDL源代码library ieee; -库的说明use ieee.std_logic_1164.all; -程序包的说明use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity threelift is -实体 port(buttonclk:in std_logic; -按键时钟信号 liftclk:in std_logic; -电梯时钟信号 reset:in std_logic; -异步复位端口 f1upbutton:in std_logic; -一层上升请求端
13、口 f2upbutton:in std_logic; -二层上升请求端口 f2dnbutton:in std_logic; -二层下降请求端口 f3dnbutton:in std_logic; -三层下降请求端口 stop1button:in std_logic; -一层停站请求端口 stop2button:in std_logic; -二层停站请求端口 stop3button:in std_logic; -三层停站请求端口 position:buffer integer range 1 to 3; -电梯位置信号 udsig:buffer std_logic; -电梯模式(上升或下降)信号
14、fuplight,fdnlight,stoplight:buffer std_logic_vector(3 downto 1); -上升、下降、停站请求寄存信号doorlight:out std_logic; -开关门信号 dout1:out std_logic_vector(3 downto 0); end entity threelift;architecture one of threelift is -结构体type lift_state is -定义十个状态(stopon1,dooropen,doorclose,doorwait1,doorwait2,doorwait3,doorwa
15、it4,up,down,stop);signal mylift:lift_state;signal clearup:std_logic; -上升和停站请求清除信号signal cleardn:std_logic; -下降和停站请求清除信号beginctrlift:process(reset,liftclk) -状态机进程variable pos:integer range 3 downto 1;beginif reset=1 then -异步复位,电梯的初始状态为一层开门状态 mylift=stopon1; clearup=0; cleardn doorlight=1; position=1;
16、 pos:=1; mylift mylift clearup=0; cleardn=0; mylift mylift mylift -关门,判定电梯下一个运行方式 doorlight=0; if udsig=1 then -电梯处在上升模式 if position=3 then if fuplight=000 and fdnlight=000 and stoplight=000 then -没有请求信号时,电梯停在当前层 udsig=0; mylift=doorclose; elsif fdnlight(3)=1 or stoplight(3)=1 then -本层有请求信号是,电梯开门 ud
17、sig=0; mylift=dooropen; else -否则下降 udsig=0; mylift=down; end if; elsif position=2 then if fuplight=000 and fdnlight=000 and stoplight=000 then udsig=1; mylift=doorclose;elsif fuplight(2)=1 or stoplight(2)=1 then -本层有上升或停站请求时时,电梯开门 udsig=1; mylift=dooropen; elsif fuplight=000 and stoplight=000 and fd
18、nlight=010 then -只有二层有下降请求时,电梯开门 udsig=0; mylift=dooropen; elsif stoplight(3)=1 or fdnlight(3)=1 then -三层有停站请求或下降请求,则上升 udsig=1; mylift=up; else udsig=0; mylift=down; end if; elsif position=1 then if fuplight=000 and fdnlight=000 and stoplight=000 then udsig=1; mylift=doorclose; elsif stoplight(1)=1
19、 or fuplight(1)=1 then udsig=1; mylift=dooropen; else udsig=1; mylift=up; end if; end if; elsif udsig=0 then -电梯处在下降模式 if position=3 then if fuplight=000 and fdnlight=000 and stoplight=000 then udsig=0; mylift=doorclose; elsif fdnlight(3)=1 or stoplight(3)=1 then udsig=0; mylift=dooropen; else udsig
20、=0; mylift=down; end if; elsif position=2 then if fuplight=000 and fdnlight=000 and stoplight=000 then udsig=0; mylift=doorclose; elsif fdnlight(2)=1 or stoplight(2)=1 then udsig=0; mylift=dooropen; elsif fdnlight=000 and stoplight=000 and fuplight=010 then udsig=1; mylift=dooropen; elsif fuplight(1
21、)=1 or stoplight(1)=1 then -一层有停站请求或上升请求,则下降 udsig=0; mylift=down; else udsig=1; mylift=up; end if; elsif position=1 then if fuplight=000 and fdnlight=000 and stoplight=000 then udsig=1; mylift=doorclose; elsif stoplight(1)=1 or fuplight(1)=1 then udsig=1; mylift=dooropen; else udsig=1; mylift -电梯处于
22、上升状态 position=position+1; -电梯楼层数加一 pos:=pos+1; if pos3 and (stoplight(pos)=1 or fuplight(pos)=1) then mylift=stop; -电梯在一层或二层,本层有停站或上升请求时,则停止 elsif pos=3 and (stoplight(pos)=1 or fdnlight(pos)=1) then mylift=stop;-电梯处在三层,并且有三层停站或下降请求,则停止 else mylift -电梯处在下降状态 position1 and (stoplight(pos)=1 and fdnli
23、ght(pos)=1) then mylift=stop; elsif pos=1 and (stoplight(pos)=1 or fuplight(pos)=1) then mylift=stop; else mylift mylift doorlight=1; if udsig=1 then if position3 and (fuplight(pos)=1 or stoplight(pos)=1) then clearup=1; -清除当前层上升和停站请求 else clearup=1; cleardn1 and (fdnlight(pos)=1 or stoplight(pos)=1
24、) then cleardn=1; -清除当前层下降和停站请求 else clearup=1; cleardn=1; end if; end if; mylift=doorwait1; end case; end if;end if;end process ctrlift;ctrlight:process(reset,buttonclk) -信号灯控制进程beginif reset=1 then -复位,寄存信号清零 fuplight=000; fdnlight=000; stoplight=000;else if buttonclkevent and buttonclk=1 then if
25、clearup=1 then -上升和停站请求清零 fuplight(position)=0; stoplight(position)=0; else if f1upbutton=1 then -记忆各层上升请求 fuplight(1)=1; elsif f2upbutton=1 then fuplight(2)=1; end if; end if; if cleardn=1 then -下降和停站请求清零 fdnlight(position)=0; stoplight(position)=0; else if f2dnbutton=1 then -记忆各层下降请求 fdnlight(2)=1
26、; elsif f3dnbutton=1 then fdnlight(3)=1; end if; end if; if stop1button=1 then -记忆各层停站请求 stoplight(1)=1; elsif stop2button=1 then stoplight(2)=1; elsif stop3button=1 then stoplight(3)=1; end if; end if;end if;end process ctrlight;process(position) -楼层显示进程beginif position=1 then dout1=0001;elsif position=2 then dout1=0010;elsif position=3 then dout1=0011;end if;end process;end architecture one; 附录2、三层电梯的电路总图
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1