最新版Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文Word格式文档下载.docx

上传人:b****5 文档编号:19649982 上传时间:2023-01-08 格式:DOCX 页数:30 大小:334.68KB
下载 相关 举报
最新版Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文Word格式文档下载.docx_第1页
第1页 / 共30页
最新版Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文Word格式文档下载.docx_第2页
第2页 / 共30页
最新版Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文Word格式文档下载.docx_第3页
第3页 / 共30页
最新版Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文Word格式文档下载.docx_第4页
第4页 / 共30页
最新版Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文Word格式文档下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

最新版Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文Word格式文档下载.docx

《最新版Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《最新版Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。

最新版Verilog实现的基于FPGA的五层楼电梯运行控制逻辑毕业设计论文Word格式文档下载.docx

当电梯开始启动的时候,将当前所处的楼层置为第一层,电梯为暂停状态,方向向上,然后等待控制器的调度;

等待过程当中(FLOOR保持在该楼层),首先去判断当前楼层(第i层)以上的楼层是否发出召唤或者已经有人已经发请求,若有则向上运行;

否则以同样的方法判断是否向下运行;

若不向下运行则重复等待状态(故向上运行的优先级要高于向下运行);

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

若已经判明要向上运行,则首先将运行停止状态置为运行,且标志向上运行,控制LED在该楼层亮T时间后将所在楼层加1,这时新的当前楼层(第i+1层)灯亮起,接着电梯检索去判断当前楼层是否发出向上召唤或者已经有人已经发出目的地为第i+1层的请求,若有则在第i+1层停靠;

否则检索去判断第i+1层以上的楼层是否发出召唤或者已经有人已经发出目的地为第i+1层以上的请求,若有则向上运行;

否则(必定是有第i+1层向下的请求)在第i+1层,向下运行过程同理。

[3]

1.4电梯控制的流程图

K1:

当前层i以上有召唤请求或者电梯内部目的地请求有>

i的请求;

K2:

当前层i以下有召唤请求或者电梯内部目的地请求有<

K3:

所到达的i层为目的地或者i层有向上的请求;

K4:

所到达的i层为目的地或者i层有向下的请求;

1.5状态设置

S0—S14共15个状态[4]:

S0:

初始化,电梯位于1楼,清除各请求无条件转入下一状态S1等待

S1:

等待状态,判断K1,若满足转入S3向上运行,不满足,转入S2判断

S2:

判断K2,若满足转入S9向下运行,不满足返回S1继续等待判断

S3:

电梯向上运行修改状态信息无条件转入下一状态S4计数

S4:

运行时间计数器开始计数,计数完毕转入S5,否则继续计数

S5:

修改状态信息,楼层数加1,转入S6判断

S6:

判断K3,若满足转入S8停止,不满足转入S7判断

S7:

判断K1,若满足转入S4继续运行,不满足转入S8停止

S8:

暂停并开始计数时间,计数完毕转入S1,否则继续停在S8

S9:

向下运行,修改状态信息,无条件转入下一状态S10

S10:

运行时间计数器开始计数,技术完毕转入S11,否则继续计数

S11:

修改状态信息,楼层数减1,转入S12判断

S12:

判断K4,若满足转入S14停止,不满足转入S13判断

S13:

判断K2,若满足转入S10继续运行,不满足转入S14停止

S14:

暂停并开始计数时间,计数完毕转入S1,否则继续计数

2电梯的设计实现[5]

2.1Verilog语言[6]描述的各个模块说明

2.1.1电梯内部目的地请求记录indoor_call

input:

set_dest:

当按下对应楼层的目的地请求且当前电梯所停靠的cur_floor不是所请求的目的地时,便可以记录这个请求。

rst:

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

ce:

在电梯进入暂停在cur_floor状态时ce=1;

撤销cur_floor的目的地请求并记录在当前状态下该楼层的目的地请求。

cur_Floor:

当前楼层

output:

get_dest:

输出当前未完成的目的地请求。

2.1.2电梯外部召唤请求记录outdoor_call

set_call:

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

