基于vhdl四层电梯控制器设计说明书.doc_第1页
基于vhdl四层电梯控制器设计说明书.doc_第2页
基于vhdl四层电梯控制器设计说明书.doc_第3页
基于vhdl四层电梯控制器设计说明书.doc_第4页
基于vhdl四层电梯控制器设计说明书.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,实验目的1、掌握更复杂的VHDL设计。2、掌握状态机设计方法。2,实验原理电梯控制器的功能模块如下图所示,包括主控制器、分控制器、楼层选择器、状态显示器、译码器和楼层显示器。乘客在电梯中选择所要到达的楼层,通过主控制器的处理,电梯开始运行,状态显示器显示电梯的运行状态,电梯所在楼层数通过译码器译码从而在楼层显示器中显示。分控制器把有效的请求传给主控制器进行处理,同时显示电梯的运行状态和电梯所在楼层数。由于分控制器相对简单很多,所以主控制器是核心部分。状态显示器主控制器楼层选择器分控制器译码器楼层显示器 图2-1电梯控制器原理图外部按键请求信号寄存器状态寄存器内部软件执行机构外部硬件执行机构图2-2 总流程图初始化判定电梯运行方向是否有请求?等待电梯运行楼层检测否电梯停止目标层与本层是否同层?是是否目标层?开门延时关门是否停止运行?是否是否是否停止图23 电梯控制主流程图2.1,四层电梯控制器实现的功能及运行规则电梯一层入口处设有上升请求开关,二三层入口处设有上、下请求开关,四层入口处设有下降请求开关,电梯内部设有顾客到达楼层的停站请求开关。每层电梯入口处设有位置指示装置及电梯运行模式 (上升或下降)指示装置。电梯初始状态为一层开门状态。电梯每秒上升(下降)一层楼。电梯到达需要停止的楼层,经过1秒电梯门打开,开门指示灯亮,开门4秒后,电梯门关闭(开门指示灯灭),电梯继续运行,直至执行完最后一个请求信号后停留在当前层。电梯需要寄存器来记忆电梯内外所有请求,并按照电梯运行规则按顺序响应,每个请求信号保留至执行后消除。电梯的运行规则:当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号和停站请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕;如果高层有下楼请求,则直接上升到有下楼请求的最高层,然后进入下降模式。当电梯处于下降模式时则与上升模式相反。2.2,四层电梯控制器的设计思路电梯控制器设计两个进程相互配合,状态机进程作为主要进程,信号灯控制进程作为辅助进程。根据电梯的实际工作情况,可以为状态机设置十个状态,它们分别是“电梯停在一层”“开门”“关门”“开门等待第一秒”“开门等待第二秒”“开门等待第三秒”“开门等待第四秒”“上升”“下降”和“停止”。由于电梯每秒上升或下降一层,则可以用周期为1s的信号来作为电梯状态转换的触发时钟。状态机进程中的很多判断条件是以信号灯控制进程产生的信号灯信号为依据,而信号灯控制进程中信号灯的熄灭又是由状态机进程中传出的信号来控制。四层电梯控制器的设计主要是对实体和结构体的设计,它的VHDL描述模块流程如图2-2-1所示:元件库的说明定义实体结构体端口状态机进程信号灯控制进程结束按键信号灯图2-2-1 四层电梯控制器的VHDL描述模块流程3,VHDL源代码说明library IEEE; -库的说明use IEEE.std_logic_1164.all; -程序包的说明use IEEE.std_logic_unsigned.all;use IEEE.std_logic_arith.all; -(arith)entity fourlift is -实体名称fourlift port(clk1:in std_logic; -按键读取时钟信号 clk2:in std_logic; -led_7数码管显示扫描时钟信号 reset:in std_logic; -异步复位端口close:in std_logic;-关门请求 f1upbutton:in std_logic; -一层上升请求端口 f2upbutton:in std_logic; -二层上升请求端口 f2dnbutton:in std_logic; -二层下降请求端口 f3dnbutton:in std_logic; -三层下降请求端口 f3upbutton:in std_logic; -三层上升请求端口 f4dnbutton:in std_logic;-四层下降请求端口 stop1button:in std_logic; -一层停站请求端口 stop2button:in std_logic; -二层停站请求端口 stop3button:in std_logic; -三层停站请求端口 stop4button:in std_logic;-四层停站请求端口 stair:buffer integer range 1 to 4; -电梯位置信号 udsig:buffer std_logic; -电梯运行模式(上升1或下降0 fuplight,fdnlight,stoplight:buffer std_logic_vector(4 downto 1); -上升、下降、停站请求寄存信号doorlight:out std_logic; -开门状态 (1为开门状态) dout:out std_logic_vector(6 downto 0); - 数码管显示楼层段码s:out std_logic_vector(2 downto 0); -数码管显示楼层位码end entity fourlift;architecture chi of fourlift is -结构体type lift_state is -定义十个状态(stop_on_1,door_open,door_close,door_wait1,door_wait2,door_wait3,door_wait4,up,down,stop);signal state:lift_state;signal clr_up:std_logic; -上升和停站请求清除信号signal clr_dn:std_logic; -下降和停站请求清除信号signal q:std_logic_vector(3 downto 0); -分频进程中需要的信号signal buttonclk,liftclk:std_logic; -分频后的电梯时钟和按键读取控制时钟beginclklift:process(clk1) -分频产生电梯控制时钟liftclk和按键读取控制时钟buttonclk begin if (clk1event and clk1=1) then if q=1111 then q=0000;elseq=q+1;end if; end if; buttonclk=q(0); liftclk=q(3); end process clklift;statelift:process(reset,liftclk) -状态机进程variable position:integer range 4 downto 1;beginif reset=1 then -异步复位,电梯的初始状态为一层开门状态 state=stop_on_1; clr_up=0; clr_dn doorlight=1; -开门 stair=1; position:=1; state clr_up=0; clr_dn=0;if(close=1) then state=door_close;-如果有关门信号,则转至关门状态elsestate if(close=1) then state=door_close; elsestateif(close=1) then state=door_close;else state state -关门,判定电梯下一个运行方式 doorlight=0; if udsig=1 then -电梯处在上升模式 if stair=4 then if fuplight=0000 and fdnlight=0000 and stoplight=0000 then -没有请求信号时,电梯停 在当前层 udsig=0; state=door_close;elsif fdnlight(4)=1 or stoplight(4)=1 then -本层有请求信号时,电梯开门 udsig=0;- 转为下降 state=door_open;else -否则下降 udsig=0; state=down;end if; elsif stair=3 then if fuplight=0000 and fdnlight=0000 and stoplight=0000 then udsig=1; state=door_close;elsif fuplight(3)=1 or stoplight(3)=1 then -本层有上升或停站请求时,电梯开门 udsig=1; state=door_open; elsif fuplight=0000 and stoplight=0000 and fdnlight=0100 then -只有3层有下降请求时,电梯开门 udsig=0; state=door_open; elsif stoplight(4)=1 or fdnlight(4)=1 then -4层有停站请求或下降请求,则上升 udsig=1; state=up; else udsig=0; state=down; end if; elsif stair=2 then if fuplight=0000 and fdnlight=0000 and stoplight=0000 then udsig=1; state=door_close;elsif fuplight(2)=1 or stoplight(2)=1 then -本层有上升或停站请求时,电梯开门 udsig=1; state=door_open; elsif fuplight=0000 and stoplight=0000 and fdnlight=0010 then -只有2层有下降请求时,电梯开门 udsig=0; state=door_open; elsif stoplight(4)=1 or fdnlight(4)=1 or stoplight(3)=1 or fdnlight(3)=1 or fuplight(3)=1 then -4层有停站请求或下降请求,则上升 udsig=1; state=up; else udsig=0; state=down; end if; elsif stair=1 then if fuplight=0000 and fdnlight=0000 and stoplight=0000 then udsig=1; state=door_close; elsif stoplight(1)=1 or fuplight(1)=1 then udsig=1; state=door_open; else udsig=1; state=up; end if; end if; elsif udsig=0 then -电梯处在下降模式 if stair=4 then if fuplight=0000 and fdnlight=0000 and stoplight=0000 then udsig=0; state=door_close; elsif fdnlight(4)=1 or stoplight(4)=1 then udsig=0; state=door_open; else udsig=0; state=down; end if; elsif stair=3 then if fuplight=0000 and fdnlight=0000 and stoplight=0000 then udsig=0; state=door_close; elsif fdnlight(3)=1 or stoplight(3)=1 then udsig=0; state=door_open; elsif fdnlight=0000 and stoplight=0000 and fuplight=0100 then udsig=1; state=door_open; elsif fuplight(1)=1 or stoplight(1)=1 or fuplight(2)=1 or fdnlight(2)=1 or stoplight(2)=1 then -一层有停站请求或上升请求,则下降 udsig=0; state=down; else udsig=1; state=up; end if; elsif stair=2 then if fuplight=0000 and fdnlight=0000 and stoplight=0000 then udsig=0; state=door_close; elsif fdnlight(2)=1 or stoplight(2)=1 then udsig=0; state=door_open; elsif fdnlight=0000 and stoplight=0000 and fuplight=0010 then udsig=1; state=door_open; elsif fuplight(1)=1 or stoplight(1)=1 then -一层有停站请求或上升请求,则下降 udsig=0; state=down; else udsig=1; state=up; end if; elsif stair=1 then if fuplight=0000 and fdnlight=0000 and stoplight=0000 then udsig=1; state=door_close; elsif stoplight(1)=1 or fuplight(1)=1 then udsig=1; state=door_open; else udsig=1; state -电梯处于上升状态 stair=stair+1; -电梯楼层数加一 position:=position+1; if position4 and (stoplight(position)=1 or fuplight(position)=1) then state=stop; -电梯在1 2 3 层,本层有停站或上升请求时,则停止 elsif position=4 and (stoplight(position)=1 or fdnlight(position)=1) then state=stop; -电梯处在4层,并且有4层停站或下降请求,则停止 else state -电梯处在下降状态 stair1 and (stoplight(position)=1 and fdnlight(position)=1) then state=stop; elsif position=1 and (stoplight(position)=1 or fuplight(position)=1) then state=stop; else state state doorlight=1; if udsig=1 then if stair4 and (fuplight(position)=1 or stoplight(position)=1) then clr_up=1; -清除当前层上升和停站请求 else clr_up=1; clr_dn1 and (fdnlight(position)=1 or stoplight(position)=1) then clr_dn=1; -清除当前层下降和停站请求 else clr_up=1; clr_dn=1; end if; end if; state=door_wait1; end case; end if;end if;end process statelift;ctrlight:process(reset,buttonclk) -信号灯控制进程beginif reset=1 then -复位,寄存信号清零 fuplight=0000; fdnlight=0000; stoplight=0000;else if buttonclkevent and buttonclk=1 then if f1upbutton=1 then -记忆各层上升请求 fuplight(1)=1; end if; if f2upbutton=1 then fuplight(2)=1; end if; if f3upbutton=1 thenfuplight(3)=1;end if; if clr_up=1 then -上升和停站请求清零 fuplight(stair)=0; stoplight(stair)=0; end if; if f2dnbutton=1 then -记忆各层下降请求 fdnlight(2)=1; end if; if f3dnbutton=1 then fdnlight(3)=1; end if; if f4dnbutton=1 thenfdnlight(4)=1; end if; if clr_dn=1 then -下降和停站请求清零 fdnlight(stair)=0; stoplight(stair)=0; end if; if stop1button=1 then -记忆各层停站请求 stoplight(1)=1; end if; if stop2button=1 then stoplight(2)=1; end if; if stop3button=1 then stoplight(3)=1; end if; if stop4button=1 thenstoplight(4)=1; end if; end if;end if;end process ctrlight;showlift:process(stair,clk2) -楼层显示进程begins=000;if stair=1 then dout=0110000;elsif stair=2 then dout=1101101;elsif stair=3 then dout=1111001;elsif stair=4 then dout=0110011;end if;end process showlift;end architecture chi;4,四层电梯控制器的仿真在波形仿真中,根据实际,我们有必要做一些假设,即是:外部请求上升的乘客,进入电梯后一定是按更高层的停站按钮;外部请求下降的乘客,进入电梯后一定是按更低层的停站按钮;如果有乘客进入电梯,则一定有停站请求;同一时刻有很多人按键的概率很小,所以我们认为请求信号都有一定的先后顺序。设定仿真时间长度为60s,liftclk信号为周期1s的时钟信号,buttonclk信号为周期0.1s的时钟信号。doorlight信号逻辑1表示开门,逻辑0表示关门。udsig信号为逻辑1表示电梯处在上升模式,逻辑0表示处在下降模式。fuplight,fdnlight,stoplight是四位二进制向量,波形图中的0001表示一层有请求,0010表示二层有请求,0100表示三层有请求,1000表示四层有请求。图4-1所示的波形是在一层有上升请求的仿真波形,在reset信号产生一个脉冲时,电梯回复初始状态,即stopon_1状态,然后等待4s,关门检测没有请求信号,于是电梯此时停在一层。当电梯时钟上升沿检测到一层上升请求信号fuplight(1)为1时,电梯开门,fuplight(1)清零,等待4s,关门检测到二层停站请求,于是电梯上升到二层停止,开门stoplight(2)清零,stair信号由001变为010,电梯最终停在二层。 图4-1 有上升请求的仿真波形 图4-2所示的波形是三层有下降请求的波形,当电梯在一层关门后,检测到fdnlight为“0100”,则上升到三层,开门等待4s,关门检测到stoplight为0001,于是电梯下降到一层,最终停在一层。 图4-2 有下降请求的仿真波形 图4-3所示的波形为有多个停站请求的仿真波形,电梯在一层关门后,检测到stoplight为“0110”,则上升至二层停止开门,stoplight(2)清零,等待4s后关门,继续上升至三层,开门后stoplight(3)清零,乘客下站后电梯最终停在三层。 图4-3 有多个停站请求的仿真波形从前面所有的仿真波形来看,电梯的的运行情况完全符合它的运行规则,电梯的位置变化合情合理。5,心得体会这次课程设计,我掌握了VHDL语言的基本语法,熟悉了QuartusII的VHDL文本设计流程全过程,经过多次改进,本设计实现了四层电梯的基本功能,电梯的的运行情况完全符合它的运行规则,电梯的位置变化合情合理。本次四层电梯控制器的设计采用VHDL语言,源程序经Quartus II软件仿真,目标器件选用CPLD器件。本设计代码具有良好的可读性和可移植性,运用了有限状态机的设计方法,使得它可靠性高、灵活、简单、运算速度快。参考文献潘松,黄继业,EDA技术使用教程,科学出版社 谭会生,EDA,西安电子电子科技大学出版社,2004年 陈新华,EDA技术与应用,机械工业出版社 16大学本科生毕业设计(论文)撰写规范本科生毕业设计(论文)是学生在毕业前提交的一份具有一定研究价值和实用价值的学术资料。它既是本科学生开始从事工程设计、科学实验和科学研究的初步尝试,也是学生在教师的指导下,对所进行研究的适当表述,还是学生毕业及学位资格认定的重要依据。毕业论文撰写是本科生培养过程中的基本训练环节之一,应符合国家及各专业部门制定的有关标准,符合汉语语法规范。指导教师应加强指导,严格把关。1、论文结构及要求论文包括题目、中文摘要、外文摘要、目录、正文、参考文献、致谢和附录等几部分。1.1 题目论文题目应恰当、准确地反映论文的主要研究内容。不应超过25字,原则上不得使用标点符号,不设副标题。1.2 摘要与关键词1.2.1 摘要本科生毕业设计(论文)的摘要均要求用中、英两种文字给出,中文在前。摘要应扼要叙述论文的研究目的、研究方法、研究内容和主要结果或结论,文字要精炼,具有一定的独立性和完整性,摘要一般应在300字左右。摘要中不宜使用公式、图表,不标注引用文献编号,避免将摘要写成目录式的内容介绍。1.2.2 关键词关键词是供检索用的主题词条,应采用能覆盖论文主要内容的通用技术词条(参照相应的技术术语标准),一般列35个,按词条的外延层次从大到小排列,应在摘要中出现。1.3 目录目录应独立成页,包括论文中全部章、节的标题及页码。1.4 论文正文论文正文包括绪论、论文主体及结论等部分。1.4.1 绪论绪论一般作为论文的首篇。绪论应说明选题的背景、目的和意义,国内外文献综述以及论文所要研究的主要内容。文管类论文的绪论是毕业论文的开头部分,一般包括说明论文写作的目的与意义,对所研究问题的认识以及提出问题。绪论只是文章的开头,不必写章号。毕业设计(论文)绪论部分字数不多于全部论文字数的1/4。1.4.2 论文主体论文主体是论文的主要部分,要求结构合理,层次清楚,重点突出,文字简练、通顺。论文主体的内容要求参照大学本科生毕业设计(论文)的规定第五章。论文主体各章后应有一节“本章小结”。1.4.3 结论结论作为单独一章排列,但不加章号。结论是对整个论文主要成果的归纳,要突出设计(论文)的创新点,以简练的文字对论文的主要工作进行评价,一般为4001 000字。1.5 参考文献参考文献是论文不可缺少的组成部分,它反映了论文的取材来源和广博程度。论文中要注重引用近期发表的与论文工作直接有关的学术期刊类文献。对理工类论文,参考文献数量一般应在15篇以上,其中学术期刊类文献不少于8篇,外文文献不少于3篇;对文科类、管理类论文,参考文献数量一般为1020篇,其中学术期刊类文献不少于8篇,外文文献不少于3篇。在论文正文中必须有参考文献的编号,参考文献的序号应按在正文中出现的顺序排列。产品说明书、各类标准、各种报纸上刊登的文章及未公开发表的研究报告(著名的内部报告如PB、AD报告及著名大公司的企业技术报告等除外)不宜做为参考文献引用。但对于工程设计类论文,各种标准、规范和手册可作为参考文献。引用网上参考文献时,应注明该文献的准确网页地址,网上参考文献不包含在上述规定的文献数量之内。1.6 致谢对导师和给予指导或协助完成论文工作的组织和个人表示感谢。内容应简洁明了、实事求是,避免俗套。1.7 附录如开题报告、文献综述、外文译文及外文文献复印件、公式的推导、程序流程图、图纸、数据表格等有些不宜放在正文中,但有参考价值的内容可编入论文的附录中。2、论文书写规定2.1 论文正文字数理工类 论文正文字数不少于20 000字。文管类 论文正文字数12 00020 000字。其中汉语言文学专业不少于7 000字。外语类 论文正文字数8 00010 000个外文单词。艺术类 论文正文字数3 0005 000字。2.2 论文书写本科生毕业论文用B5纸计算机排版、编辑与双面打印输出。论文版面设置为:毕业论文B5纸、纵向、为横排、不分栏,上下页边距分别为2.5cm和2cm,左右页边距分别为2.4cm和2cm,对称页边距、左侧装订并装订线为0cm、奇偶页不同、无网格。论文正文满页为29行,每行33个字,字号为小四号宋体,每页版面字数为957个,行间距为固定值20磅。页眉。页眉应居中置于页面上部。单数页眉的文字为“章及标题”;双数页眉的文字为“大学本科生毕业设计(论文)”。页眉的文字用五号宋体,页眉文字下面为2条横线(两条横线的长度与版芯尺寸相同,线粗0.5磅)。页眉、页脚边距分别为1.8cm和1.7cm。页码。页码用小五号字,居中标于页面底部。摘要、目录等文前部分的页码用罗马数字单独编排,正文以后的页码用阿拉伯数字编排。2.3 摘要中文摘要一般为300字左右,外文摘要应与中文摘要内容相同,在语法、用词和书写上应正确无误,摘要页勿需写出论文题目。中、外文摘要应各占一页,编排装订时放置正文前,并且中文在前,外文在后。2.4 目录目录应包括论文中全部章节的标题及页码,含中、外文摘要;正文章、节题目;参考文献;致谢;附录。正文章、节题目(理工类要求编写到第3级标题,即.。文科、管理类可视论文需要进行,编写到23级标题。)2.5 论文正文2.5.1 章节及各章标题论文正文分章、节撰写,每章应另起一页。各章标题要突出重点、简明扼要。字数一般在15字以内,不得使用标点符号。标题中尽量不用英文缩写词,对必须采用者,应使用本行业的通用缩写词。2.5.2 层次层次以少为宜,根据实际需要选择。层次代号格式见表1和表2。表1 理工类论文层次代号及说明层次名称示 例说 明章第1章 章序及章名居中排,章序用阿拉伯数字节1.1 题序顶格书写,与标题间空1字,下面阐述内容另起一段条1.1.1 款1.1.1.1 题序顶格书写,与标题间空1字,下面阐述内容在标题后空1字接排项 (1) 题序空2字书写,以下内容接排,有标题者,阐述内容在标题后空1字 版心左边线 版心右边线表2 文管类论文层次代号及说明章节条款项一、 (一) 1. (1)居中书写空2字书写空2字书写空2字书写空2字书写 版心左边线 版心右边线各层次题序及标题不得置于页面的最后一行(孤行)。2.6 参考文献正文中引用文献标示应置于所引内容最末句的右上角,用小五号字体。所引文献编号用阿拉伯数字置于方括号“ ”中,如“

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论