完整word版Verilog语言设计电梯控制器文档docx.docx

上传人:b****4 文档编号:6994002 上传时间:2023-05-10 格式:DOCX 页数:49 大小:25.25KB
下载 相关 举报
完整word版Verilog语言设计电梯控制器文档docx.docx_第1页
第1页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第2页
第2页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第3页
第3页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第4页
第4页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第5页
第5页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第6页
第6页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第7页
第7页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第8页
第8页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第9页
第9页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第10页
第10页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第11页
第11页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第12页
第12页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第13页
第13页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第14页
第14页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第15页
第15页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第16页
第16页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第17页
第17页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第18页
第18页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第19页
第19页 / 共49页
完整word版Verilog语言设计电梯控制器文档docx.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

完整word版Verilog语言设计电梯控制器文档docx.docx

《完整word版Verilog语言设计电梯控制器文档docx.docx》由会员分享,可在线阅读,更多相关《完整word版Verilog语言设计电梯控制器文档docx.docx(49页珍藏版)》请在冰点文库上搜索。

完整word版Verilog语言设计电梯控制器文档docx.docx

完整word版Verilog语言设计电梯控制器文档docx

 

1)、需求分析;

1、问题描述与要求:

用Verilig语言设计一个电梯控制器,通过实验板对设计进行演示;

 

要求楼层的高度大于等于6,并且所设计的电梯调度算法满足提高服务质量、降低运行成本的原则。

BACK

2)、系统描述;

1、设定电梯控制器适用的楼层为8层.

2、在电梯的内部有一个控制面板,它负责按下请求到的楼层,并且显示当前尚未完成的目的地

请求,当到达该楼层以后自动撤销本楼层的请求,即将面板灯熄灭.

3、除1层和7层分别只有上/下按钮外,每个楼层(电梯门口旁)的召唤面板都有两个按钮,

分别指示上楼和下楼请求。

当按下后,对应按钮灯亮。

如果电梯已经到达该楼层,按钮灯熄

灭。

4、电梯的外部面板会显示电梯当前所在的楼层,及上行还是下行(暂停显示刚才运行时的状态).当电梯在运行时,对应的楼层灯间固定显示一段时间进入下一楼层;在暂停时,灯一直在该楼层保持亮的状态。

5、电梯调度方案:

电梯向一个方向运行时,只对本方向前方的请求进行应答,直到本方向前

方无请求时,才对反方向的请求进行应答。

当前内部控制面板上有的请求,只要经过所在楼层

均会立即响应.在所有内部外部请求都已完成后,电梯转入等待。

 

电梯模型:

(如下附图)

 

第7层

 

第6层

 

第5层

 

第4层

 

第3层

 

第2层

 

第1层

 

电梯内部的控制面板,

 

显示信息有:

电梯当前的位置和电梯

当前的运行方向(上\下),以及请

求到达的楼层

控制信息有:

请求要到达的目的楼层

 

电梯

 

每楼层的召唤按钮面板,

显示信息有:

当前电梯所

在位置(楼层)和电梯的

运行方向(上\下)

控制信息:

使用电梯的请

求(向上或向下)

 

BACK

************************************************************

3)、算法设计;

1、电梯基本组成部分及其实现:

(1)FLOOR:

记录电梯所处楼层的记数器.

用模8计数器实现,由001~111的加减记数来表示电梯所在楼层的变化.

(2)RB:

电梯运行状态寄存器组.

用一位寄存器来表示电梯当前是运行还是暂停,再用一位寄存器表示当前或刚才的运行方向,

这样就可以在电梯停止时也可以判断电梯刚才的状态,从而确定下个时刻电梯的后续方向.对

于FLOOR,我们通过三个LED显示.

(3)RC:

电梯目的地信息寄存器,记录电梯还有哪些要去楼层的任务.

每个楼层对应一个状态触发器,同时控制一个LED显示.

(4)RD:

各个楼层召唤信息寄存器,它记录了各楼层还有哪些向上向下的请求.

 

每个楼层对应两个状态触发器,同时控制两个LED显示向上向下请求.

(5)CALL:

电梯各个楼层的召唤面板,用户通过它发出向上向下的请求;

(6)DESTINATION:

电梯目的地指定命令面板,用户通过它申请要去的楼层;

(7)CONTRAL:

电梯的集中控制器。

 

2、电梯控制基本结构图:

 

CALL

LED

 

LEDRDFLOOR

 

CONTROL

 

LED

RC

RB

 

DESTINATIONLED

N

 

3、电梯工作过程的具体描述:

