Verilog语言设计电梯控制器文档Word文件下载.docx
《Verilog语言设计电梯控制器文档Word文件下载.docx》由会员分享,可在线阅读,更多相关《Verilog语言设计电梯控制器文档Word文件下载.docx(40页珍藏版)》请在冰豆网上搜索。
当前内部控制面板上有的请求,只要经过所在楼层均会立即响应.在所有内部外部请求都已完成后,电梯转入等待。
电梯模型:
(如下附图)
第1层
每楼层的召唤按钮面板,
显示信息有:
当前电梯所在位置(楼层)和电梯的运行方向(上\下)
控制信息:
使用电梯的请求(向上或向下)
第7层
第6层
第3层
第2层
第4层
第5层
电梯
电梯内部的控制面板,
电梯当前的位置和电梯当前的运行方向(上\下),以及请求到达的楼层
控制信息有:
请求要到达的目的楼层
BACK
************************************************************
3)、算法设计;
1、电梯基本组成部分及其实现:
(1)FLOOR:
记录电梯所处楼层的记数器.
用模8计数器实现,由001~111的加减记数来表示电梯所在楼层的变化.
(2)RB:
电梯运行状态寄存器组.
用一位寄存器来表示电梯当前是运行还是暂停,再用一位寄存器表示当前或刚才的运行方向,这样就可以在电梯停止时也可以判断电梯刚才的状态,从而确定下个时刻电梯的后续方向.对于FLOOR,我们通过三个LED显示.
(3)RC:
电梯目的地信息寄存器,记录电梯还有哪些要去楼层的任务.
每个楼层对应一个状态触发器,同时控制一个LED显示.
(4)RD:
各个楼层召唤信息寄存器,它记录了各楼层还有哪些向上向下的请求.
*********************************************************
5、系统控制器ASM图:
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:
always@(rstorceorset_dest[0]orcur_Floor)
begin
if(rst==1)
get_dest[0]=0;
else
begin
if(set_dest[0]==0)
if(ce==0||cur_Floor!
=1)
get_dest[0]=1;
电梯不在1楼,目的地为1
else
电梯在1楼目的地不显示
end
if(ce==1&
&
cur_Floor==1)
end
always@(rstorceorset_dest[1]orcur_Floor)
if(rst==1)初始化
get_dest[1]=0;
elseif(set_dest[1]==0)没有请求
=2)
get_dest[1]=1;
cur_Floor==2)
end
always@(rstorceorset_dest[2]orcur_Floor)
get_dest[2]=0;
elseif(set_dest[2]==0)
=3)
get_dest[2]=1;
cur_Floor==3)
always@(rstorceorset_dest[3]orcur_Floor)
get_dest[3]=0;
elseif(set_dest[3]==0)
=4)
get_dest[3]=1;
cur_Floor==4)
always@(rstorceorset_dest[4]orcur_Floor)
get_dest[4]=0;
elseif(set_dest[4]==0)
=5)
get_dest[4]=1;
cur_Floor==5)
always@(rstorceorset_dest[5]orcur_Floor)
get_dest[5]=0;
elseif(set_dest[5]==0)
=6)
get_dest[5]=1;
cur_Floor==6)
always@(rstorceorset_dest[6]orcur_Floor)
get_dest[6]=0;
elseif(set_dest[6]==0)
=7)
get_dest[6]=1;
cur_Floor==7)
endmodule
(2)、call:
该模块是为了描述电梯外的召唤的记录和撤销。
set_call:
当按下对应楼层的召唤请求且当前电梯未停在cur_floor,便可以记录这个召唤。
当电梯进入初始状态时,撤销目的地面板上的请求。
在电梯进入暂停在cur_floor的状态时,控制撤销cur_floor的所在所在召唤请求,并不记录当前状态下该楼层的召唤。
get_call:
modulecall(set_call,rst,cur_Floor,ce,get_call);
input[11:
0]set_call;
output[11:
0]get_call;
reg[11:
always@(rstorceorset_call[0]orcur_Floor)
get_call[0]=0;
elseif(set_call[0]==0)
get_call[0]=1;
get_call[0]=0;
always@(rstorceorset_call[1]orcur_Floor)
get_call[1]=0;
elseif(set_call[1]==0)
if(ce==0||