电梯控制器Verilog语言.docx

上传人:b****5 文档编号:4287160 上传时间:2022-11-28 格式:DOCX 页数:29 大小:260.53KB
下载 相关 举报
电梯控制器Verilog语言.docx_第1页
第1页 / 共29页
电梯控制器Verilog语言.docx_第2页
第2页 / 共29页
电梯控制器Verilog语言.docx_第3页
第3页 / 共29页
电梯控制器Verilog语言.docx_第4页
第4页 / 共29页
电梯控制器Verilog语言.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

电梯控制器Verilog语言.docx

《电梯控制器Verilog语言.docx》由会员分享,可在线阅读,更多相关《电梯控制器Verilog语言.docx(29页珍藏版)》请在冰豆网上搜索。

电梯控制器Verilog语言.docx

电梯控制器Verilog语言

数字系统设计大作业

 

题目:

电梯控制器

 

姓名:

温庆

学号:

031241214

班级:

0312412

指导老师:

黄双林

 

数字系统设计大作业1

目录2

摘要2

正文4

1设计目的及要求4

2设计原理4

2.1设计实现原理4

2.2项目分块及其实现方案6

2.3电梯控制器的流程图7

3设计内容8

3.1基本状态设计8

3.2模块设计9

3.3波形仿真10

总结与致谢14

参考文献15

附录16

摘要

电梯作为垂直方向的交通工具,在高层建筑和公共场所已成为不可或缺的设备。

中国是全球最大的电梯市场,也具有最强的电梯生产能力,但由于缺乏自主知识产权和核心技术,自主品牌占市场的份额很少。

因此要加大对电梯技术的创新和发展,提升电梯的性能,就需要引进更好的技术,电梯控制器就是很好的装置,大力开发控制器是很必要的。

电梯的微机化控制主要有以下几种形式:

PLC控制;单片机控制;单板机控制;单微机控制;多微机控制;人工智能控制。

本次课程设计采用了EDA技术进行操作EDA技术打破了软件和硬件间的壁垒,使计算机的软件技术与硬件实现、设计效率与产品性能合二为一,它代表了电子设计技术和应用技术的发展方向。

本设计采用VerilogHDL语言的编程技术,源程序Altera公司的QuartusII软件仿真。

 

关键字:

EDA技术;VerilogHDL语言;QuartusII软件

正文

1设计目的及要求

1、进一步巩固理论知识,培养所学理论知识的在实际中的应用能力;掌握EDA设计的一般方法;熟悉一种EDA软件,掌握一般EDA系统的调试方法;利用EDA软件设计一个电子技术综合问题,培养VerilogHDL编程、书写技术报告的能力。

为以后进行工程实际问题的研究打下设计基础。

2、设计一个6层电梯控制器电路,用数码管显示电梯所在楼层号,电梯初始状态为第一楼层;每楼层电梯外都有上、下楼请求开关,电梯内设有乘客到达楼层的请求开关、电梯所处楼层、上升模式及下降模式的指示;电梯每2秒升降一层,到达有停站请求的楼层后,经4秒电梯门打开,开门指示灯亮,开门4秒后,指示灯灭,关门,关门时间3秒,电梯继续运行。

可以通过快速关门和关门中断信号控制;能记忆电梯内外的请求信号,当电梯处于上升模式时,只响应比电梯所在位置高的楼请求信号,直到最后一个上楼请求执行完毕,再进入下降模式。

2设计原理

2.1设计实现原理

根据系统设计要求,并考虑到系统的可检验性,整个系统的输入输出接口设计如图1所示:

系统工作用2Hz基准时钟信号CLKIN,楼层上升请求键UPIN,楼层下降请求键DOWNIN,楼层选择键入键ST_CH,提前关门输入键CLOSE,延迟关门输入键DELAY,电梯运行的开关键RUN_STOP,电梯运行或停止指示键LAMP,电梯运行或等待时间指示键RUN_WAIT,电梯所在楼层指示数码管ST_OUT,楼层选择指示数码管DIRECT。

DTKZQ

CLKINLAMP

UPIN

DOWNIN

ST_CH[1]RU_WAIT

CLOSEST_OUT

DELAYDIRECT

RUN_STOP

 

图1.电梯控制器DTKZQ的输入输出接口图

各输入端口的功能如下:

CLKIN:

基准时钟信号,为系统提供2Hz的时钟脉冲,上升沿有效;

UPIN:

电梯上升请求键。

由用户向电梯控制器发出上升请求。

高电平有效;

DOWNIN:

电梯下降请求键,由用户向电梯控制器发出下降请求。

高电平有效;

