出租车计费器 FPGA 设计 Verilog Quartus

名称:出租车计费器 FPGA 设计 Verilog Quartus

软件:Quartus

语言:Verilog

功能介绍

本设计为出租车计费器 FPGA 工程,使用 Verilog 编写并基于 Quartus 工程组织。系统围绕出租车行程计费场景设计,包含启动、停止、车轮脉冲输入、车辆行驶/等待状态判断、里程累计、等待时间累计、总费用输出以及数码管显示等功能。 工程顶层模块为 taxi_fee,外部输入包括 clk、reset、stop、start 和 pulse_in,其中 reset 为低有效复位,start 用于行程开始,stop 用于本次行程结束,pulse_in 表示车轮脉冲。输出端包含两组数码管段选和位选信号,可用于显示费用、里程和等待时间等计费相关信息。 计费逻辑通过多个功能模块协同完成:先根据车轮脉冲判断车辆是否处于行驶状态,再产生车轮计数脉冲和秒脉冲,随后转换为 1 公里触发信号和 1 分钟等待触发信号,最后由状态控制模块完成里程、等待时间和总费用的统计。该设计重点体现了出租车计费系统中“按里程计费”和“等待计时计费”的基本控制流程。

运行环境

开发语言:Verilog 开发软件:Quartus 仿真环境:ModelSim/Nativelink 相关仿真工程文件 工程类型:FPGA 数字逻辑设计工程 顶层模块:taxi_fee 主要文件:taxi_fee.v、judge.v、wheel_second_pluse.v、speed_pulse.v、taxi_state.v、display.v

设计思路

设计采用分层模块化思路,将出租车计费过程拆分为车辆状态判断、脉冲生成、里程/等待时间换算、计费控制和数码管显示几个部分。顶层模块 taxi_fee 负责连接外部时钟、复位、启动、停止、车轮脉冲输入以及两组数码管输出,各子模块之间通过 one_kilometre、one_minute、mileage、minute_time、totel_money 等信号传递运行状态和计费数据。 车辆运行状态由 judge 模块根据车轮脉冲进行判断,Speed 信号用于区分等待和行驶状态。wheel_second_pluse 模块在 Speed 状态和 pulse_in 输入的配合下输出车轮脉冲与秒脉冲,其中车轮脉冲用于里程累计,秒脉冲用于等待时间累计。speed_pulse 模块进一步把底层脉冲整理为“1公里产生一次”和“等待1分钟产生一次”的计费触发信号。 taxi_state 模块承担核心计费控制功能,结合 start、stop、Speed、one_kilometre、one_minute 等输入完成行程过程中的里程、等待时间和总费用更新。display 模块将费用、里程、等待时间转换为数码管段选和位选输出,适合用于观察计费结果和运行过程。整体结构清晰,适合课程设计、模块化 Verilog 练习和出租车计费逻辑仿真参考。

模块结构

工程主要模块包括: 1. taxi_fee:顶层模块,连接启动、停止、复位、车轮脉冲输入以及数码管显示输出,完成各子模块例化和信号互联。 2. judge:车辆状态判断模块,通过对车轮脉冲计数判断出租车是否停下,输出 Speed 状态信号,Speed 为 0 表示等待,Speed 为 1 表示行驶。 3. wheel_second_pluse:车轮脉冲和秒脉冲产生模块,根据输入脉冲和车辆状态输出 wheel_pulse、second_pulse。 4. speed_pulse:1 公里及 1 分钟信号产生模块,将车轮脉冲和秒脉冲转换为 one_kilometre、one_minute 计费触发信号。 5. taxi_state:计费控制模块,根据启动、停止、行驶状态、里程触发和等待时间触发信号,输出等待时间、里程和总费用。 6. display:显示模块,将费用、里程、等待时间转换为数码管段选和位选信号。 同时包含 speed_pulse_tb、display_tb、judge_tb、wheel_second_pluse_tb、taxi_state_tb 等测试文件,便于分别验证功能模块。