rst:

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

ce:

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

cur_Floor:

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

get_call:

输出当前未完成的召唤请求。

2.1.3当前楼层current_floor

input:

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

inc_Floor:

控制电梯在向上运行时楼层加1。

red_Floor:

控制电梯在向下运行时楼层减1。

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

2.1.4显示上下楼up_down

初始时电梯的运行方向向上。

up_d:

当其有一个正向的电平跳变时,电梯的运行方向由向上变为向上;

有一个负向电平跳变时电梯的运行方向由向下变为向上。

Up=0;

Down=1

out_state_dir:

输出显示当前或电梯暂停前的运行方向。

2.1.5显示运行停止stop_run

初始状态时,电梯状态未停止。

stop_r:

当其有一个正向的电平跳变时,电梯状态由停止变为运行;

有一个负向电平跳变时电梯由运行变为停止。

Stop=0;

Run=1

out_state_run:

输出显示当前的电梯运行状态。

2.1.6时间计数器counter

ce_count:

当其为0时计数器不计数,但将其初始计数值赋给计数器,并将0作为结果返回给计数器;

当其为1时,计数器开始减计数,每当来一个clk下降沿时计数值减1,当计数值减为0时将其返回给控制器。

clk:

电路的时钟脉冲。

consignal:

返回给控制器的反馈信号,当其为1时,表明计数完毕。

2.1.7条件判断condition_judge

input:

sel_con:

当其为00(K1)是判断cur_floor以上是否还有目的地请求或者召唤请求;

当其为01(K2)时,判断cur_floor以下是否还有目的地请求或者召唤请求;

当其为10(K3)时,判断第cur_floor层是否还有目的地请求或者向上的召唤请求;

当其为11(K4)时,判断第cur_floor层是否还有目的地请求或者向下的召唤请求。

未完成的目的地请求。

get_call:

未完成的召唤请求。

clk:

时钟脉冲。

cur_Floor:

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

result:

是把sel_con中对应条件判断的结果送给控制器。

2.1.8中心控制模块control

时钟脉冲。

reset复位端,低电平有效,将电路状态清0。

来自counter模块的反馈信号。

result_Con:

来自condition模块的反馈信号。

rst,sel_Con,inc_Floor,red_Floor,ce,up_d,stop_r,ce_Count为向其它模块的输出控制信号。

2.2顶层原理图

3测试

3.1test1测试方案

初始化,3楼有向上请求,目的地请求为5楼,观察到达5楼后是否会停止;

100#后3楼有向下请求,目的地为2楼,观察是否到达3楼并停止等人然后到2楼;

100#后1楼有向上请求,目的地为4楼,观察最后是否会停在4楼。

Input:

Resul:

波形图:

3.2test2测试方案

100#后3楼有向下请求,目的地为2楼和5楼,观察是否到达3楼并停止等人然后是先到2楼还是5楼(测试上下楼的优先级);

Input:

Result:

3.3测试总结:

通过系统详细的测试,系统的输出结果与我们的预期结果一致,系统并未出现问题,说明系统基本上是无故障的。

4结语:

用Verilog硬件描述语言的形式进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误。

降低了开发成本,这中设计方法必将在未来的数字系统设计中发挥越来越重的作用。

本设计采用的正式FPGA来控制电梯的逻辑运行,具有编程灵活,性能可靠等优点,而且FPGA在去电后配置数据自动消失,用户可以控制加载进程,在现场修改器件的逻辑功能。

在设计过程中我们首先把整个电梯设计根据功能分成若干个功能模块,然后理清个模块的时序,一以便将各个功能模块综合在一起,能够公用书籍总线,使其能正常工作不受干扰,有些程序在仿真的时候其时序是完全正确的,但是当程序下载到芯片上之后就会发现错误了。

这主要是因为各个功能在实现时会有延时,但这在仿真时是显示不出来的。

因此编程时要注意在选芯片之前,要先将计算出的数据信号先放到数据总线上。

