四层电梯控制系统 FPGA 设计 Verilog Quartus

名称:四层电梯控制系统 FPGA 设计 Verilog Quartus

软件:Quartus

语言:Verilog

开发板/平台:DE2-115

功能介绍

本设计实现一个四层电梯控制系统,使用 Verilog HDL 编写,工程环境为 Quartus。系统面向 FPGA 实验与课程设计场景,包含 1 至 4 楼的外呼按钮、轿厢内选按钮、开门/关门控制、运行方向指示、门状态指示以及数码管楼层显示等功能。 电梯输入部分覆盖一楼上行、二楼上/下行、三楼上/下行、四楼下行等外部呼梯信号,同时提供 BF1 至 BF4 四个内部楼层选择信号。系统能够对按钮请求进行锁存,并在请求完成后通过复位管理清除对应楼层呼叫状态,适合观察电梯请求保持、响应和清除的完整过程。 输出部分包括 door_led、up_led、down_led 和 HEX0 七段数码管。door_led 用于显示电梯门状态,up_led 与 down_led 用于显示运行方向,HEX0 根据当前状态显示楼层信息。整体设计将电梯调度、按钮保持、门控、移动计时和显示编码拆分为多个模块,便于学习 FPGA 层次化设计和状态机控制方法。

运行环境

开发语言:Verilog 开发软件:Quartus 目标开发板:DE2-115 顶层模块:elevatorTop 工程包含 Quartus 工程文件、Verilog 源码、Testbench、编译输出文件以及 DE2-115 相关管脚约束。

设计思路

系统以 elevatorTop 作为顶层模块,将电梯控制逻辑划分为楼层与方向状态机、按钮控制、门控控制、移动计时和数码管显示等部分。顶层模块负责连接外部按键输入、状态机控制信号和显示输出,使各功能模块之间保持清晰的数据流和控制关系。 楼层与方向控制由 floorControl 模块承担,核心任务是根据外呼、内选、开门、关门以及移动计时完成信号,决定电梯当前楼层状态、运行方向、门状态以及请求清除信号。运行过程中,系统通过 state 表示当前状态,并结合 dir 输出上行或下行方向;只有处于运行状态时,上行或下行指示灯才被点亮。 按钮处理由 buttonControl 模块完成。外部呼梯与内部选层按键统一输入后,模块将请求锁存为控制信号,避免按键瞬时触发后请求丢失。当电梯完成对应请求后,floorControl 输出 resetButtons,对已服务的请求进行清除,从而形成按钮请求、状态机响应、请求复位的闭环。 门控与移动延时分别由 doorControl 和 counter 完成。doorControl 根据开门按钮、关门按钮和当前门状态产生 openDoor、closeDoor 控制信号;counter 用于产生楼层移动计时完成信号 MoveCountDone,配合 MoveCountEn 控制楼层切换节奏。segDisplay 模块独立完成七段数码管编码,使显示逻辑与主控制逻辑分离,结构更适合调试和扩展。

模块结构

主要模块包括: elevatorTop:顶层模块,完成按键、状态机、门控、计时、方向指示灯和数码管显示的连接。 floorControl:楼层与方向状态机模块,负责电梯运行状态、方向、门状态和请求清除控制。 buttonControl:按钮锁存与复位管理模块,处理外呼按钮和内部楼层选择按钮。 doorControl:电梯门控模块,处理开门、关门相关控制信号。 counter:移动计时模块,用于产生楼层移动完成信号。 segDisplay:七段数码管显示模块,根据当前状态显示楼层。 slowClock、slowishClock、FF:辅助时钟与触发器相关模块。 elevatorTop_tb:顶层仿真 Testbench。

开发板验证

本设计支持 DE2-115 开发板验证,工程中包含对应的 Quartus 管脚约束文件。顶层端口已分配到板载时钟、按键/拨码输入、LED 指示灯以及 HEX0 七段数码管相关管脚,可用于在 DE2-115 上观察电梯门状态、上/下行方向和当前楼层显示。 管脚约束覆盖 clk、reset、open_btn、close_btn、B1U 至 B4D 外呼输入、BF1 至 BF4 内选输入,以及 door_led、up_led、down_led 和 HEX0[6:0] 输出。适合下载到开发板后通过按键输入模拟楼层呼叫与轿厢选层操作。

演示视频