a)、当电梯开始启动的时候,将当前所处的楼层置为第一层,电梯为暂停状态,方向向上,

然后等待控制器的调度.

b)、等待过程当中(FLOOR保持在该楼层),首先检测RC和RD,判断当前楼层(第i层)以上的楼层是否发出召唤或者已经有人已经发请求,若有则向上运行;否则以同样的方法判

 

断是否向下运行;若不向下运行则重复等待状态.

保持原状态循环进行2操作直到检测到有向上或向下的任务.

c)、若已经判明要向上运行,则首先使RB中的运行/暂停触发器置为运行,且标志向上运行,

控制LED在该楼层亮T1时间后将所在楼层加1,这时新的当前楼层(第i+1层)灯亮起,接

着电梯检索RC和RD,判断当前楼层是否发出向上召唤或者已经有人已经发出目的地为第i+1层的请求,若有则在第i+1层停靠;否则检索RC和RD,判断第i+1层以上的楼层是否发出

召唤或者已经有人已经发出目的地为第i+1层以上的请求,若有则向上运行;否则(必定是有第i+1层向下的请求)在第i+1层.若不在当前的第i+1层停靠,就使灯闪烁,继续3中开始的操作.如果停靠就修改运行状态为停止,撤销所在楼层的召唤请求和目的地任务,接受

用户的目的地请求,控制电梯在T2时间后电梯进入2中的等待状态.

注释:

、只要不是当前暂停在的楼层的用户发出的召唤命令都存入RD,以供控制器检索和

判断.

、只要不是当前暂停在的楼层的用户发出的目的地请求都存入RC,供运行过程当中

控制器的检索和判断。

BACK

************************************************************

 

4、电梯控制流程图:

 

开始

 

初始化电梯状

态和控制信息

 

等待

 

NO

所在i层以上有召唤

或有电梯内面板目

的地?

 

YES

 

向上运行;

i?

i+1

更新状态信息

 

NO

第i层为电梯目的地

或第i层有向上请求

?

所在i层以上有召唤YES

YES

或有电梯内面板目

的地?

在第i层停;

NO

乘客上下电梯

更新状态信息

 

NO

所在i层以下有召唤

或有电梯内面板目

的地?

YES

 

向下运行;

i?

i-1

更新状态信息

 

第i层为电梯目的地NO

或第i层有向下请求

?

所在i层以下有召唤

或有电梯内面板目

YES

YES

在第i层停;NO

乘客上下电梯

更新状态信息

 

BACK

*********************************************************

5、系统控制器ASM图:

 

Reset=0

ASM图

s00000

 

rst=1

 

s10001

ce=1;rst=0;

ce_Count=0;

Sel_Count=00;

s20010

no

ce=1;

K1?

ce_Count=0;

Sel_Count=01;

no

yes

s3

K2?

0011

yes

up_d=0;

s9

stop_r=1;1001

ce=0;

up_d=1;

stop_r=1;

ce=0;

s40100

ce_Count=1;

s10

1010

ce_Count=1;

 

s50101

s11

ce_Count=0;

inc_Floor=1;

ce_Count=0;

red_Floor=1;

 

s6

0110

s12

inc_Floor=0;

red_Floor=0;

sel_Con=10;

sel_Con=11;

 

s70111

no

K3?

sel_Con=00;K4?

 

yes

 

yes

K1?

 

s81000s14no

ce=1;

ce=1;

stop_r=0;

stop_r=0;

ce_Count=1

ce_Count=1

 

1011

 

1100

 

s1311

no

sel_Con=01;

 

yes

 

K2?

 

no

1110

 

BACK

************************************************************

4)、硬件实现;

 

为了更好地实现电梯的功能我们将其划分为数据处理单元和控制单元。

控制器通过

control模块实现它统一向其它各个模块发出控制信号,并且接收condition和counter模块

的反馈信号,使得个子运算按照算法设计中的顺序有序的进行,在S0~S14的状态之间进行

 

合理的跳转,从而完成电梯的各项逻辑功能。

下面分别简述使用verilog语言实现的各个模块的功能及其接口。

(1)、destination:

该模块是为了描述电梯内的目的请求的记录和撤销。

input:

set_dest:

当按下对应楼层的目的地请求且当前电梯来停在cur_floor时,便可以记录这个

请求。

rst:

在电梯进入初始状态时,撤销记录中的目的地请求。

ce:

在电梯进入暂停在cur_floor状态时ce=1;控制撤销cur_floor的目的地请求,并不记录

在当前状态下该楼层的目的地请求。

cur_Floor:

当前楼层作为判断的条件。

output:

get_dest:

