出租车计价器设计PPT.docx
《出租车计价器设计PPT.docx》由会员分享,可在线阅读,更多相关《出租车计价器设计PPT.docx(97页珍藏版)》请在冰豆网上搜索。
出租车计价器设计PPT
基于FPGA的出租车计价器设计
——项目文档
小组成员:
赵帅
郑燕燕
白阿妮
董强
摘要
随着我国国民生产总值的提高以及人民生活水平的改善,各个城市的出租车营运事业发展迅速,出租车已经成为人们日常生活必需的交通工具之一。
出租车计价器是出租车营运收费的专用智能化仪表,是使出租车市场规范化、标准化的重要设备。
本设计采用verilogHDL硬件描述语言作为设计语言,采用自顶向下的设计思路,得到一种出租车计价系统的软件结构。
该设计虽然功能简单,智能化水平比较低,但基本的功能都能完成。
Abstract
AsChina'sGDPincreaseandtheimprovementofpeople'slivingstandards,eachcitytaxioperatingfacilitiesdevelopmentisrapid,thetaxihasalreadybecameessentialmeansoftransportinthepeopledailylife.Taximeter,aspecialoperatingchargesintelligentinstrumentwhichmakesthetaximarketstandardization,istheimportantequipmentofthetaxi.ThisdesignusestheverilogHDLhardwaredescriptionlanguageasaprogramminglanguage,usethetop-downdesignideas,getataxipricingsystemsoftwarestructure.thedesign,althoughthefunctionofsimple,intelligentlevelisrelativelylow,thebasicfunctionscanbecompleted.
关键字:
出租车计价器、verilogHDL、自顶向下、LCD、旋钮开关
一.项目规范
(1)出租车载客后,启动计价器,整个系统开始运行,里程计数器和时间计数器从0开始计数,费用计数器从6+1(6为起步价,1为燃油费)开始计算,出租车到达目的地停止后,停止计价,出租车显示总费用、总路程及途中等待时间。
(2)实现对出租车所行路程的计算:
用旋钮来模拟车轮,每旋动一下旋钮,总路程加100米,旋钮的旋转速度也可人为的控制。
(3)实现计价功能:
根据所行路程及途中等待时间计算总费用。
计价规则如下:
●行程3公里内(包括3公里),起步价为6元;
●3公里外(不包括3公里),超过3公里且小于25公里的路程部分,以每公里1元为单价,路程超过25公里(不包括25公里),以每公里2元为单价(加上返程费),计算总价;
●出租车处于等待状态时,若等待累计时间在2分钟内(包括2分钟),不计费;若等待累计时间在2分钟外(不包括2分钟),以每分钟以1元计费。
(4)实现显示功能:
用LCD显示总路程、途中等待时间及总费用。
①显示格式如下:
图1LCD的显示格式
②显示的分辨率如下:
●总价的显示范围为0~99元,计价分辨率为0.1元;
●计程的显示范围为0~99公里,分辨率为0.1公里;
●计时的显示范围:
分钟的显示范围是0—99,辨率为1分钟。
秒的显示范围是0—59,辨率为1秒。
二.输入输出定义
2.1输入输出管脚描述
名称
方向
功能描述
clk_50M
I
50MHz的晶振时钟信号,50%的占空比,输入数据在clk的上升沿采样,输出数据在clk的上升变化。
rst_n
I
低电平有效的复位信号,为器件提供异步复位信号,异位复位的信号。
flag
I
计程、计时控制模块
R_A
I
FPGA上旋钮的输入端
R_B
I
FPGA上旋钮的输入端
lcd_rw
O
Lcd的读写控制输出端,输出给lcd用来控制读写信号
lcd_rs
O
Lcd的数据和指令的控制信号,输出给lcd的控制信号
lcd_e
O
Lcd的使能信号,输出给lcd作为使能信号
lcd_d
O
Lcd的数据端,用来输出给lcd的4位数据
flash_ce
O
用来控制lcd与flash共用的4位数据总线的使用权交给lcd
led
O
用来测试旋钮是否正常工作
表2.1.1顶层接口信号描述
2.2时序描述
图2.1.2顶层接口时序描述
三.模块划分
3.1概述
出租车计价器主要包含以下模块:
分频计数模块、控制信号产生模块、旋钮控制模块、计程模块、计时模块、计价模块以及最终的lcd显示驱动模块。
3.2分频计数模块
3.2.1模块框图
图3.2.1分频控制模块框图
3.2.2功能定义
该分频模块一方面用于为计时模块提供最小单位秒的时钟信号,对系统50MHZ的时钟(即输入信号clk_50M脉冲)进行分频,得到clk_out,其频率为1HZ,周期为1s,将其作为计时模块的输入信号。
当启动出租车计价器后,flag=1(进入等待计时状态)时分频模块处于工作状态。
同时,本模块还提供异步复位信号rst_n,当rst_n=0时,输出端清零。
3.2.3信号描述
信号名称
方向
功能描述
clk_50M
I
50MHz的晶振时钟信号,50%的占空比,输入数据在clk的上升沿采样,输出数据在clk的上升变化。
rst_n
I
低电平有效的复位信号,为分频模块提供异步复位信号。
clk_out
O
输出1HZ的时钟,供计时和计费模块使用
表3.2.2分频计数模块信号描述
3.2.4时序描述
图3.2.3分频计数模块时序图
3.2.5数据格式
信号名称
方向
信号类型
clk_50M
I
wire
rst_n
I
wire
clk_out
O
reg
表3.2.4分频计数模块的数据格式
3.3控制信号产生模块
3.3.1模块框图
图3.3.1控制信号产生模块框图
3.3.2功能定义
该模块用于产生计费模块的控制信号clk_select。
该模块中,接收计程大于3公里的使能输出信号dis_en以及计时大于两分钟的使能输出信号time_en,这两个信号作用于计费模块,控制计费的大小,若接收到dis_en信号,则计费输出根据所行使的路程开始累加;若接收到time_en信号,则计费输出也应根据相应的停止等待时间进行累加。
3.3.3信号描述
引脚名称
方向
功能描述
flag
I
计程、计时控制信号
time_en
I
等待时间大于2分钟的使能信号
dis_en
I
路程大于3公里的使能信号
clk_select
O
产生控制计费模块的时钟信号
表3.3.2控制信号产生模块信号描述
3.3.4时序描述
图3.3.3控制信号产生模块时序图
3.3.5数据格式
引脚名称
方向
信号类型
flag
I
wire
time_en
I
wire
dis_en
I
wire
clk_select
O
wire
表3.3.4控制信号产生模块的数据格式
3.4计程模块
3.4.1模块框图
图3.4.1计程模块框图
3.4.2功能定义
该模块用于求出所行的总路程,对于时钟信号clk_d(即旋钮调整输出信号rotary_event),每当上升沿到来的时候,总路程便开始累加,每个上升沿加100m,最终的和为总路程输出(即输出信号distant)。
同时,当路程大于3公里时,使能flag_3信号,当路程大于25公里时,使能flag_25信号。
flag=0时,计程模块处于工作状态;reset=0时,总路程清零。
3.4.3信号描述
引脚名称
方向
功能描述
reset
I
当reset=0时,计程清零
clk_d
I
在每个clk_d的上升沿时,路程加100m
flag
I
flag为0,计程有效,否则,计程保持
distant[7:
0]
O
路程的输出
flag_3
O
路程大于3公里的标志信号
flag_25
路程大于25公里的标志信号
表3.4.2计程模块信号描述
3.4.4时序描述
图3.4.3计程模块时序图
3.4.5数据格式
引脚名称
方向
信号类型
reset
I
wire
clk_d
I
wire
flag
I
wire
distant[7:
0]
O
reg
flag_3
O
wire
flag_25
O
wire
表3.4.4计程模块的数据格式
3.5计时模块
3.5.1模块框图
图3.5.1计时模块框图
3.5.2功能定义
该模块用于计算停车等待的时间。
在输入的clk_1HZ信号上升沿进行加计数,每60次产生进位脉冲使分钟计时加1,分钟计时在等于59时清零。
flag=1时,计时模块处于工作状态;rst_n=0时,计时清零。
3.5.3信号描述
引脚名称
方向
功能描述
rst_n
I
整体复位,在rst_n=0时,等待计时为0
flag
I
当flag=1时,计时继续,否则,计时保持
clk_s
I
计时所需的时钟,周期为秒
minute[7:
0]
O
等待计时的输出(分)
second[7:
0]
O
等待计时的输出(秒)
time_en
O
等待时间大于两分钟的使能信号
表3.5.2计时模块信号描述
3.5.4时序描述
图3.5.3计时模块时序图
3.5.5数据格式
引脚名称
方向
信号类型
rst_n
I
wire
flag
I
wire
clk_1HZ
I
wire
minute[7:
0]
O
reg
second[7:
0]
O
reg
time_en
O
wire
表3.5.4计时模块的数据格式
3.6计价模块
3.6.1模块框图
图3.6.1计价模块框图
3.6.2功能定义
该模块利用计时模块输出的时间信号和计程模块输出的总路程信号综合起来计算总价。
当出租车计价器启动后,在计程模块产生的总路程小于三公里且无等待时间时输出总价为6元;在计程模块产生的路程小于三公里且有等待时间时,输出总价为6元加上等待计时的价钱(等待计时小于等于2分钟时,等待计时部分价钱为0元;等待计时大于2分钟时,超过2分钟的部分,每分钟(不满一分钟时也记为一分钟)计费为1元);在计程模块产生的路程大于三公里且小于25公里,另外无等待时间时,输出总价为6元加上超出三公里部分(超出三公里部分,每公里的价钱为1元)的价钱;在计程模块产生的路程大于三公里且小于25公里,另外有等待时间时,输出总价为6元加上超出三公里部分的价钱,再加上等待计时的价钱;在计程模块产生的路程大于25公里,另外无等待时间时,输出总价为6元加上超出三公里部分的价钱再加上超出25公里部分的价钱(超出25公里,每公里的价钱为2元);在计程模块产生的路程大于25公里,另外有等待时间时,输出总价为6元加上超出三公里部分的价钱再加上超出25公里部分的价钱,再加上等待计时的价钱;另外,还需要额外加一元的燃油费,由此得出最终的总价输出为price。
3.6.3信号描述
引脚名称
类型
功能描述
clk_s
I
控制计费的控制信号
reset
I
异步复位信号,当reset=1时,总价显示为6¥
fee[11:
0]
O
总价输出
flag
I
计程或计时的选择控制信号
rotary_event
I
路程计费的时钟信号
clk_1HZ
I
时间计费的时钟信号
clk
I
控制总费用的时钟信号
表3.6.2计价模块信号描述
3.6.4时序描述
图3.6.3计价模块时序图
3.6.5数据格式
引脚名称
方向
信号类型
clk_s
I
wire
reset
I
wire
fee[11:
0]
O
reg
flag
I
wire
rotary_event
I
wire
clk_1HZ
I
wire
clk
I
wire
表3.6.4计价模块的数据格式
3.7旋钮控制模块
3.7.1模块框图
图3.7.1旋钮控制模块框图
3.7.2功能定义
该模块主要是模拟出租车车轮的运动状态,旋钮每旋转一下,计程加100m,同时,旋钮每旋转一下,计数加一,led作为计数输出显示不同状态。
该模块产生的rotary_event信号即作为计程模块的时钟信号,控制路程的加减。
3.7.3信号描述
引脚名称
方向
信号描述
clk
I
50MHz的晶振时钟信号,50%的占空比,输入数据在clk的上升沿采样,输出数据在clk的上升变化。
reset
I
低电平有效的复位信号,为器件提供异步复位信号,异位复位的信号。
R_A
O
FPGA上旋钮的输入端
R_B
I
FPGA上旋钮的输入端
led[7:
0]
I
用来测试旋钮是否正常工作(即计数输出信号)
Rotary_event
I
旋转开关旋转输出信号,每旋动一次,路程加100m
表3.7.2旋钮控制模块信号描述
3.7.4时序描述
图3.7.3旋钮控制模块时序图
3.7.5数据格式
引脚名称
方向
信号类型
clk
I
wire
reset
I
wire
R_A
O
wire
R_B
I
wire
led[7:
0]
I
reg
Rotary_event
I
reg
表3.7.4旋钮控制模块的数据格式
3.8LCD显示驱动模块
3.8.1模块框图
图3.8.1LCD显示驱动模块框图
3.8.2功能定义
在时钟的控制下,将使能信号、读写控制、复位信号送入LCD,再将行程、分钟、秒以、总价、控制符以及指令进行译码,翻译成指令码或者数据码以4位形式送入LCD。
LCD就能以一定格式显示出来。
3.8.3信号描述
引脚名称
方向
功能描述
clk
I
Lcd液晶显示的时钟信号
reset
I
异步复位,在reset=0时,等待计时为0
Lcd_rs
O
寄存器选择控制信号
0:
写操作期间写指令寄存器
1:
读/写数据
Lcd_rw
O
读/写控制信号,该模块中始终将其置低,即lcd始终接收信号
Lcd_en
I
读/写操作允许控制脉冲信号,高有效
flash_ce
O
存储器使能信号,设置为高,使其不占用总线
minute[7:
0]
I
等待计时的输入(分)
second[7:
0]
I
等待计时的输入(秒)
distance[11:
0]
I
所行路程的输入
Price[11:
0]
I
总价输入
Lcd_d
O
Lcd显示数据输出
表3.8.2LCD显示驱动模块信号图
3.8.4时序描述
图3.8.3LCD显示驱动模块时序图
3.8.5数据格式
引脚名称
方向
信号类型
clk
I
wire
reset
I
wire
Lcd_rs
O
reg
Lcd_rw
O
wire
Lcd_en
I
reg
flash_ce
O
wire
minute[7:
0]
I
wire
second[7:
0]
I
wire
distance[11:
0]
I
wire
Price[11:
0]
I
wire
Lcd_d
O
reg
表3.8.4LCD显示驱动模块框图
3.9详细设计框图
图3.9.1分频控制模块框图
四.Testcase
4.1分频模块
4.2控制信号产生模块
4.3计程模块
(1)路程大于3公里,使能flag_3信号
(2)路程大于25公里,使能flag_25信号
4.4计时模块
4.5计价模块
4.6旋钮控制模块及LCD显示驱动模块
五.设计结果
5.1硬件测试
硬件测试是在各个模块仿真验证成功后,我们进行顶层模块模块的互联。
由于时序要求用50MHZ的时钟进行时钟的分频,因此我们对顶层模块的测试时时序不好观察,所以我们对整个模块的测试主要是通过板级调试来测试功能的完整性。
5.2综合面积报告
5.3时序报告
--------------------------------------------------------------------------------
Release13.2Trace(nt64)
Copyright(c)1995-2011Xilinx,Inc.Allrightsreserved.
C:
\Xilinx\13.2\ISE_DS\ISE\bin\nt64\unwrapped\trce.exe-intstyleise-e3-s4
-n3-xmltaxi.twxtaxi.ncd-otaxi.twrtaxi.pcf
Designfile:
taxi.ncd
Physicalconstraintfile:
taxi.pcf
Device,package,speed:
xc3s500e,fg320,-4(PRODUCTION1.272011-06-20)
Reportlevel:
errorreport
EnvironmentVariableEffect
--------------------------
NONENoenvironmentvariableswereset
--------------------------------------------------------------------------------
INFO:
Timing:
2698-Notimingconstraintsfound,doingdefaultenumeration.
INFO:
Timing:
2752-Togetcompletepathcoverage,usetheunconstrainedpaths
option.Allpathsthatarenotconstrainedwillbereportedinthe
unconstrainedpathssection(s)ofthereport.
INFO:
Timing:
3339-Theclock-to-outnumbersinthistimingreportarebasedon
a50Ohmtransmissionlineloadingmodel.Forthedetailsofthismodel,
andformoreinformationonaccountingfordifferentloadingconditions,
pleaseseethedevicedatasheet.
INFO:
Timing:
3390-ThisarchitecturedoesnotsupportadefaultSystemJitter
value,pleaseaddSYSTEM_JITTERconstrainttotheUCFtomodifytheClock
Uncertaintycalculation.
INFO:
Timing:
3389-Thisarchitecturedoesnotsupport'DiscreteJitter'and
'PhaseError'calculations,thesetermswillbezerointheClock
Uncertaintycalculation.Pleasemakeappropriatemodificationto
SYSTEM_JITTERtoaccountfortheunsupportedDiscreteJitterandPhase
Error.
DataSheetreport:
-----------------
Allvaluesdisplayedinnanoseconds(ns)
Setup/Holdtoclockclk_50M
------------+------------+------------+------------------+--------+
|MaxSetupto|MaxHoldto||Clock|
Source|clk(edge)|clk(edge)|InternalClock(s)|Phase|
------------+------------+------------+------------------+--------+
R_A|1.124(R)|0.307(R)|clk_50M_BUFGP|0.000|
R_B|0.777(R)|0.584(R)|clk_50M_BUFGP|0.000|
------------+------------+------------+------------------+--------+
Clockclk_50MtoPad
------------+------------+------------------+--------+
|clk(edge)||Clock|
Destination|toPAD|InternalClock(s)|Phase|
------------+------------+------------------+--------+
led<0>|8.463(R)|clk_50M_BUFGP|0.000|
led<1>|8.384(R)|clk_50M_BUFGP|0.000|
led<2>|8.096(R)|clk_50M_BUFGP|0.000|
led<3>|8.158(R)|clk_50M_BUFGP|0.000|
led<4>|8.226(R)|clk_50M_BUFGP|0.000|
led<5>|8.133(R)|clk_50M_BUFGP|0.000|
led<6>|9.619(R)|clk_50M_BUFGP|0.000|
led<7>|9.472(R)|clk_50M_BUFGP|0.000|
------------+------------+--------------