包含演示视频,可用于查看电梯控制系统在开发板或工程运行过程中的显示与按键响应效果。

仿真图/仿真说明/设计文档图片

设计文档内容覆盖工程文件、程序文件、程序编译、RTL 图、管脚分配、仿真图、Testbench、整体仿真图、楼层与方向状态机模块、电梯门控模块、移动计时模块和显示模块等内容,可用于理解工程结构、仿真流程和模块划分。

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image1.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image10.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image11.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image12.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image2.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image3.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image4.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image5.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image6.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image7.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image8.png

四层电梯控制系统 FPGA 设计 Verilog Quartus 设计文档图片 image9.png

部分代码

以下展示顶层模块 elevatorTop 的部分代码,完整源码请下载压缩包查看。

module elevatorTop (clk, reset, open_btn, close_btn,
                    B1U, B2D, B2U, B3D, B3U, B4D, BF1, BF2, BF3, BF4,
                    door_led, up_led, down_led, HEX0);
    // 输入端口与管脚映射(来源: elevatorTop.qsf)
    input clk;       // 时钟输入,PIN_Y2
    input reset;     // 复位,高电平有效,PIN_AB28
    input open_btn;  // 开门按钮,PIN_Y24
    input close_btn; // 关门按钮,PIN_Y23

    // 外呼与内选按钮输入
    input B1U; // 一楼上行外呼,PIN_AC28
    input B2D; // 二楼下行外呼,PIN_AC27
    input B2U; // 二楼上行外呼,PIN_AD27
    input B3D; // 三楼下行外呼,PIN_AB27
    input B3U; // 三楼上行外呼,PIN_AC26
    input B4D; // 四楼下行外呼,PIN_AD26
    input BF1; // 内选择 1 楼,PIN_AB26
    input BF2; // 内选择 2 楼,PIN_AC25
    input BF3; // 内选择 3 楼,PIN_AB25
    input BF4; // 内选择 4 楼,PIN_AC24

    // 输出端口与管脚映射(来源: elevatorTop.qsf)
    output door_led;  // 门指示灯,PIN_G19
    output up_led;    // 上行指示灯,PIN_F21
    output down_led;  // 下行指示灯,PIN_E19
    output [6:0] HEX0; // 数码管 HEX0[6:0]
    // HEX0 位到管脚:
    // HEX0[0] -> PIN_G18
    // HEX0[1] -> PIN_F22
    // HEX0[2] -> PIN_E17
    // HEX0[3] -> PIN_L26
    // HEX0[4] -> PIN_L25
    // HEX0[5] -> PIN_J22
    // HEX0[6] -> PIN_H22

    wire door, dir;
    wire [2:0] state;

    wire [9:0] resetButtons;
    wire openDoor, closeDoor, MoveCountDone, MoveCountEn;
    wire C1U, C2D, C2U, C3D, C3U, C4D, G1, G2, G3, G4;
    wire [7:0] seconds;
    // 楼层移动计时(单位:慢时钟周期)
    assign seconds = 2;

    // 指示灯映射
    assign door_led = door;
    assign up_led = (state[0] == 1) ? dir : 0;     // 运行时才亮
    assign down_led = (state[0] == 1) ? ~dir : 0;  // 运行时才亮

    // 楼层与方向状态机
    floorControl fc (clk, reset, openDoor, closeDoor,
                     C1U, C2D, C2U, C3D, C3U, C4D, G1, G2, G3, G4,
                     MoveCountDone, MoveCountEn, door, dir, state, resetButtons);

    // 按钮锁存与复位管理
    buttonControl bc ({B1U, B2D, B2U, B3D, B3U, B4D, BF1, BF2, BF3, BF4},
                      reset, resetButtons,
                      {C1U, C2D, C2U, C3D, C3U, C4D, G1, G2, G3, G4});

    // 门控:开门信号来自传感器/按钮,关门结合计时
    doorControl dc (reset, clk, open_btn, open_btn, close_btn, door, openDoor, closeDoor);

    // 移动计时
    counter moveCount (reset, clk, MoveCountEn, MoveCountDone, seconds);

    // 数码管编码:分离为独立显示模块,根据状态显示当前楼层
    segDisplay seg0 (clk, state, HEX0);
endmodule

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 四层电梯控制系统 FPGA 设计 Verilog Quartus

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员