ST_CH[2..0]:

楼层选择键入键,结合DIRECT完成楼层选择的键入,高电平有效;

CLOSE:

提前关门输入键。

可实现无等待时间的提前关门操作,高电平有效;

DELAY:

延迟关门输入键。

可实现有等待时间的延迟关门操作,高电平有效;

RUN_STOP:

电梯运行或停止开关键。

可实现由管理员控制电梯的运行或停止,高电平有效。

一下为输出端口:

LAMP:

电梯运行或等待指示键,指示电梯的运行或等待状况。

高电平有效;

RUN_WAIT:

电梯运行或等待时间指示键,指示电梯运行状况或等待时间的长短,高电平有效;

ST_OUT:

电梯所在楼层指示数码管,只是电梯当前所在的楼层数。

即1~6层,高电平有效;

DIRECT:

楼层选择指示数码管,指示用户所要选择的楼层数,高电平有效。

2.2项目分块及其实现方案

电梯的控制状态包括运行状态﹑停止状态及等待状态,其中运行状态又包含向上状态和向下状态。

主要动作有开、关门,乘客可通过键入开、关门按键,呼唤按键,指定楼层按钮等来控制电梯的行与停。

据此,整个电梯控制器DTLZQ应包括如下几个组成部分:

①时序输出及楼选计数器;②电梯服务请求处理器;③电梯升降控制器;④上升及下降寄存器;⑤电梯次态生成器。

该电梯控制器设计的关键是确定上升及下降寄存器的置位与复位。

整个系统的内部组成结构图2所示。

图2.电梯控制器的内部组成结构图

图3.电梯控制器系统框图

2.3电梯控制器的流程图

 

图4总流程图

 

 

图5电梯控制主流程图

3设计内容

3.1基本状态设计

1、采用信号并置处理很多输入信号的方式:

always@(call_up_1orcall_up_2orcall_up_3orcall_up_4orcall_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_2orcall_down_3orcall_down_4orcall_down_5orcall_down_6)

