洗衣机控制系统 FPGA 设计 Verilog Quartus

发布时间:2026/6/8 3:12:05
洗衣机控制系统 FPGA 设计 Verilog Quartus
名称洗衣机控制系统 FPGA 设计 Verilog Quartus软件Quartus语言Verilog开发板/平台DE2-115功能介绍本项目实现了一个基于 FPGA 的洗衣机控制系统使用 Verilog 编写并在 Quartus 工程中完成设计。系统模拟洗衣机的完整工作流程包括启动、洗涤、暂停、清洗、暂停、脱水、暂停和结束等阶段并通过 LED 与数码管直观显示当前状态和剩余时间。 设计支持 4 种工作模式正常模式、单独洗涤、单独清洗和单独甩干。正常模式用于演示完整洗衣流程单独模式便于分别验证洗涤、清洗、甩干控制逻辑。用户可通过按键完成复位、启动、模式切换和停止控制mode_led 用于显示当前模式。 系统使用 50MHz 主时钟内部实现精确到秒的倒计时控制。4 位数码管以分:秒格式显示剩余时间LED 分别模拟电机正转、暂停、反转和结束提示。该设计适合用于 FPGA 课程设计、数字逻辑综合实验、状态机设计学习以及开发板综合验证。运行环境开发语言Verilog 开发软件Quartus 目标开发板DE2-115 主要时钟50MHz 工程内容包含 Quartus 工程文件、Verilog 源码、管脚约束、编译输出文件、仿真相关文件和设计文档。设计思路系统采用模块化设计思路将洗衣机控制任务拆分为顶层互联、流程控制和显示驱动三个部分。顶层模块负责统一对外接口将 50MHz 时钟、复位、启动、模式切换和停止按键接入控制逻辑同时把控制模块输出的时间数据送入显示模块最终驱动 LED 和 4 位数码管。 核心控制部分围绕有限状态机实现。系统包含空闲、启动、洗涤、暂停、清洗、脱水、结束以及单独洗涤、单独清洗、单独甩干等状态通过 start_n、mode_key、stop_key 等按键完成状态切换。正常模式下按洗涤、暂停、清洗、暂停、脱水、暂停、结束的顺序执行单独模式下则只执行对应功能便于独立测试或演示某一段流程。 时间控制使用 50MHz 主时钟分频产生 1 秒节拍再由分钟和秒钟计数器实现倒计时显示。正常模式总流程按分钟秒钟方式显示剩余时间洗涤、清洗、甩干以及各暂停阶段均由控制模块统一调度。 电机动作通过 LED 进行模拟显示。洗涤阶段按正转、暂停、反转的周期运行清洗阶段采用另一组正转、暂停、反转节奏甩干阶段持续正转。结束后 end_led 点亮提示流程完成。模块结构系统主要由 3 个 Verilog 模块组成 1. wash_machine顶层模块负责系统接口定义、显示模块和控制模块的实例化以及分钟、秒钟等内部信号连接。 2. wash_ctrl洗衣机控制模块负责核心状态机、模式选择、倒计时控制、电机动作控制和 LED 状态输出。 3. display数码管显示模块负责将分钟、秒钟时间转换为 4 位数码管显示所需的段码输出用于显示剩余时间。开发板验证本设计支持 DE2-115 开发板验证工程中已完成对应的 Quartus 管脚约束与分配可直接结合板载按键、LED 和数码管进行功能观察。 上板操作时先按下复位键使系统进入初始状态。若选择正常洗衣流程直接按下 start 键系统开始执行完整流程洗涤、暂停、清洗、暂停、脱水、暂停并最终结束。运行过程中 4 位数码管显示剩余分钟和秒钟LED 用于指示正转、暂停、反转以及结束状态。 若需要单独执行洗涤、清洗或甩干可在复位后通过 mode_key 切换模式mode_led 显示当前模式00 为正常模式01 为单独洗涤10 为单独清洗11 为单独甩干。选择模式后按 start 键启动对单独模式可通过 stop_key 停止。演示视频配套演示视频展示了洗衣机控制系统的运行过程可用于观察复位、启动、模式切换、倒计时显示、LED 状态指示以及结束提示等功能表现。演示视频请关注公众号后获取对应资料查看。仿真图/仿真说明/设计文档图片设计文档中包含工程文件、程序编译、RTL 图、管脚分配、Testbench、整体仿真图、控制模块和显示模块等内容可用于理解工程结构、状态机实现和显示驱动逻辑。仿真相关文件位于 ModelSim 仿真目录可作为功能验证和二次修改时的参考。部分代码以下展示顶层模块wash_machine的部分代码完整代码可关注下方公众号卡片获取。module wash_machine( clk_50M, reset_n, start_n, mode_key, stop_key, end_led, led_1, led_2, led_3, HEX0, HEX1, HEX2, HEX3, mode_led ); input wire clk_50M; // 50MHz 时钟信号 input wire reset_n; // 复位信号低电平有效 input wire start_n; // 启动按键低电平有效 input wire mode_key; // 模式切换按键 input wire stop_key; // 停止按键 output wire end_led; // 结束指示灯 output wire led_1; // 电机正转指示灯 output wire led_2; // 电机暂停指示灯 output wire led_3; // 电机反转指示灯 output wire [7:0] HEX0; // 数码管0显示秒个位 output wire [7:0] HEX1; // 数码管1显示秒十位 output wire [7:0] HEX2; // 数码管2显示分个位 output wire [7:0] HEX3; // 数码管3显示分十位 output wire [1:0] mode_led; // 模式指示灯 wire [7:0] minute_time; // 分钟时间 wire [7:0] second_time; // 秒钟时间 // 实例化显示模块用于驱动数码管显示剩余时间 display b2v_inst( .clk(clk_50M), .minute_time(minute_time), .second_time(second_time), .HEX0(HEX0), .HEX1(HEX1), .HEX2(HEX2), .HEX3(HEX3)); // 实例化洗衣机控制模块负责核心逻辑控制 wash_ctrl b2v_inst2( .clk_50M(clk_50M), .reset_n(reset_n), .start_n(start_n), .mode_key(mode_key), .stop_key(stop_key), .end_led(end_led), .led_1(led_1), .led_2(led_2), .led_3(led_3), .minute_out(minute_time), .mode_led(mode_led), .second_out(second_time)); endmodule代码获取点击下方公众号卡片