• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

四层电梯控制DE1-SoC开发板verilog 4层电梯

05/21 10:43
868
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1-231101154029232.doc

共1个文件

名称:四层电梯控制DE1-SoC开发板verilog(代码在文末下载)

软件:Quartus II

语言:Verilog

代码功能:

4层电梯

设计一个4层楼高的电梯自动控制系统,要求实现:

(1)电梯运行规则:当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕;如果高层有下楼请求,则直接升到由下楼请求的最高层,然后进入下降模式。当电梯处于下降模式时则与上升模式相反;

(2)电梯初始状态为一层状态。

(3)每层电梯入口处设有上下请求开关,电梯内设有顾客到达层次的停站请求开关;

(4)设有电梯入口处设有位置指示装置及电梯运行模式(上升或下降)指示装置;

(5)电梯到达有停站请求的楼层,电梯门打开,开门指示灯亮,开门4秒后,电梯门关闭(开门指示灯灭)。若按下电梯内开门按钮,则电梯一直处于开门状态,若按下电梯内关门按钮,则电梯立即关门。电梯继续进行,直至执行完最后一个请求信号后停留在当前层;

(6)能记忆电梯内外所有请求,并按照电梯运行规则按顺序响应,每个请求信号保留至执行后消除。

本代码已在DE1-SoC开发板验证,其他开发板可以修改管脚适配,开发板如下:

电梯.png

演示视频:

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

部分代码展示:

`timescale?1ns?/?1ps
//控制楼层
module?floorControl(clk,reset,openDoor,closeDoor,C1U,C2D,C2U,C3D,C3U,C4D,G1,G2,G3,G4,MoveCountDone,MoveCountEn,door,dir,state,resetButtons);?
????input?clk,reset,openDoor,closeDoor,C1U,C2D,C2U,C3D,C3U,C4D,G1,G2,G3,G4,MoveCountDone;
????output?reg?MoveCountEn,door,dir;
????output?reg?[2:0]?state;
????output?reg?[9:0]?resetButtons;?//{C1U,C2D,C2U,C3D,C3U,C4D,G1,G2,G3,G4}
????
?
????//for?dir?(direction)
????parameter?DOWN?=?1'b0;
????parameter?UP?=?1'b1;
????
????//for?state
????parameter?FLOOR1?=?3'b000;
????parameter?FLOOR1to2?=?3'b001;
????parameter?FLOOR2?=?3'b010;
????parameter?FLOOR2to3?=?3'b011;
????parameter?FLOOR3?=?3'b100;
????parameter?FLOOR3to4?=?3'b101;
????parameter?FLOOR4?=?3'b110;
????
????//timing?is?a?bit?of?an?issue?so?maybe?have?a?slowclock?module?to?control?the?always?block?
????//wire?slowishclk;
//slowishClock?sc1(clk,reset,slowishclk);
????always?@(posedge?clk)?begin
????if?(reset)begin
????????MoveCountEn?<=?0;
????????door?<=?0;
????????dir?<=?UP;
????????state?<=?FLOOR1;
????????resetButtons?<=?0;
????end
????
????if?(~reset?&?openDoor?&?((state==FLOOR1)?|?(state==FLOOR2)?|?(state==FLOOR3)?|?(state==FLOOR4)))begin?//we?are?stopped?and?there?is?a?door?open?command?(sensor?or?timer?not?done)
????????MoveCountEn?<=?0;
????????door?<=?1;
????end
????
????if?(~reset?&?~openDoor?&?closeDoor?&?((state==FLOOR1)?|?(state==FLOOR2)?|?(state==FLOOR3)?|?(state==FLOOR4)))begin?//someone?wants?to?close?the?door,?or?the?timer?has?finished
????????MoveCountEn?<=?0;
????????door?<=?0;
????end
????
????//UP?logic?when?stopped
????//floor1
????if?(~reset?&?~openDoor?&?~door?&?dir==UP?&?state==FLOOR1?&?(C1U|G1))begin
????????MoveCountEn?<=?0;
????????door?<=?1;
????????dir?<=?UP;
????????state?<=?FLOOR1;
????end?
????if?(~reset?&?~openDoor?&?~door?&?dir==UP?&?state==FLOOR1?&?~C1U?&?~G1?&?(C2D|C2U|C3D|C3U|C4D|G2|G3|G4))begin
????????MoveCountEn?<=?1;
????????door?<=?0;
????????dir?<=?UP;
????????state?<=?FLOOR1to2;
????end
????
????//floor2?
????if?(~reset?&?~openDoor?&?~door?&?(dir==UP)?&?state==FLOOR2?&?~C2D?&?(C2U|G2))begin
????????MoveCountEn?<=?0;
????????door?<=?1;
????????dir?<=?UP;
????????state?<=?FLOOR2;
????end?
????if?(~reset?&?~openDoor?&?~door?&?(dir==UP)?&?state==FLOOR2?&?~C2U?&?~G2?&?(C3D|C3U|C4D|G3|G4))begin
????????MoveCountEn?<=?1;
????????door?<=?0;
????????dir?<=?UP;
????????state?<=?FLOOR2to3;
????end????
????if?(~reset?&?~openDoor?&?~door?&?(dir==UP)?&?state==FLOOR2?&?C2D?&?~C2U?&?~C3D?&?~C3U?&?~C4D?&?~G2?&?~G3?&?~G4?)begin
????????MoveCountEn?<=?0;
????????door?<=?1;
????????dir?<=?DOWN;
????????state?<=?FLOOR2;
????end?
????if?(~reset?&?~openDoor?&?~door?&?(dir==UP)?&?state==FLOOR2?&?~C2D?&?~C2U?&?~C3D?&?~C3U?&??~C4D?&?~G2?&?~G3?&?~G4?&?(C1U|G1))begin
????????MoveCountEn?<=?1;
????????door?<=?0;
????????dir?<=?DOWN;
????????state?<=?FLOOR1to2;
????end

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. 管脚分配

5. RTL图

6. Testbench

7. 仿真图

图1

图2

图3

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=237

  • 1-231101154029232.doc
    下载

相关推荐