FPGA在实现电梯控制方面比较灵活,可以通过对程序的修改来达到控制多个楼层,本设计在电梯控制方面做的比较全面,比如设计了内外电梯的指示系统和当前电梯运行情况显示,能够满足一般的载客电梯的工作功能需要。

参考文献

[1]John.F.Wakerly.DigitalDesignPrinciplesandPractices.北京:

高等教育出版社

[2]阎石等.数字电子技术基础.北京:

高等教育出版社。

[3]毛法尧等.数字逻辑.武汉:

华中科技大学出版社。

[4]邹寿彬等.电子技术基础-数字部分.成都:

[5]欧伟明等.电子信息系统设计.西安.西安电子科技大学出版社

[6]夏宇闻.Verilog数字系统设计教程.北京.北京航空航天大学出版社

课程设计总结:

通过学习这门课程,我们了解到数字系统设计的基本步骤和其在实现过程当中必须注意的各个方面。

以前的课程较多的停留在理论的高度上,而这次课程设计使我们真正认识到如何才能成为真正的硬件设计师。

在课程设计的实践当中,我们的电梯设计也可谓经历了风风雨雨,在ISE中的语言设计过程当中进行的还算顺利的情况下,经过软件模拟成功以后很快就可以进行硬件的综合仿真了。

但是并不代表着硬件仿真也可以了,最后经过多次调试发现在cur_floor中加入时钟变量才能使其稳定变化。

成功的喜悦之情难以言表,做工程的确是有苦有甜。

在这个过程当中,周老师给了我们很大的帮助,特别是反复强调要注意硬件的设计要考虑实现以及后模拟的重要性。

我们在将来的实践过程当中一定注意以上的问题。

着门课程使我对硬件设计产生了浓厚的兴趣,这必将成为推动我在这个领域前进的不竭动力。

再次感谢周老师在这次课程设计中给予我的帮助,周老师在百忙中抽出时间给我详细讲了有关状态机的设计,并提出多种设计思路,使我受益匪浅。

附各个模块Verilog源代码:

(1)indoor_call:

moduleindoor_call(set_dest,rst,ce,cur_Floor,get_dest);

input[4:

0]set_dest;

input[2:

0]cur_Floor;

inputrst,ce;

output[4:

0]get_dest;

reg[4:

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;

else

get_dest[0]=0;

end

else

if(ce==1&

&

cur_Floor==1)

end

always@(rstorceorset_dest[1]orcur_Floor)

begin

get_dest[1]=0;

elseif(set_dest[1]==0)

if(ce==0||cur_Floor!

=2)

get_dest[1]=1;

else

if(ce==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)

end

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)

endmodule

(2)outdoor_call

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

input[7:

0]set_call;

output[7:

0]get_call;

reg[7:

always@(rstorceorset_call[0]orcur_Floor)

get_call[0]=0;

elseif(set_call[0]==0)

=1)

get_call[0]=1;

get_call[0]=0;

cur_Floor==1)

always@(rstorceorset_call[1]orcur_Floor)

get_call[1]=0;

elseif(set_call[1]==0)

get_call[1]=1;

get_call[1]=0;

cur_Floor==2)

always@(rstorceorset_call[2]orcur_Floor)

get_call[2]=0;

elseif(set_call[2]==0)

get_call[2]=1;

always@(rstorceorset_call[3]orcur_Floor)

get_call[3]=0;

elseif(set_call[3]==0)

get_call[3]=1;

always@(rstorceorset_call[4]orcur_Floor)

get_call[4]=0;

elseif(set_call[4]==0)

get_call[4]=1;

always@(rstorceorset_call[5]orcur_Floor)

get_call[5]=0;

elseif(set_call[5]==0)

get_call[5]=1;

always@(rstorceorset_call[6]orcur_Floor)

get_call[6]=0;

elseif(set_call[6]==0)

get_call[6]=1;

always@(rstorceorset_call[7]orcur_Floor)

get_call[7]=0;

elseif(set_call[7]==0)

get_call[7]=1;

get

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

当前位置:首页 > 人文社科 > 文学研究

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

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