电子设计课设报告
出租车计价器设计
摘要
介绍了出租车计费器系统的组成及工作原理,简述了在 EDA 平台上用 FPGA
器件构成该数字系统的设计思想和实现过程。论述了计程模块,计费模块,计时
模块,译码动态扫描模块等的设计方法与技巧。
Abstract
The taxi fare register system is introduced in this paper the composition and
working principle of FPGA device in EDA platform are briefly discussed with the
structure of the digital system design ideas and implementation process. Discusses the
log module, billing module, timing module, decoding the dynamic scanning module
design method and technique.
1.引言:
随着 EDA 技术的高速发展,电子系统的设计技术发生了深刻的变化,大规模
可编程逻辑器件 CPLD/FPGA 的出现,给设计人员带来了诸多方便。利用它进行
产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。本文介
绍了一个以 Altera 公司可编程逻辑芯片 cyclone2 系列的 EP2C5T144C8 的 fpga
芯片为控制核心、附加一定外围电路组成的出租车计费器系统。随着社会的不断
进步,人们生活水平的不断提高,出租车逐渐成为人们日常生活不可缺少的交通
工具。而计价器作为出租车的一个重要组成部分,关系着出租车司机和乘客双方
利益,起着重要的作用,因而出租车计价器的发展非常迅猛。
2.系统规范:
2.1 出租车计价器的要求:
该计价器的计费系统:行程 3 公里(不含 3 公里)内,且等待累计时间 2 分钟
内(不含 2 分钟),起步费为 10 元;3 公里外以每公里 1.6 元计费,等待累计时
间 2 分钟外以每分钟以 1.5 元计费。
并能显示行驶公里数、等待累计时间、总费用。
主要技术指标
计价范围:0~999.9 元 计价分辨率: 0.1 元
计程范围:0~99 公里 计程分辨率: 1 公里
计时范围:0~59 分 计时分辨率: 分
2.2 ,系统组成框图:
出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,
里程计数器和时间计数器从0开始计数,费用计数器从6开始计算。再根据行驶里
程或停止等待的时间按以上的标准计费。若在行驶状态,则计程器开始加计数,
当路程超过二公里后,计费器以每公里1.6元累加。若出租车停止等待状态,则
计时器开始加计数,当时间超过三分钟后,计费器以每分钟1.2元累加。出租车
到达目的地停止后,停止计费器,显示总费用。
根据出租车计费器的工作过程,本系统采用分层次、分模块的方式设计,其本系
统组成框图如下所示。其中行驶路程计数模块、等待时间计数模块和计费模块,
用来统计路程、等待时间
和总费用,控制模块是用来控制计费模块,数码管显示模块用来显示行驶的公里
数、等待累计时间和总费用等信息。系统框图如下所示:
3 .各模块设计:
本系统采用层次化、模块化的设计方法,设计顺序为自下向上。首先实现
系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。为了便
于显示,这里的路程、时间和费用计数器均用十六进制表示。
(1)顶层模块
/*顶层模块变量定义
reset 0为复位,1为启动
stop 0为运行,1为停止
start 0为暂停,1为行驶
clk_count 为轮胎传感器发出的表示转一圈的脉冲信号,实验时用为1024hz时钟
信号
clk_1khz 系统工作的主要时钟信号,实验用1024hz时钟信号
clk 时间模块的时钟信号,实验用8hz时钟信号
Reset,start,stop
Clk_50M
Reset
Start
Fee=0100,distanc
e_able,distance,ti
me_able,shijian=
0
Time-able=1
Distance-able=1
t>2
s>3
Distance=1,fee=fee
+16
Shijian=1,fee=fe
e+12
Distance=0
Fee=0100
Shiian=0,
Fee=0100
s=s+1
t=t+1
Output fee,gongli,m
timeh,timel 分钟的十位和个位
distanceh,distancel 公里的十位和个位
bai,shi,ge,xiao 费用的十位和个位
*/
module taxi(reset,start,stop,clk0,seg1,seg2,seg3,seg4,change,);
input reset,start,stop,change,clk0;
output [6:0] seg1,seg2,seg3,seg4;
wire
time_enable,distance_enable,select_clk,km,clk_count,clk,clk_1khz;
reg [3:0]view1,view2,view3,view4;
wire [3:0] timeh,timel,bai,ge,shi,xiao,distanceh,distancel;
time_count u8(clk,reset,start,stop,timel,timeh,time_enable);
km_count
u1(.clk_count(clk_count),.reset(reset),.start(start),.km(km));
distance
u2(.clk_1khz(clk_1khz),.start(start),.reset(reset),.stop(stop),.dista
ncel(distancel),.distanceh(distanceh),.km(km),.distance_enable(distan
ce_enable));
select_clk
u3(.clk_1khz(clk_1khz),.reset(reset),.start(start),.stop(stop),.time_
enable(time_enable),.km(km),.select_clk(select_clk));
fee
u4(.select_clk(select_clk),.time_enable(time_enable),.distance_enable
(distance_enable),.reset(reset),.start(start),.bai(bai),.shi(shi),.ge
(ge),.xiao(xiao));
freqDiv_8hz u5(clk0,clk);
freqDiv_1024 u6(clk0,clk_count);
freqDiv_1024 u7(clk0,clk_1khz );
SEG7_LUT u81(seg1,view1);
SEG7_LUT u82(seg2,view2);
SEG7_LUT u83(seg3,view3);
SEG7_LUT u84(seg4,view4);
always @(posedge clk_1khz)
begin
if(change==0)
begin
view1<=xiao;
view2<=ge;
view3<=shi;
view4<=bai;
end
else
begin