演示视频

配套演示视频展示了出租车计费工程的仿真运行过程,可用于直观看到启动、行驶脉冲、等待计时以及费用显示相关信号在仿真中的变化情况,便于下载后对照工程进行学习和验证。

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

设计说明:

工程文件

程序文件

程序编译

RTL图

Testbench

仿真图
整体仿真图

判断模块
判断模块,通过对车轮脉冲进行计数判断出租车是否停下
Speed==0:等待 1:行驶

秒脉冲即车轮输出模块

1公里及1分钟信号产生模块

计费控制模块

显示模块

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image18.png

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image17.png

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image16.png

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image15.png

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image14.png

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image13.png

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image12.png

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image11.png

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image1.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 设计文档图片 image10.png

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image9.png

出租车计费器 FPGA 设计 Verilog Quartus 设计文档图片 image2.png

部分代码

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

module taxi_fee(
input clk,//时钟
input reset,//复位信号,低有效 
input stop,//本次行程结束,停止计费,高有效--按键
input start,//启动信号,行程开始,高有效 --按键
input pulse_in,//车轮脉冲

//数码管
output   [7:0] dig_led_1,//数码管段选
output   [3:0] wei_led_1,//数码管位选
output   [7:0] dig_led_2,//数码管段选
output   [3:0] wei_led_2//数码管位选,高电平点亮,高电平选通
);

wire wheel_pulse;
wire second_pulse;

wire Speed;//0:等待  1:行驶--开关
//判断模块,通过对车轮脉冲进行计数判断出租车是否停下
judge i_judge(
. clk(clk),//时钟
. reset(reset),//复位信号,低有效 
. pulse_in(pulse_in),//车轮脉冲
. Speed(Speed)//0:等待  1:行驶
);

//车轮脉冲产生及秒脉冲产生模块
wheel_second_pluse i_wheel_second_pluse(
. clk(clk),//标准时钟
. reset(reset),//复位信号,低有效 
. Speed(Speed),//0:等待  1:行驶
. pulse_in(pulse_in),//车轮脉冲
. wheel_pulse(wheel_pulse), // 车轮脉冲,10个1公里
. second_pulse(second_pulse) //秒脉冲
);


//模块例化
wire one_kilometre;//1公里产生一次
wire one_minute;//暂停等待,1分钟产生一次
wire [15:0] totel_money;
wire [7:0] mileage;
wire [7:0] minute_time;
//1公里及1分钟信号产生模块
speed_pulse U_speed_pulse(
. clk(clk),//标准时钟
. reset(reset),//复位信号,低有效 
. wheel_pulse(wheel_pulse), // 车轮脉冲,10个1公里
. second_pulse(second_pulse), //秒脉冲
. one_kilometre(one_kilometre),//1公里产生一次
. one_minute(one_minute)//1分钟产生一次
);

//状态控制模块
taxi_state U_taxi_state(
. clk(clk),//标准时钟
. reset(reset),//复位信号,低有效 

. stop(stop),//本次行程结束,停止计费,高有效
. start(start),//启动信号,行程开始,高有效 

. Speed(Speed),//0:等待  1:行驶

. one_kilometre(one_kilometre),//1公里产生一次
. one_minute(one_minute),//1分钟产生一次

. minute_time(minute_time),
. mileage_out(mileage),
. totel_money_out(totel_money)//合计费用
);

//显示模块
display U_display(
. clk(clk),//标准时钟
. reset(reset),//复位信号,低有效 

. totel_money(totel_money),//费用
. mileage(mileage),//里程
. minute_time(minute_time),

. dig_led_1(dig_led_1),
. wei_led_1(wei_led_1),
   
. dig_led_2(dig_led_2),
. wei_led_2(wei_led_2)//高电平点亮,高电平选通
);




endmodule

代码文件(付费下载)

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

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

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