通过输出LED显示当前未完成的目的地请求。

源代码如下:

moduledestination(set_dest,rst,ce,cur_Floor,get_dest);input[6:

0]set_dest;

input[2:

0]cur_Floor;

inputrst,ce;

output[6:

0]get_dest;

reg[6:

0]get_dest;

 

always@(rstorceorset_dest[0]orcur_Floor)

 

begin

if(rst==1)

get_dest[0]=0;

else

begin

if(set_dest[0]==0)

begin

if(ce==0||cur_Floor!

=1)

get_dest[0]=1;电梯不在1楼,目的地为1else

 

get_dest[0]=0;电梯在1楼目的地不显示

end

else

begin

if(ce==1&&cur_Floor==1)

get_dest[0]=0;

 

end

end

end

 

always@(rstorceorset_dest[1]orcur_Floor)

begin

if(rst==1)初始化

get_dest[1]=0;

elseif(set_dest[1]==0)没有请求

begin

if(ce==0||cur_Floor!

=2)

get_dest[1]=1;

 

else

get_dest[1]=0;

end

else

begin

if(ce==1&&cur_Floor==2)

get_dest[1]=0;

end

 

end

 

always@(rstorceorset_dest[2]orcur_Floor)

begin

if(rst==1)

get_dest[2]=0;

elseif(set_dest[2]==0)

begin

if(ce==0||cur_Floor!

=3)

get_dest[2]=1;

else

get_dest[2]=0;

end

else

begin

if(ce==1&&cur_Floor==3)

get_dest[2]=0;

 

end

 

end

 

always@(rstorceorset_dest[3]orcur_Floor)

begin

if(rst==1)

get_dest[3]=0;

elseif(set_dest[3]==0)

begin

if(ce==0||cur_Floor!

=4)

get_dest[3]=1;

else

get_dest[3]=0;

 

end

else

begin

if(ce==1&&cur_Floor==4)

get_dest[3]=0;

 

end

 

end

 

always@(rstorceorset_dest[4]orcur_Floor)

begin

if(rst==1)

get_dest[4]=0;

elseif(set_dest[4]==0)

begin

 

if(ce==0||cur_Floor!

=5)

get_dest[4]=1;

else

get_dest[4]=0;

end

else

begin

if(ce==1&&cur_Floor==5)

get_dest[4]=0;

 

end

 

end

 

always@(rstorceorset_dest[5]orcur_Floor)

begin

if(rst==1)

get_dest[5]=0;

elseif(set_dest[5]==0)

begin

if(ce==0||cur_Floor!

=6)

get_dest[5]=1;

else

get_dest[5]=0;

end

else

begin

if(ce==1&&cur_Floor==6)

get_dest[5]=0;

 

end

 

end

 

always@(rstorceorset_dest[6]orcur_Floor)

begin

if(rst==1)

get_dest[6]=0;

elseif(set_dest[6]==0)

begin

if(ce==0||cur_Floor!

=7)

get_dest[6]=1;

else

get_dest[6]=0;

end

else

begin

if(ce==1&&cur_Floor==7)

get_dest[6]=0;

 

end

 

end

endmodule

 

(2)、call:

该模块是为了描述电梯外的召唤的记录和撤销。

input:

 

set_call:

当按下对应楼层的召唤请求且当前电梯未停在cur_floor,便可以记录这个召唤。

rst:

当电梯进入初始状态时,撤销目的地面板上的请求。

ce:

在电梯进入暂停在cur_floor的状态时,控制撤销cur_floor的所在所在召唤请求,并

不记录当前状态下该楼层的召唤。

cur_Floor:

当前楼层作为判断的条件。

output:

get_call:

通过输出LED显示当前未完成的目的地请求。

源代码如下:

modulecall(set_call,rst,cur_Floor,ce,get_call);

input[11:

0]set_call;

input[2:

0]cur_Floor;

inputrst,ce;

output[11:

0]get_call;

reg[11:

0]get_call;

 

always@(rstorceorset_call[0]orcur_Floor)

begin

if(rst==1)

get_call[0]=0;

elseif(set_call[0]==0)

begin

if(ce==0||cur_Floor!

=1)

get_call[0]=1;

else

get_call[0]=0;

end

else

begin

if(ce==1&&cur_Floor==1)

 

get_call[0]=0;

end

 

end

 

always@(rstorceorset_call[1]orcur_Floor)

begin

if(rst==1)

get_call[1]=0;

elseif(set_call[1]==0)

begin

if(ce==0||cur_Floor!

=2)

get_call[1]=1;

else

get_call[1]=0;

end

else

