六层电梯控制系统 Verilog Quartus

名称:六层电梯控制系统 Verilog Quartus

软件:Quartus

语言:Verilog

开发板/平台:Cyclone IV FPGA开发板

功能介绍

该工程实现一个六层电梯控制系统,支持 1~6 层轿厢内选层,以及 1~5 层上行外呼和 2~6 层下降外呼。系统对按键进行同步、边沿检测和楼层编码,分别锁存各类请求,并按照当前楼层与运行方向安排后续状态。 顶层 elevator 集成运行控制、数码管楼层显示、方向状态 LED、开门/关门指示和蜂鸣器报警。forbid、故障、超重及障碍物输入可使电梯暂停运行,适合用于 FPGA 电梯控制、有限状态机和多模块 Verilog 工程学习。

运行环境

Verilog HDL,使用 Quartus 工程文件进行编译与配置,顶层模块为 elevator。工程包含 .qpf、.qsf、v4_pins.qsf 等项目与管脚分配文件,目标硬件为 Cyclone IV FPGA 开发板。

设计思路

系统采用分层模块化的 Verilog 设计,将按键输入、请求锁存、运行控制、状态机、楼层译码、时钟分频和报警功能拆分实现。外部上升与下降请求分别由 up_manager、down_manager 管理,轿厢内选层请求由 st_manager 锁存;key_logic 将低有效独立按键转换为楼层编码和请求脉冲,便于复用既有请求处理接口。 顶层通过 nextgen 根据当前楼层、运行方向和三类请求生成次态,再由 statemachine 保存电梯运行状态。divider 将系统时钟转换为电梯运行所需的慢速时钟,并把禁止运行、故障、超重和障碍物条件统一纳入暂停控制。position 与 pos_decoder 配合完成楼层显示,alarm、open_led、close_led 和 led 输出用于反映报警、开关门及运行方向状态。

模块结构

顶层模块为 elevator,主要由 key_logic、divider、up_manager、down_manager、st_manager、nextgen、statemachine、pos_decoder、state_decoder 和 alarm 等模块组成。key_logic 负责按键脉冲与楼层编码,三个 manager 模块负责不同来源的请求锁存和清除,nextgen 与 statemachine 完成状态转移控制。 工程同时包含 tb_elevator 测试平台,以及楼层译码、状态译码和时钟分频等配套模块。部分工程版本还集成 ap3216c_if、ap3216c 与 i2c_dri 接口模块,可结合项目目录中的源码进行扩展和学习。

开发板验证

工程配套 Cyclone IV FPGA 开发板的管脚约束与分配文件,可用于完成上板连接与验证。顶层模块提供系统时钟、复位、上下行外呼按键、轿厢内选层按键、故障、超重和障碍物输入,并输出楼层数码管、运行状态 LED、开关门指示及蜂鸣器信号。故障、超重或检测到障碍物时,系统可暂停电梯运行并配合报警逻辑进行状态提示。

演示视频

提供上板演示视频和演示视频,用于观察六层电梯控制系统的按键请求、楼层运行、状态指示、开关门显示及报警输出等实际演示过程。

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

配套设计文档包含工程文件说明、程序编译、RTL 图、管脚分配、传感器连接关系,以及整体仿真图和按键处理、分频器、上升请求、下降请求、轿厢内请求、次态生成、状态机、楼层译码和报警模块说明。文档图片可用于配合源码理解模块连接和控制流程。

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

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

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

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

六层电梯控制系统 Verilog Quartus 设计文档图片 image13.png

六层电梯控制系统 Verilog Quartus 设计文档图片 image14.png

六层电梯控制系统 Verilog Quartus 设计文档图片 image15.png

六层电梯控制系统 Verilog Quartus 设计文档图片 image16.png

六层电梯控制系统 Verilog Quartus 设计文档图片 image17.png

六层电梯控制系统 Verilog Quartus 设计文档图片 image18.png

六层电梯控制系统 Verilog Quartus 设计文档图片 image19.png

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

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

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

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

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

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

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

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

部分代码

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

