Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计的全部内容。
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
五层楼电梯运行控制逻辑设计
摘要:电梯是高层建筑不可缺少的运输工具,用于垂直运送乘客和货物,传统的电梯控制系统主要采用继电器,接触器进行控制,其缺点是触点多,故障率高、可靠性差、维修工作量大等,本设计根据电梯自动控制的要求利用Verilog语言编写并完成系统设计,在利用软件仿真之后,下载到了FPGA上进行硬件仿真。FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了之前的可编程器件门电路数有限及速度上的缺点。
关键词:电梯控制 FPGA Verilog 软件设计 硬件设计
在当今社会,随着城市建设的不断发展,高层建筑的不断增多,电梯作为高层建筑中垂直运行的交通工具已与人们的日常生活密不可分。目前电梯控制系统主要有三种控制方式:继电路控制系统(早期安装的电梯多位继电器控制系统),FPGA/CPLD [1] 的控制系统、微机控制系统。继电器控制系统由于故障率高、可靠性差、控制方式不灵活以及消耗功率大等缺点,目前已逐渐被淘汰,而微机控制系统虽在智能控制方面有较强的功能,但也存在抗扰性差,系统设计复杂,一般维修人员难以掌握其维修技术等缺陷.而FPGA/CPLD控制系统由于运行可靠性高,使用维修方便,抗干扰性强,设计和调试周期较短等优点 [2] ,倍受人们重视等优点,已经成为目前在电梯控制系统中使用最多的控制方式,目前也广泛用于传统继电器控制系统的技术改造。
随着现代化城市的高度发展,每天都有大量人流及物流需要输送,因此在实际工
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
程应用中电梯的性能指标相当重要,主要体现在:可靠性,安全性,便捷快速性。电梯的可靠性非常重要,直接或间接的影响着人们的生产,生活,而电梯的故障主要表现在电力拖动控制系统中,因此要提高可靠性也要从电力拖动控制系统入手。
本次设计尝试用Verilog实现电梯控制器部分,进行了多层次的电梯控制,也进行了软件及硬件上的仿真验证,时序分析以保证设计的正确。在设计中先用软件进行模拟仿真,然后又下载到FPGA开发板上进行硬件仿真,以确保设计的正确性。
1 电梯的设计分析
1。1 系统的需求分析及系统描述
设计一个电梯运行控器,该电梯有5层楼,设计的电梯调度算法满足提高服务质量、降低运行成本的原则;电梯的内部有一个控制面板,它负责按下请求到的楼层,并且显示当前尚未完成的目的地请求,当到达该楼层以后自动撤销本楼层的请求,即将面板灯熄灭;除1层和5层分别只有上和下按钮外,其余每个楼层(电梯门口旁)的召唤面板都有两个按钮,分别指示上楼和下楼请求。当按下后,对应按钮灯亮.如果电梯已经到达该楼层,按钮灯熄灭;电梯的外部面板会显示电梯当前所在的楼层,及上行还是下行(暂停显示刚才运行时的状态);电梯向一个方向运行时,只对本方向前方的请求进行应答,直到本方向前方无请求时,才对反方向的请求进行应答。当前内部控制面板上有的请求,只要经过所在楼层均会立即响应。在所有内部外部请求都已完成后,电梯转入等待。
1。2 电梯的模型图
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
1。3 电梯工作过程的具体描述
当电梯开始启动的时候,将当前所处的楼层置为第一层,电梯为暂停状态,方向向上,然后等待控制器的调度;等待过程当中(FLOOR保持在该楼层),首先去判断当前楼层(第i层)以上的楼层是否发出召唤或者已经有人已经发请求,若有则向上运行;否则以同样的方法判断是否向下运行;若不向下运行则重复等待状态(故向上运行的优先级要高于向下运行);保持该状态循环进行操作直到检测到有向上或向下的任务;
若已经判明要向上运行,则首先将运行停止状态置为运行,且标志向上运行,控制LED在该楼层亮T时间后将所在楼层加1,这时新的当前楼层(第i+1层)灯亮起,接着电梯检索去判断当前楼层是否发出向上召唤或者已经有人已经发出目的地为第i+1层的请求,若有则在第i+1层停靠;否则检索去判断第i+1层以上的楼层是否发出召唤或者已经有人已经发出目的地为第i+1层以上的请求,若有则向上运行;否则(必定是有第i+1层向下的请求)在第i+1层,向下运行过程同理.[3]
1。4 电梯控制的流程图
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
K1: 当前层i以上有召唤请求或者电梯内部目的地请求有〉i的请求; K2: 当前层i以下有召唤请求或者电梯内部目的地请求有〈i的请求; K3: 所到达的i层为目的地或者i层有向上的请求; K4: 所到达的i层为目的地或者i层有向下的请求;
1。5 状态设置
S0 - S14 共15个状态[4]:
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
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。1 Verilog 语言[6]描述的各个模块说明
2.1。1电梯内部目的地请求记录indoor_call
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
input:
set_dest:当按下对应楼层的目的地请求且当前电梯所停靠的cur_floor不是所请求的目的地时,便可以记录这个请求.
rst:在电梯进入初始状态时,撤销记录中的目的地请求。
ce:在电梯进入暂停在cur_floor状态时ce=1;撤销cur_floor的目的地请求并记录在当前状态下该楼层的目的地请求。 cur_Floor:当前楼层 output:
get_dest: 输出当前未完成的目的地请求.
2.1.2电梯外部召唤请求记录outdoor_call
input:
set_call:当按下对应楼层的召唤请求且当前电梯未停在该楼层cur_floor
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
时,便可以记录这个召唤。
rst:当电梯进入初始状态时,撤销目的地面板上的请求。
ce:在电梯进入暂停在cur_floor的状态时ce=1,控制撤销cur_floor 的所在所在召唤请求。
cur_Floor:当前楼层作为判断的条件. output:
get_call: 输出当前未完成的召唤请求。
2。1.3当前楼层current_floor
input:
rst: 初始状态时电梯所处的楼层归为第一层. inc_Floor: 控制电梯在向上运行时楼层加1。 red_Floor: 控制电梯在向下运行时楼层减1.
output:
cur_Floor:输出显示当前电梯所在楼层。
2。1。4显示上下楼up_down
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
input:
rst:初始时电梯的运行方向向上.
up_d:当其有一个正向的电平跳变时,电梯的运行方向由向上变为向上;有一个负向电平跳变时电梯的运行方向由向下变为向上。Up=0 ; Down=1 output:
out_state_dir: 输出显示当前或电梯暂停前的运行方向。
2。1.5显示运行停止stop_run
input:
rst: 初始状态时,电梯状态未停止。
stop_r: 当其有一个正向的电平跳变时,电梯状态由停止变为运行;有一个负向电平跳变时电梯由运行变为停止.Stop=0 ;Run=1 output:
out_state_run: 输出显示当前的电梯运行状态。
2。1.6时间计数器counter
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
input:
ce_count:当其为0时计数器不计数,但将其初始计数值赋给计数器,并将0作为结果返回给计数器;当其为1时,计数器开始减计数,每当来一个clk下降沿时计数值减1,当计数值减为0时将其返回给控制器。
clk:电路的时钟脉冲。
output:
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层是否还有目的地请
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
求或者向下的召唤请求。
get_dest:未完成的目的地请求. get_call:未完成的召唤请求。 clk:时钟脉冲。
cur_Floor:当前楼层,作为判断条件。
output:
result:是把sel_con中对应条件判断的结果送给控制器。
2。1。8中心控制模块control
input:
clk: 时钟脉冲。
reset复位端,低电平有效,将电路状态清0. consignal:来自counter模块的反馈信号。 result_Con:来自condition模块的反馈信号.
output:
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
rst,sel_Con,inc_Floor,red_Floor,ce,up_d,stop_r, ce_Count为向其它模块的输出控制信号。
2.2 顶层原理图
3 测试
3。1 test1 测试方案
初始化,3楼有向上请求,目的地请求为5楼,观察到达5楼后是否会停止;100
#后3楼有向下请求,目的地为2楼,观察是否到达3楼并停止等人然后到2楼;100#后1楼有向上请求,目的地为4楼,观察最后是否会停在4楼. Input:
Resul:
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
波形图:
3。2 test2 测试方案
初始化,3楼有向上请求,目的地请求为5楼,观察到达5楼后是否会停止;100#
后3楼有向下请求,目的地为2楼和5楼,观察是否到达3楼并停止等人然后是先到2楼还是5楼(测试上下楼的优先级);100#后1楼有向上请求,目的地为4楼,观察最后是否会停在4楼. Input:
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
Result:
波形图:
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
3.3
测试总结:
通过系统详细的测试,系统的输出结果与我们的预期结果一致,系统并未出现问题,说明系统基本上是无故障的。
4 结语:
用Verilog硬件描述语言的形式进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误。降低了开发成本,这中设计方法必将在未来的数字系统设计中发挥越来越重的作用。
本设计采用的正式FPGA来控制电梯的逻辑运行,具有编程灵活,性能可靠等优点,而且FPGA在去电后配置数据自动消失,用户可以控制加载进程,在现场修改器件的逻辑功能。在设计过程中我们首先把整个电梯设计根据功能分成若干个功能模块,然后理清个模块的时序,一以便将各个功能模块综合在一起,能够公用书籍总线,使其能正常工作不受干扰,有些程序在仿真的时候其时序是完全正确的,但是当程序下载到芯片上之后就会发现错误了。这主要是因为各个功能在实现时会有延时,但这在仿真时是显示不出来的。因此编程时要注意在选芯片之前,要先将计算出的数据信号先放到数据总线上.
FPGA在实现电梯控制方面比较灵活,可以通过对程序的修改来达到控制多个楼层,本设计在电梯控制方面做的比较全面,比如设计了内外电梯的指示系统和当前电梯运行情况显示,能够满足一般的载客电梯的工作功能需要.
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
参考文献
[1]John。F。Wakerly。Digital Design Principles and Practices。北京:高
等教育出版社
[2]阎石等。数字电子技术基础.北京:高等教育出版社。
[3]毛法尧等.数字逻辑.武汉:华中科技大学出版社。
[4]邹寿彬等.电子技术基础—数字部分。成都:高等教育出版社
[5]欧伟明等.电子信息系统设计.西安。西安电子科技大学出版社
[6]夏宇闻。Verilog数字系统设计教程.北京。北京航空航天大学出版社
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
课程设计总结:
通过学习这门课程,我们了解到数字系统设计的基本步骤和其在实现过程当中必须注意的各个方面。以前的课程较多的停留在理论的高度上,而这次课程设计使我们真正认识到如何才能成为真正的硬件设计师。
在课程设计的实践当中,我们的电梯设计也可谓经历了风风雨雨,在ISE中的语言设计过程当中进行的还算顺利的情况下,经过软件模拟成功以后很快就可以进行硬件的综合仿真了.但是并不代表着硬件仿真也可以了,最后经过多次调试发现在cur_floor中加入时钟变量才能使其稳定变化.
成功的喜悦之情难以言表,做工程的确是有苦有甜。在这个过程当中,周老师给了我们很大的帮助,特别是反复强调要注意硬件的设计要考虑实现以及后模拟的重要性。我们在将来的实践过程当中一定注意以上的问题。着门课程使我对硬件设计产生了浓厚的兴趣,这必将成为推动我在这个领域前进的不竭动力。
再次感谢周老师在这次课程设计中给予我的帮助,周老师在百忙中抽出时间给我详细讲了有关状态机的设计,并提出多种设计思路,使我受益匪浅。
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
附各个模块Verilog源代码:
(1) indoor_call:
module indoor_call( set_dest,rst,ce,cur_Floor,get_dest ) input [4:0] set_dest; input [2:0] cur_Floor; input rst,ce;
output [4:0] get_dest; reg [4:0] get_dest;
always @ (rst or ce or set_dest[0] or cur_Floor) begin
if(rst==1)
get_dest[0]=0; else begin
; Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
if(set_dest[0]==0) begin
if(ce==0||cur_Floor!=1) get_dest[0]=1; else
get_dest[0]=0; end else begin
if(ce==1&&cur_Floor==1) get_dest[0]=0; end end end
always @ (rst or ce or set_dest[1] or cur_Floorbegin
if(rst==1)
get_dest[1]=0;
else if(set_dest[1]==0) begin
if(ce==0||cur_Floor!=2) get_dest[1]=1; else
get_dest[1]=0;
) Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
end else begin
if(ce==1&&cur_Floor==2) get_dest[1]=0; end end
always @ (rst or ce or set_dest[2]begin
if(rst==1)
get_dest[2]=0;
else if(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
or cur_Floor) Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
always @ (rst or ce or set_dest[3] or cur_Floor) begin
if(rst==1)
get_dest[3]=0; else if(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 @ (rst or ce or set_dest[4]begin
if(rst==1)
get_dest[4]=0; else if(set_dest[4]==0) begin
if(ce==0||cur_Floor!=5)
) or cur_Floor Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
get_dest[4]=1; else
get_dest[4]=0; end else begin
if(ce==1&&cur_Floor==5) get_dest[4]=0; end end endmodule
(2) outdoor_call
module outdoor_call( set_call,rst,cur_Floor,ce,get_call ); input [7:0] set_call; input [2:0] cur_Floor; input rst,ce;
output [7:0] get_call; reg [7:0] get_call;
always @ (rst or ce or set_call[0] or cur_Floor) begin
if(rst==1)
get_call[0]=0;
else if(set_call[0]==0) begin
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
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 @ (rst or ce or set_callbegin
if(rst==1) get_call[1]=0;
else if(set_call[1]==0) begin
if(ce==0||cur_Floor!=2) get_call[1]=1; else
get_call[1]=0; end else begin
1] or cur_Floor) [ Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
if(ce==1&&cur_Floor==2) get_call[1]=0; end end
always @ (rst or ce or set_call[2] or cur_Floor) begin
if(rst==1)
get_call[2]=0;
else if(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 @ ( rst or ce or set_call[3]begin
if(rst==1)
) or cur_Floor Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
get_call[3]=0;
else if(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 @ ( rst or ce or set_call[4] or cur_Floor)begin
if(rst==1)
get_call[4]=0;
else if(set_call[4]==0) begin
if(ce==0||cur_Floor!=3) get_call[4]=1; else
get_call[4]=0;
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
end else begin
if(ce==1&&cur_Floor==3) get_call[4]=0; end end
always @ ( rst or ce or set_callbegin
if(rst==1)
get_call[5]=0; else if(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
5] or cur_Floor) [ Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
always @ ( rst or ce or set_call[6] or cur_Floor) begin
if(rst==1)
get_call[6]=0;
else if(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 @ ( rst or ce or set_callbegin
if(rst==1) get_call[7]=0;
else if(set_call[7]==0) begin
if(ce==0||cur_Floor!=5)
7] or cur_Floor) [ Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
get_call[7]=1; else
get_call[7]=0; end else begin
if(ce==1&&cur_Floor==5) get_call[7]=0; end end endmodule (3) cur_floor
module current_floor( inc_Floor,red_Floor,rst, input inc_Floor,red_Floor,rst; output [2:0] cur_Floor; reg [2:0] cur_Floor; reg floor_clk;
always @ (rst or inc_Floor or red_Floor) begin if(rst) floor_clk=0; else begin
if(inc_Floor || red_Floor)
cur_Floor ); Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
floor_clk=1; else
floor_clk=0; end end
always@(posedge floor_clk or posedge rst) begin if(rst==1)
cur_Floor=3’b001; else if(inc_Floor==1) cur_Floor=cur_Floor+1; else if(red_Floor==1) cur_Floor=cur_Floor—1; else
cur_Floor=cur_Floor; end endmodule (4) stop_run
module stop_run (rst,stop_r,out_state_run); input rst,stop_r; output out_state_run; reg out_state_run; always @(stop_r or rst) begin
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
if(rst==1||stop_r==0) out_state_run=0; else
out_state_run=1; end endmodule (5) up_down
module up_down (rst,up_d,out_state_dir); input rst,up_d; output out_state_dir; reg out_state_dir; always @(rst or up_d) begin
if(rst==1||up_d==0) out_state_dir=0; else
out_state_dir=1; end endmodule (6) counter
module counter(ce_count,clk,consignal); input ce_count,clk; output consignal; reg consignal;
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
integer count;
always@(negedge clk) begin
if(!ce_count) begin
consignal〈=0; count〈=6; end else begin
if(count〉1) begin
consignal〈=0; count〈=count-1; end else
consignal〈=1; end end endmodule
(7) condition_judge
module condition_judge( get_dest,get_call,cur_Floor,result );
input [4:0] get_dest;
,clk,sel_conditionVerilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
input [7:0] get_call; input [1:0] sel_condition; input clk;
input [2:0] cur_Floor; output result; reg result; integer flag,i;
always @(negedge clk) begin
case(sel_condition) //judge the condition K1 2'b00: begin
case(cur_Floor) 3’b001:begin
if(get_dest[1]||get_dest[2]||get_dest[3]||get_dest[4]||get_call[1]||get_call[2]||get_call[3]||get_call[4]||get_call[5]||get_call[6]||get_call[7]) result=1; else
result=0; end
3'b010:begin
if(get_dest[2]||get_dest[3]||get_dest[4]||get_call[3]||
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
get_call[4]||get_call[5]||get_call[6]||get_call[7]) result=1; else
result=0; end 3'b011:begin
if(get_dest[3]||get_dest[4]||get_call[7]) result=1; else
result=0; end 3'b100:begin
if(get_dest[4]||get_call[7]) result=1; else
result=0; end
default: result=0; endcase end
//judge the condition K2 2'b01: begin
get_call5]||get_call6]||[[Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
case(cur_Floor) 3’b101:begin
if(get_dest[0]||get_dest[1]||get_dest[2]||get_dest[3]||get_call[0]||get_call[1]||get_call[2]||get_call[3]||get_call[4]||get_call[5]||get_call[6]) result=1; else
result=0; end
3’b100:begin
if(get_dest[0]||get_dest[1]||get_dest[2]||get_call[0]||get_call[1]||get_call[2]||get_call[3]||get_call[4]) result=1; else
result=0; end 3'b011:begin if
(
get_dest
[
0]
|
|get_dest[1]|
|
get_call[0]||get_call[1]||get_call[2]) result=1; else
result=0; end
3'b010:begin
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
if(get_dest[0]||get_call[0]) result=1; else
result=0; end default: result=0; endcase end
//judge the condition K3 2'b10: begin
if(cur_Floor==5) result=1; else begin
if(get_call[2*cur_Floor-2]|| result=1; else
result=0; end end
//judge the condition K4 2’b11: begin
get_dest[cur_Floor-1]) Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
if(cur_Floor==0) result=1; else begin
if(get_call[2*cur_Floor-3]||get_dest[cur_Floor-1]) result=1; else result=0; end end
endcase end endmodule (8) control
module control(clk,reset,result_Con,consignal,sel_Con,inc_Floorred_Floor,ce,up_d,stop_r,rst,ce_Count);
parameter S0=4'b0000,S1=4'b0001,S2=4'b0010,S3=4’b0011S4=4’b0100,S5=4'b0101,S6=4’b0110,S7=4’b0111,
S8=4’b1000,S9=4'b1001,S10=4'b1010,S11=4’b1011,S12=4'b1100S13=4'b1101,S14=4'b1110;
input clk,reset,result_Con,consignal; output [1:0] sel_Con;
output inc_Floor,red_Floor,ce,up_d,stop_r,rst,ce_Count; reg [1:0] sel_Con;
,,,Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
reg inc_Floor,red_Floor,ce,up_d,stop_r,rst,ce_Count; reg[3:0] state;
always @ (posedge clk or negedge reset) begin
if(!reset) state〈=S0; else begin case(state) S0:state<=S1; S1:if(result_Con) state<=S3; else
state〈=S2; S2:if(result_Con) state〈=S9; else state<=S1; S3:state〈=S4; S4:if(consignal) begin state<=S5; end else state<=S4;
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
S5:state<=S6; S6:if(result_Con) state<=S8; else
state<=S7; S7:if(result_Con) state〈=S4; else
state〈=S8; S8:if(consignal) begin
state〈=S1; end else
state〈=S8; S9:state<=S10; S10:if(consignal) begin
state〈=S11; end else
state〈=S10; S11:state〈=S12; S12:if(result_Con)
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
state〈=S14; else
state<=S13; S13:if(result_Con) state〈=S10; else
state〈=S14; S14:if(consignal) begin state〈=S2; end else
state<=S14; endcase end end
always @ (state) begin
case(state) S0: begin rst〈=1; end S1: begin ce<=1;
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
rst<=0; ce_Count<=0; sel_Con<=2'b00; end S2: begin ce〈=1; ce_Count〈=0; sel_Con<=2'b01; end S3: begin up_d〈=0; stop_r<=1; ce〈=0; end S4: begin ce_Count<=1; end S5: begin ce_Count<=0; inc_Floor<=1; end S6: begin inc_Floor<=0; sel_Con<=2’b10;
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
end S7: begin
sel_Con<=2’b00; end S8: begin ce<=1; stop_r<=0; ce_Count〈=1; end S9: begin up_d<=1; stop_r〈=1; ce〈=0; end S10: begin ce_Count<=1; end S11: begin
ce_Count〈=0; red_Floor〈=1; end S12: begin
red_Floor〈=0; sel_Con<=2’b11;
Verilog实现的基于FPGA的五层楼电梯运行控制逻辑设计
end S13: begin
sel_Con<=2'b01; end S14: begin ce<=1; stop_r〈=0; ce_Count<=1; end endcase end endmodule
因篇幅问题不能全部显示,请点此查看更多更全内容