begin

if(ce==1&&cur_Floor==2)

get_call[1]=0;

end

 

end

 

always@(rstorceorset_call[2]orcur_Floor)

begin

if(rst==1)

get_call[2]=0;

elseif(set_call[2]==0)

 

begin

if(ce==0||cur_Floor!

=2)

get_call[2]=1;

else

get_call[2]=0;

end

else

begin

if(ce==1&&cur_Floor==2)

get_call[2]=0;

end

 

end

 

always@(rstorceorset_call[3]orcur_Floor)

begin

if(rst==1)

get_call[3]=0;

elseif(set_call[3]==0)

begin

if(ce==0||cur_Floor!

=3)

get_call[3]=1;

else

get_call[3]=0;

end

else

begin

if(ce==1&&cur_Floor==3)

get_call[3]=0;

 

end

 

end

 

always@(rstorceorset_call[4]orcur_Floor)

begin

if(rst==1)

get_call[4]=0;

elseif(set_call[4]==0)

begin

if(ce==0||cur_Floor!

=3)

get_call[4]=1;

else

get_call[4]=0;

end

else

begin

if(ce==1&&cur_Floor==3)

get_call[4]=0;

end

 

end

 

always@(rstorceorset_call[5]orcur_Floor)

begin

if(rst==1)

get_call[5]=0;

elseif(set_call[5]==0)

begin

 

if(ce==0||cur_Floor!

=4)

get_call[5]=1;

else

get_call[5]=0;

end

else

begin

if(ce==1&&cur_Floor==4)

get_call[5]=0;

end

 

end

 

always@(rstorceorset_call[6]orcur_Floor)

begin

if(rst==1)

get_call[6]=0;

elseif(set_call[6]==0)

begin

if(ce==0||cur_Floor!

=4)

get_call[6]=1;

else

get_call[6]=0;

end

else

begin

if(ce==1&&cur_Floor==4)

get_call[6]=0;

end

 

end

 

always@(rstorceorset_call[7]orcur_Floor)

begin

if(rst==1)

get_call[7]=0;

elseif(set_call[7]==0)

begin

if(ce==0||cur_Floor!

=5)

get_call[7]=1;

else

get_call[7]=0;

end

else

begin

if(ce==1&&cur_Floor==5)

get_call[7]=0;

end

 

end

 

always@(rstorceorset_call[8]orcur_Floor)

begin

if(rst==1)

get_call[8]=0;

elseif(set_call[8]==0)

begin

if(ce==0||cur_Floor!

=5)

 

get_call[8]=1;

else

get_call[8]=0;

end

else

begin

if(ce==1&&cur_Floor==5)

get_call[8]=0;

end

 

end

 

always@(rstorceorset_call[9]orcur_Floor)

begin

if(rst==1)

get_call[9]=0;

elseif(set_call[9]==0)

begin

if(ce==0||cur_Floor!

=6)

get_call[9]=1;

else

get_call[9]=0;

end

else

begin

if(ce==1&&cur_Floor==6)

get_call[9]=0;

end

 

end

 

always@(rstorceorset_call[10]orcur_Floor)

begin

if(rst==1)

get_call[10]=0;

elseif(set_call[10]==0)

begin

if(ce==0||cur_Floor!

=6)

get_call[10]=1;

else

get_call[10]=0;

end

else

begin

if(ce==1&&cur_Floor==6)

get_call[10]=0;

end

 

end

 

always@(rstorceorset_call[11]orcur_Floor)

begin

if(rst==1)

get_call[11]=0;

elseif(set_call[11]==0)

begin

if(ce==0||cur_Floor!

=7)

get_call[11]=1;

 

else

get_call[11]=0;

end

else

begin

if(ce==1&&cur_Floor==7)

get_call[11]=0;

end

 

end

 

endmodule

(3)、floor:

描述电梯当前所处的楼层(从001~111的七层)。

input:

rst:

初始状态时电梯所处的楼层归为第一层。

inc_Floor:

正脉冲,控制电梯在向上运行时楼层加1。

red_Floor:

正脉冲,控制电梯在向下运行时楼层减1。

output:

 

cur_Floor:

输出LED显示当前电梯所在楼层。

源代码如下:

modulefloor(inc_Floor,red_Floor,rst,cur_Floor);

inputinc_Floor,red_Floor,rst;

output[2:

0]cur_Floor;

reg[2:

0]cur_Floor;

regfloor_clk;

 

always@(rstorinc_Floororred_Floor)

begin

if(rst)

 

floor_clk=0;

else

begin

if(inc_Fl

展开阅读全文
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2