module elevator (
    input        SYSCLKOUT,       // 系统时钟(例如 50MHz)
    input        forbid,          // 禁止运行信号,高电平时电梯停止(时钟被屏蔽)
    input        reset,           // 异步复位按键,高电平有效
    input  [4:0] up_key_n,        // 楼层外部上升请求按键,低电平表示按下,对应 1~5 层
    input  [4:0] down_key_n,      // 楼层外部下降请求按键,低电平表示按下,对应 2~6 层(1 楼无下降键)
    input  [5:0] in_key_n,        // 轿厢内部楼层请求按键,低电平表示按下,对应 1~6 层
    input        fault_sw,        // 故障拨码开关,高电平表示有故障
    input        overload_sw,     // 超重拨码开关,高电平表示超重
    input        obstacle_sw,     // 障碍物拨码开关,高电平表示检测到障碍物

    output [5:0] en,              // 数码管位选,固定 6'b111110(低电平选中一位)
    output [6:0] pos_out,         // 当前楼层显示输出到数码管
    output [5:0] led,             // 状态 LED 显示:上行或下行,低电平点亮
    output       open_led,        // 开门指示 LED,低电平点亮
    output       close_led,       // 关门指示 LED,低电平点亮
    output       beep             // 蜂鸣器输出,报警时为方波
);

    // 内部连接信号定义
    wire       CLKOUT;            // 分频后的慢速时钟(约 0.5Hz)
    wire [5:0] position;          // 电梯当前位置(独热码,一位表示一层)
    wire [5:0] posout;            // 用于显示的楼层位置
    wire [1:0] updnflag;          // 电梯运行方向标志
    wire [5:0] currentstate;      // 电梯当前状态(由状态机输出)
    wire [5:0] nextstate;         // 电梯次态(由组合逻辑 nextgen 产生)
    wire [2:0] count;             // OPENWAIT 状态计数值

    // 内部请求信号:仍然使用 6 位向量表示 1~6 楼的请求
    wire [5:0] up_request;        // 锁存的上升方向外呼请求
    wire [5:0] down_request;      // 锁存的下降方向外呼请求
    wire [5:0] st_request;        // 锁存的轿厢内楼层请求

    // 来自按键信号处理模块的输出:
    // 为了复用原有的 up_manager / down_manager / st_manager 接口,
    // 将独立按键转换为“按键脉冲 + 楼层编码”的形式。
    wire       up_button;        // 上升请求脉冲
    wire       down_button;      // 下降请求脉冲
    wire       request_button;   // 车内楼层请求脉冲
    wire [2:0] floorsel_up;      // 上升请求使用的楼层编码
    wire [2:0] floorsel_down;    // 下降请求使用的楼层编码
    wire [2:0] floorsel_in;      // 车内楼层请求使用的楼层编码

    // 数码管位选:固定点亮 1 位,低电平选中
    assign en = 6'b111110;

    // 按键处理模块:
    // 在独立按键基础上完成同步、消抖(简化为边沿检测)和楼层编码。
    key_logic k1 (
        .SYSCLKOUT     (SYSCLKOUT),
        .reset         (reset),
        .up_key_n      (up_key_n),
        .down_key_n    (down_key_n),
        .in_key_n      (in_key_n),
        .up_button     (up_button),
        .down_button   (down_button),
        .request_button(request_button),
        .floorsel_up   (floorsel_up),
        .floorsel_down (floorsel_down),
        .floorsel_in   (floorsel_in)
    );

    // 分频器模块:
    // 将高速系统时钟 SYSCLKOUT 分频得到慢速时钟 CLKOUT。
    // forbid_eff 为 1 时,输出时钟被屏蔽,相当于电梯暂停运行。
    // 这里将 forbid、障碍物、故障、超重四种情况统一视为“暂停”条件。
    wire forbid_eff = forbid | obstacle_sw | fault_sw | overload_sw;
    divider d1 (
        .SYSCLKOUT (SYSCLKOUT),
        .forbid    (forbid_eff),
        .CLKOUT    (CLKOUT)
    );

    // 上升请求处理模块:
    // 接收各楼层的上升外呼请求,并根据当前状态、方向等在适当时机清除请求
    up_manager u1 (
        .reset        (reset),
        .st_request   (st_request),
        .down_request (down_request),
        .floorsel     (floorsel_up),
        .up_button    (up_button),
        .position     (position),
        .currentstate (currentstate),
        .up_request   (up_request),
        .updnflag     (updnflag)
    );

    // 下降请求处理模块:
    // 接收各楼层的下降外呼请求,并根据当前状态、方向等在适当时机清除请求
    down_manager d2 (
        .reset        (reset),
        .st_request   (st_request),
        .up_request   (up_request),
        .floorsel     (floorsel_down),
        .down_button  (down_button),
        .position     (position),
        .currentstate (currentstate),
        .down_request (down_request),
        .updnflag     (updnflag)
    );

    // 轿厢内楼层请求处理模块:
    // 根据车内楼层请求按键 in_key_n 的“按下沿”编码为 floorsel_in,
    // 锁存车内请求,当电梯在某层开门时自动清除该层请求
    st_manager s1 (
        .reset          (reset),
        .floorsel       (floorsel_in),
        .request_button (request_button),
        .position       (position),
        .currentstate   (currentstate),
        .st_request     (st_request)
    );

    // 次态生成模块:
    // 根据当前状态、当前楼层位置以及三种请求信号,按照“方向优先”原则
    // 计算电梯下一时刻应该处于的状态 nextstate
    nextgen n1 (
        .up_request   (up_request),
        .down_request (down_request),
        .st_request   (st_request),
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

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

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

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