fpga出租车计费器
### FPGA出租车计费器知识点详解 #### 一、实验任务及要求 本实验的主要目标是设计一个基于FPGA(Field Programmable Gate Array,现场可编程门阵列)的出租车计费系统,具体要求包括: 1. **计费功能:** - 实现按行驶里程收费的功能,起步价为6元人民币,在车辆行驶3公里之后,按照1.2元/公里的标准进行计费。 - 当计费总额达到或超过20元时,后续每公里的计费标准提高至原价的150%(即1.8元/公里)。 - 在车辆静止或暂停状态下不进行计费。 2. **模拟功能:** - 能够模拟汽车的各种运行状态,包括启动、停止、暂停以及不同速度的挡位切换。 3. **显示功能:** - 设计动态扫描电路,用于实时显示当前的计费金额和行驶里程,显示精度需达到两位小数。 4. **编程语言:** - 使用Verilog HDL硬件描述语言编写所有模块的代码。 5. **功能验证:** - 对各个计数器的计数状态进行功能仿真,并通过波形分析确保电路设计的正确性。 6. **实际测试:** - 完成电路设计后,通过系统实验箱下载程序进行实际测试,验证设计的有效性和准确性。 #### 二、实验原理 在设计过程中,采用了以下几个关键元素: 1. **按键与信号:** - **启动键:**作为脉冲触发信号,高电平表示车辆已启动。 - **停止键:**高电平信号表示车辆停止,此时计费和计程均停止并清零。 - **暂停键:**高电平信号表示车辆暂停,暂停期间计费和计程保持不变。 - **挡位键:**控制不同的挡位,不同挡位下计程的速度不同。 2. **模块划分:** - **控制模块:**负责计费逻辑和计程逻辑,根据挡位调整计程速度。 - **译码显示模块:**实现十进制数到BCD码的转换,并显示计费金额和行驶里程。 #### 三、程序分析 下面是对部分提供的控制模块程序进行的详细分析: ```verilog module taxi(money, distance, clk, start, stop, pause, speedup); input clk; // 计费时钟 input start; // 汽车启动 input stop; // 汽车停止 input pause; // 汽车暂停 input [1:0] speedup;// 挡位4档位 output [12:0] money;// 车费 output [12:0] distance;// 路程 reg [12:0] money; // 车费寄存器 reg [12:0] distance; // 路程寄存器 reg [3:0] num; // 控制车速的计数器 reg [12:0] dis; // 千米计数器 reg d; // 千米标志位 ``` 1. **输入输出定义:** - `clk`:计费时钟信号。 - `start`、`stop`、`pause`:分别代表启动、停止、暂停的控制信号。 - `speedup`:表示挡位选择的2位输入。 - `money`、`distance`:分别为计费金额和行驶里程的输出。 2. **状态机逻辑:** - 根据`start`、`stop`、`pause`、`speedup`的状态变化,更新`money`和`distance`。 - 不同的挡位对应不同的计程速度,例如: - 第一挡(未启用任何挡位键):每次计数增加1。 - 第二挡(`speedup=='b01`):每次计数增加2。 - 第三挡(`speedup=='b10`):每次计数增加5。 - 第四挡(`speedup=='b11`):每次计数增加2。 3. **计费逻辑:** - 在行驶3公里之前,计费金额保持在起步价6元。 - 超过3公里后,按照1.2元/公里进行计费。 - 当计费总额达到20元及以上时,后续每公里的计费标准变为1.8元/公里。 通过上述分析可以看出,该FPGA出租车计费器的设计充分考虑了实际应用中的多种情况,采用Verilog HDL语言实现了计费、计程等功能,并通过功能仿真和实际测试确保了设计的可靠性。
剩余6页未读,继续阅读
- hehanrong12342013-05-30总的来说不错,能实现简单功能,程序看得懂
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助