停车场车位计数控制 FPGA 设计 Verilog Quartus
名称停车场车位计数控制 FPGA 设计 Verilog Quartus软件Quartus语言Verilog开发板/平台Cyclone IV FPGA开发板功能介绍本设计实现一个停车场车位计数控制系统使用 Verilog 语言完成 FPGA 逻辑设计工程环境为 Quartus。系统通过入口按键和出口按键模拟车辆进出停车场经过按键消抖后送入计数模块实现车辆数量的同步统计。 系统输出包含停车场满位指示、空位指示、蜂鸣器报警以及数码管显示。当剩余车位为 0、停车场达到满位状态时满位 LED 可用于状态提示同时蜂鸣器输出报警信号当停车场无车辆时空位 LED 可用于提示当前车辆数为 0。车辆数量通过数码管动态扫描方式显示便于在开发板上直观看到计数变化。 该设计适合作为 FPGA 入门综合实验、数字逻辑课程设计或 Verilog 工程实践案例覆盖按键输入处理、状态计数、LED/蜂鸣器输出控制、数码管显示以及顶层模块例化等常见 FPGA 设计内容。运行环境开发语言Verilog 开发软件Quartus 目标平台Cyclone IV FPGA开发板 顶层模块park_station_top 工程包含可综合 Verilog 源码、Quartus 工程配置、管脚约束、Testbench、编译结果以及设计说明相关内容。设计思路系统采用模块化设计思路将停车场计数功能拆分为按键消抖、车辆计数控制和数码管显示三个主要部分。入口按键和出口按键作为外部机械输入先经过消抖模块处理避免按键抖动导致一次按下被重复计数从而提升计数结果的稳定性。 车辆计数模块负责核心控制逻辑在时钟驱动下根据入口信号和出口信号更新当前车辆数量并结合复位信号完成初始状态恢复。计数结果同时用于驱动满位指示、空位指示和蜂鸣器控制当车辆数达到系统设定的边界状态时输出对应的提示信号避免出现超范围计数带来的显示和状态错误。 显示部分采用数码管动态扫描方式将车辆数量转换为段选和位选输出。顶层模块负责连接各功能模块将消抖后的入口/出口信号送入计数模块再把计数结果送入显示模块同时把 LED、蜂鸣器和数码管接口统一引出便于工程综合、管脚分配和上板验证。模块结构主要模块包括 park_station_top顶层模块完成时钟、复位、入口/出口按键、LED、蜂鸣器和数码管接口连接并例化各子模块。 key_debounce按键消抖模块对入口按键和出口按键分别进行抖动滤除输出稳定的按键信号。 park_station停车场计数模块根据入口、出口按键状态更新车辆总数并输出满位、空位和蜂鸣器控制信号。 display数码管显示模块对车辆数量进行动态扫描显示输出位选和段选信号。 park_station_top_tb顶层仿真 Testbench用于对顶层停车场计数流程进行仿真验证。开发板验证本设计支持 Cyclone IV FPGA开发板验证工程中包含面向开发板的管脚约束/分配文件并配套 AC101 开发板相关实物和引脚参考图片。入口按键、出口按键、复位按键、LED、蜂鸣器以及数码管接口均通过顶层端口引出便于在开发板上进行停车场进出计数、满位/空位状态提示和数码管显示效果验证。演示视频包含演示视频可用于查看停车场计数控制在开发板上的运行效果包括按键模拟车辆进出、数码管车辆数量变化、LED 状态提示和蜂鸣器报警等现象。演示视频请关注公众号后获取对应资料查看。仿真图/仿真说明/设计文档图片包含设计文档相关图片内容覆盖工程文件、程序文件、程序编译、RTL 图、管脚分配、仿真图、Testbench、顶层仿真、按键消抖模块、停车场计数模块和显示模块等说明。仿真内容可用于理解顶层信号连接、按键输入处理、车辆计数变化以及显示输出逻辑。部分代码以下展示顶层模块park_station_top的部分代码完整代码可关注下方公众号卡片获取。module park_station_top( input clk,//输入时钟 input rst_n,//低电平复位--key0 input a_key,//入口--key1 input b_key,//出口--key2 output full_led,//停车场满高电平亮led0 output empty_led,//停车场空高电平亮led1 output beep ,//剩余车位为0时停车场满,蜂鸣器报警。高电平时不响输出1KHz响 output [7:0] weixuan,//数码管位选高电平选择 output [7:0] duanxuan//数码管段选 ); //消抖后的按键信号 wire a;//入口按键消抖后 wire b;//出口按键消抖后 //车辆计数输出 wire [7:0] cnt_car_num;//车辆总数 //入口按键消抖 key_debounce u_key_a( .clk(clk), .button_in(a_key), .button_jitter(a) ); //出口按键消抖 key_debounce u_key_b( .clk(clk), .button_in(b_key), .button_jitter(b) ); //车辆计数模块同步低电平复位 park_station u_counter( .clk(clk), .rst_n(rst_n), .a(a), .b(b), .cnt_car_num(cnt_car_num), .full_led(full_led), .empty_led(empty_led), .beep(beep) ); //数码管显示模块动态扫描显示车辆数 display u_display( .clk(clk), .cnt_car_num(cnt_car_num), .weixuan(weixuan), .duanxuan(duanxuan) ); endmodule点击下方公众号卡片关注获取代码