名称:出租车计费系统 FPGA 设计 Verilog Quartus
软件:Quartus
语言:Verilog
开发板/平台:Cyclone IV FPGA开发板
功能介绍
本设计实现了一个基于 FPGA 的出租车计费系统,使用 Verilog 语言在 Quartus 环境下完成工程设计。系统通过启动信号开始计费,通过停止计费信号结束当前计费过程,并使用运行指示灯表示车辆处于行驶/计费状态。
计费过程中,系统内部产生公里使能信号,用于推动里程累计和费用计算;当前里程与计费金额通过数码管进行显示。顶层接口包含时钟、复位、启动、停止、LED 指示和数码管控制信号,便于在 FPGA 开发板上完成完整的输入控制与显示验证。
该工程适合用于 FPGA 课程设计、数字逻辑综合实验、Verilog 状态机练习以及出租车计价器类项目参考。设计内容覆盖顶层例化、状态控制、脉冲产生、费用/里程输出和数码管显示等常见 FPGA 实验知识点。
运行环境
开发语言:Verilog
开发软件:Quartus
适用平台:Cyclone IV FPGA 开发板
工程包含 Quartus 工程文件、Verilog 源码、管脚约束文件、编译输出文件以及演示视频,可用于综合编译、上板验证和课程设计参考。
设计思路
设计以出租车计费流程为核心,将系统划分为状态控制、速度/里程脉冲产生和数码管显示三个主要部分。顶层模块统一接入 50MHz 系统时钟、复位、启动和停止控制信号,并向外输出行驶指示灯及数码管扫描信号,使逻辑功能和开发板外设连接保持清晰。
状态控制模块负责根据启动计费、停止计费等输入切换当前工作状态,并在有效行驶状态下累计里程和费用。速度脉冲产生模块在对应状态下生成公里计数使能信号,相当于把车辆行驶过程抽象成周期性的里程增量,便于在 FPGA 上进行可观察、可验证的计费演示。
显示部分接收里程与费用数据,通过动态扫描方式驱动多位数码管,将出租车行驶距离和计费金额实时显示出来。整体结构层次明确,适合学习 Verilog 模块化设计、状态机控制、计数逻辑、数码管动态显示以及 Quartus 工程综合实现流程。
模块结构
工程顶层模块为 taxi_charge_top,主要由以下模块组成:
1. taxi_charge_top:系统顶层模块,连接外部时钟、复位、启动/停止控制、运行指示灯和数码管显示接口,并完成各功能模块例化。
2. state_machine:状态控制模块,根据启动计费、停止计费和公里使能信号控制当前状态,输出里程和费用数据。
3. pluse_generate:速度脉冲产生模块,在运行状态下产生公里计数使能信号,同时控制 running_led 行驶指示输出。
4. display:数码管显示模块,对里程和费用数据进行动态扫描显示,输出位选 bit_select 和段选 seg_select 信号。
开发板验证
工程支持在 Cyclone IV FPGA 开发板上进行上板验证,设计中提供了管脚约束/分配文件,顶层接口包含 50MHz 时钟、低有效复位、启动计费、停止计费、行驶指示灯以及数码管位选/段选信号,便于直接连接开发板按键、LED 与数码管资源进行功能演示。
上板运行时,可通过启动信号进入计费流程,运行指示灯用于表示车辆行驶状态;停止计费后,数码管保持显示当前里程与费用结果,适合课程设计、FPGA 数字系统实验和出租车计费逻辑验证场景。
演示视频
包含出租车计费系统演示视频,可直观看到启动计费、行驶状态指示、里程与费用数码管显示等运行效果,便于下载前了解工程的实际展示方式。
演示视频请点击左下角阅读原文查看。
仿真图/仿真说明/设计文档图片
设计文档中包含工程文件、程序文件、程序编译、RTL 图、Testbench、顶层仿真图以及状态控制模块、速度脉冲产生模块、数码管显示模块等相关说明图片,可用于理解系统结构、仿真验证过程和各模块之间的连接关系。
部分代码
以下展示顶层模块 taxi_charge_top 的部分代码,完整源码请下载压缩包查看。
module taxi_charge_top( input clk_50M,//50M时钟 input rst_n,//复位信号S1 input charge_end,//停止计费 input charge_begin,//启动信号,开始计费 output running_led,//高电平行驶指示灯 //数码管控制信号 output [6:0] bit_select,//数码管位选 output [7:0] seg_select//数码管段选 ); wire [7:0] distance_out;//距离 wire [15:0] charging_money_out;//费用 wire kilometre_en; wire [2:0] state_in; //状态控制模块 state_machine i_state_machine( . clk_50M(clk_50M),//50M时钟 . rst_n(rst_n),//复位信号 . charge_end(charge_end),//停止计费,高有效 . charge_begin(charge_begin),//启动信号 . state_in(state_in),//当前状态 . kilometre_en(kilometre_en),//1公里产生一次 . distance_out(distance_out),//距离 . charging_money_out(charging_money_out)//费用 ); //速度脉冲产生模块 pluse_generate i_pluse_generate( . clk_50M(clk_50M),//50MHz . rst_n(rst_n),//复位低有效 . state_in(state_in),//当前状态 . running_led(running_led),//指示灯 . kilometre_en(kilometre_en)//1公里产生一次 ); //数码管显示模块 display i_display( . clk(clk_50M), . distance_out(distance_out),//距离 . charging_money_out(charging_money_out),//费用 . bit_select(bit_select),//数码管位选 . seg_select(seg_select)//数码管段选 ); endmodule
代码获取:点击原文【来源:www.hdlcode.com】
39