down_all={call_down_6,call_down_5,call_down_4,call_down_3,call_down_2,1'b0};

//将各停靠请求信号实时地合并

always@(request_1orrequest_2orrequest_3orrequest_4orrequest_5orrequest_6)

request_all={request_6,request_5,request_4,request_3,request_2,request_1};

2、通过参数定义把信号并置的方法和有限状态机联系起来

parameterWAIT=7'b0000001,UP=7'b0000010,DOWN=7'b0000100,UPSTOP=7'b0001000,DOWNSTOP=7'b0010000,OPENDOOR=7'b0100000,CLOSEDOOR=7'b1000000;

//定义楼层的符号常量

parameterFLOOR1=6'b000001,FLOOR2=6'b000010,FLOOR3=6'b000100,FLOOR4=6'b001000,FLOOR5=6'b010000,FLOOR6=6'b100000;

parameterTRUE=1'b1,FALSE=1'b0;//定义门打开和门关闭的符号常量

parameterOPEN=1'b1,CLOSED=1'b0;//定义电梯上升,下降和静止的符号常量

parameterUPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00;

3、采用了七个状态实现了有限状态机

图6.状态转换图

黑线:

WAITTOUPTOUPSTOPTOOPENDOORTOCLOSEDOORTOWAIT

粉红线:

WAITTODOWNTODOWNSTOPTOOPENDOORTOCLOSEDOORTOWAIT

3.2模块设计

1、电梯主控制器模块elevator_controller:

此段智能电梯控制器由三个重要部分组成的。

(a)信号并置部分,完成对5路向上请求、5路向下请求、6路内部请求的信号并置,化繁为简。

(b)三段式有限状态机部分。

在有请求的情况下,电梯控制器还要根据电梯的当前状态和当前的楼层去判断电梯的下一步该如何运作。

(c)计数器部分。

完成电梯的开门、关门的时间管理。

图7.电梯主控模块

2、分频模块frequence_div:

这段分频器完成对50Mhz的1分频操作。

采用传统的“一半就翻转”的计数技巧。

图8.分频模块

3、数码管译码模块

3.3波形仿真

1、当电梯处于初始状态时,电梯在高层有向下的请求时:

图9

2、当电梯停在6楼处于等待状态时,在1楼和2楼同时有向上的请求时:

图10

3、当电梯停在1楼处于等待状态时,在6楼和5楼同时有向下的请求时:

图11

4、当电梯停在6楼时,有在5楼的向下的请求时,电梯应该先到五楼,电梯内部请求到1楼,如果电梯在下降的过程中,有在2楼的向上的请求时,电梯应该先相应内部请求,然后相应外部请求:

图12

5、电梯的强制运行按钮forbid:

图13

 

总结与致谢

通过本次课程设计进一步熟悉QuartusII软件的使用和操作方法,以及硬件实现时的下载方法与运行方法;对VerilogHDL语言的自顶向下设计方法有了进一步的认识,对其中的许多语句也有了新了解,掌握;对自己独立思考和解决问题的能力也有了很大的锻炼。

短暂的课程设计就要结束了,在此,感谢所有在学习和生活中给予我关心和帮助的人们。

首先我要感谢杨红娟、王涛两位位老师,本次课程设计设计的选题、课题调研与撰写工作实在和老师的指导下完成的。

和老师渊博的知识、严谨的治学态度、一丝不苟的工作作风、和不厌其烦的精神对我影响至深,使我受益终生,在此我向和老师表示崇高的敬意和衷心的感谢。

其次,在我的课程设计期间,同课题的同学都给予了我热情的帮助和无私的指导,在此向这些同学们表示衷心的感谢。

最后,向所有曾给予我关心和帮助的老师和同学们再次致以最衷心的感谢,向参加报告评审、答辩的老师表示衷心的感谢和崇高的敬意。

 

参考文献

[1]黄仁欣.EDA技术实用教程.北京:

清华大学出版社,2006

[2]潘松,黄继业.EDA技术与VHDL.北京:

清华大学出版社,2009

[3]江国强编著.EDA技术与应用(第三版)..北京:

电子工业出版社,2010

[4]夏宇闻编著.VerilogHDL数字系统设计教程..北京:

北京航空航天大学出版社,2008

[5]周祖成,程晓军,马卓钊编著.数字电路与系统教学实验教程.北京:

科学出版社,2010

[6]周润景,苏良碧.基于QuartusII的数字系统VerilogHDL设计实例详解.北京:

电子工业出版社,2010

[7](美国)SanirPalnitkar译者:

夏宇闻胡燕祥刁岚松.VerilogHDL数字设计与综合(第2版).北京:

电子工业出版社,2009

[8]云创工作室.VerilogHDL程序设计与实践.北京:

人民邮电出版社,2009

[9]刘福奇,刘波.VerilogHDL应用程序设计实例精讲.北京:

电子工业出版社,2009

[10]张延伟,杨金岩,葛爱学.veriloghdl程序设计实例详解.北京:

人民邮电出版社,2008

 

附录

1、分频模块

modulefrequence_div(cp_50M,cp_1);

inputcp_50M;//板子提供的最高时钟

outputcp_1;//要求得到的秒脉冲

reg[27:

0]counter_1;//计数器

regcp_1;//类型声明

always@(posedgecp_50M)

begin

if(counter_1==28'h17D7840)//50M的一半到了,秒脉冲翻转

begin

cp_1<=~cp_1;//翻转

counter_1<=28'h0000000;

end

else

counter_1<=counter_1+1'b1;//否则加1

end

endmodule

2、智能电梯主控制模块

moduleelevator_controller(//inputports:

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,

//outputports:

out,LiftState,over_alarm,count_out,count

);

//outputports:

output[6:

0]out;//输出楼层

output[6:

0]LiftState;//输出电梯状态

outputover_alarm;//出错

output[6:

0]count_out;//计数器输出,便于我控制开关门的状态显示

output[2:

0]count;//计数器

//inputports:

inputcp_50M;

inputclk,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,request_5,request_6;

inputforbid;

//pos与Posout的关系:

当前状态一改变,pos立即作相应改变,而PosOut则是当前状态在要变到下一状态的瞬间

//,将PosOut作相应改变。

如从WAIT切换到第一个UP时,pos立即加一,而PosOut则要等到第一个UP

//即将切换到第二个UP时,才加一。

//这个说的简单一点,就是移位寄存器,便于对电梯状态的实时的控制

wireover_alarm;

wire[6:

0]out;

wire[6:

0]count_out;

reg[5:

0]pos,PosOut;

reg[2:

0]count;//门开后要持续5个时钟周期,用count来计数

regDoorFlag;

reg[1:

0]UpDnFlag;

reg[6:

0]LiftState,NextState;//分别表示电梯的当前状态和下一状态

wirereal_clk;

//up_all,down_all,request_all分别用来合并向上请求的各信号,向下请求的各信号和停靠请求的各信号

//以便判断电梯在状态间如何转移时更简洁

reg[5:

0]up_all,down_all,request_all;

//定义电梯7种状态的符号常量

parameterWAIT=7'b0000001,UP=7'b0000010,DOWN=7'b0000100,UPSTOP=7'b0001000

DOWNSTOP=7'b0010000,OPENDOOR=7'b0100000,CLOSEDOOR=7'b1000000;

//定义楼层的符号常量

parameterFLOOR1=6'b000001,FLOOR2=6'b000010,FLOOR3=6'b000100,FLOOR4=6'b001000,FLOOR5=6'b010000,FLOOR6=6'b100000;

parameterTRUE=1'b1,FALSE=1'b0;

//定义门打开和门关闭的符号常量

parameterOPEN=1'b1,CLOSED=1'b0;

//定义电梯上升,下降和静止的符号常量

parameterUPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00;

assignreal_clk=(clk&(~forbid));

//采用屏蔽时钟的方法来实现“电梯强制禁止运行”。

方法虽然违反了“同步电路最好

//没有时钟门控”的要求,但是在此只要“负面影响”不是很大还是可以接受的。

//将各上升请求信号实时地合并(6楼为顶层,无上升请求,考虑到通用性,将第4位填零)

always@(call_up_1orcall_up_2orcall_up_3orcall_up_4orcall_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_2orcall_down_3orcall_down_4orcall_down_5orcall_down_6)

down_all={call_down_6,call_down_5,call_down_4,call_down_3,call_down_2,1'b0};

//将各停靠请求信号实时地合并

always@(request_1orrequest_2orrequest_3orrequest_4orrequest_5orrequest_6)

request_all={request_6,request_5,request_4,request_3,request_2,request_1};

always@(posedgereal_clkorposedgereset)

if(reset)

count<=0;

elseif((NextState==OPENDOOR)&&(count<5))//orelseif(NextState==OPENDOOR)

count<=count+1;//如果计数不到5且下一状态为OPENDOOR的话,继续计数

else

count<=0;//清零,以备下次计数

//displaywhichfloortheelevatoris....

display_decodeh1(cp_50M,PosOut,out,over_alarm);

display_decode_counth2(cp_50M,count,count_out);

//finitestatemachineinthestyleofthreesegments,三段式

//1stStateShiftalwaysblock,sequentialstatetransition,有限状态机第一段

always@(posedgereal_clkorposedgereset)

if(reset)

begin

LiftState<=WAIT;

end

else

LiftState<=NextState;

//2ndStateShiftalwaysblock,combinationalconditionjudgement,有限状态机第二段

always@(LiftStateorup_allordown_allorrequest_allorposorcountorUpDnFlag)

case(LiftState)

WAIT:

begin

if(request_all>0)//有停靠请求否

begin

if((request_all&pos)>0)//停靠请求中有当前楼层停靠请求否

NextState=OPENDOOR;//有当前楼层请求,则下一状态转开门

elseif(request_all>pos)//有当前楼层之上的停靠请求否(优先向上的请求)

NextState=UP;//有则,下一状态转上升

else

NextState=DOWN;//只有当前楼层之下的停靠请求,下一状态转下降

end

elseif((up_all&pos)||(down_all&pos))//上下请求中有当前楼层请求否

begin

NextState=OPENDOOR;

end

elseif((up_all>pos)||(down_all>pos))//上下请求中有当前楼层之上的请求否

NextState=UP;

elseif(up_all||down_all)//上下请求中有当前楼层之下的请求否

NextState=DOWN;

else

NextState=WAIT;//无任何请求,继续处于WAIT模式

end

UP:

begin

if((request_all&pos)||(up_all&pos))//停靠或上升请求中有当前楼层的请求否

NextState=UPSTOP;//有,下一状态转为UPSTOP(停靠后要1s才开门,UPSTOP即为这1s的过渡期)

elseif((request_all>pos)||(up_all>pos))//停靠或上升请求中有当前楼层之上的请求否

NextState=UP;

elseif(down_all>0)//有下降请求否

begin

if((down_all>pos)&&((down_all^pos)>pos))//下降请求中有当前楼层的请求否

NextState=UP;

elseif((down_all&pos)||(pos

NextState=UPSTOP;

elseif((down_all&pos)&&(pos==FLOOR6))//事实上不满足第一条件的话,电梯根本不会到达第四层

NextState=DOWNSTOP;

else//下降请求中只有当前楼层之下的请求

NextState=DOWN;

end

elseif(request_all||up_all)//只有当前楼层之上的停靠或上升请求否

NextState=DOWN;

else

NextState=WAIT;//无任何请求,转为WAIT模式

end

//DOWN的状态转移请参见UP的状态转移

DOWN:

begin

if((request_all&pos)||(down_all&pos))

NextState=DOWNSTOP;

elseif(((request_all&FLOOR1)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1