武汉理工大学FPGA taxi计价器Word文档格式.docx
- 文档编号:19498263
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:28
- 大小:233.14KB
武汉理工大学FPGA taxi计价器Word文档格式.docx
《武汉理工大学FPGA taxi计价器Word文档格式.docx》由会员分享,可在线阅读,更多相关《武汉理工大学FPGA taxi计价器Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
3.2软件方案设计及原理框图4
4各单元模块设计,仿真结果及分析7
4.1分频模块7
4.2计程模块9
4.3计时模块14
4.4计费模块17
4.5控制模块10
4.6译码模块24
5顶层模块设计,仿真结果及分析28
5.1各模块的连线图28
5.2波形仿真28
5.3输入、输出信号说明29
5.4调试结果说明及分析29
6收获体会29
参考文献29
基于FPGA的出租车计价器设计
摘要
介绍了出租车计费器系统的组成及工作原理,简述了在EDA平台上用FPGA器件构成该数字系统的设计思想和实现过程。
论述了计程模块,计费模块,计时模块,译码动态扫描模块等的设计方法与技巧。
1绪论
随着EDA技术的高速发展,电子系统的设计技术发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了诸多方便。
利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。
本文介绍了一个以Altera公司可编程逻辑芯片cyclone2系列的EP2C5T144C8的FPGA芯片为控制核心、附加一定外围电路组成的出租车计费器系统。
随着社会的不断进步,人们生活水平的不断提高,出租车逐渐成为人们日常生活不可缺少的交通工具。
而计价器作为出租车的一个重要组成部分,关系着出租车司机和乘客双方利益,起着重要的作用,因而出租车计价器的发展非常迅猛。
2出租车计费系统的实验任务及要求
2.1技术要求
(1)掌握较复杂逻辑的设计、调试;
(2)进一步掌握用VHDL语言设计数字逻辑电路;
(3)掌握用QuartusII软件的原理图输入的设计方法。
2.2功能要求
(1)设置两种收费模式,按里程和按等待时间计费;
(2)实现模拟功能:
能模拟汽车启动、停止、暂停;
(3)设计动态扫描电路:
将车费、里程、等待时间动态的显示出来;
(4)用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路;
(5)各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。
2.3计费标准(附件一)
3方案设计及原理框图
3.1硬件方案设计及原理框图
图1硬件系统组成框图
各模块的作用和组成:
(1)输入电路:
该模块主要有两个开关以及一个输入信号引脚,作用是输入信号到FPGA中。
(3)动态显示模块:
此模块由4个数码管所构成,作用是将里程、等待时间和计费动态分时地显示出来。
3.2软件方案设计及原理框图
3.2.1FPGA内部具体框图及方案设计
出租车的一般计费过程为:
出租车载客后,启动计费器,整个系统开始运行,里程计数器从0开始计数,费用计数器从6开始计算;
出租车载客中途等待,等待时间计数器从0开始计数。
行驶途中不断根据行驶里程或停止等待的时间的计费标准计费。
出租车到达目的地停止后,停止计费。
根据出租车计费器的工作过程,本系统采用分层次、分模块的方式设计,其FPGA内部具体框图如下所示。
图2软件系统组成框图
3.2.2软件路程图
开始
否
是否开车
是
是否暂停
否是
计里程计费计时
显示
结束
图3软件流程图
4各单元模块设计,仿真结果及分析
本系统采用层次化、模块化的设计方法,设计顺序为自下向上。
首先实现系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。
4.1分频模块
4.1.1分频模块原理图
图4分频器原理图
4.1.2分频模块介绍
此模块的功能是对总的时钟进行分频,总的时钟是50M。
计数分频器f60和f50m能分别把时钟频率分到1/60和1/50M,组合两分频器1Hz和1/60Hz的信号。
信号介绍为:
clk0:
输入时钟信号;
fout:
输出时钟信号。
4.1.3分频模块的VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYf60IS
PORT(clk0:
INSTD_LOGIC;
fout:
OUTSTD_LOGIC);
ENDf60;
ARCHITECTUREtwoOFf60IS
BEGIN
PROCESS(clk0)
VARIABLEcnt:
STD_LOGIC_VECTOR(5DOWNTO0);
VARIABLEfull:
STD_LOGIC;
BEGIN
IFclk0'
EVENTANDclk0='
1'
THEN
IFcnt="
111011"
cnt:
="
000000"
;
full:
='
;
ELSE
=cnt+1;
0'
ENDIF;
fout<
=full;
ENDPROCESS;
ENDtwo;
ENTITYf50mIS
ENDf50m;
ARCHITECTUREthreeOFf50mIS
STD_LOGIC_VECTOR(25DOWNTO0);
10111110101111000001111111"
00000000000000000000000000"
ENDthree;
4.1.4分频器仿真
图5分频器仿真图
从该波形图可以看出输入脉冲的频率是输出脉冲的频率的60倍。
4.2计程模块
4.2.1计程模块原理图
图6计程模块原理图
4.2.2计程模块介绍
此模块的功能是计算出租车行驶的里程和里程费用。
在出租车启动并行驶的过程中(开始/结束信号ss为1,行驶/等待信号wr为0),当clks输入上升沿的时候,系统即进行加计数,当路程小于三公里时,费用为6元;
当路程超过三公里时,系统将输出标志正脉冲dis_flag0,每走100m费用加0.1元;
当路程超过七公里时,系统将输出标志正脉冲dis_flag1,每走100m费用加0.2元。
在出租车启动但不行驶的过程中(开始/结束信号ss为1,行驶/等待信号wr为0),计程模块不计数。
信号介绍如下:
clks:
输入里程信号,每次上升沿代表10m的路程;
ss:
开始/停止信号;
wr:
暂停/启动信号;
dis10000,dis1000,dis100,dis10:
输出里程数,分别代表里程数的万、千、百、十位;
fee2,fee1,fee0:
输出里程费用,分别代表里程费用的十、个、分位;
dis_flag0,dis_flag1:
输出标志,分别代表里程数大于3km和7km.
4.2.3计程模块的VHDL程序
ENTITYdistanceIS
PORT(clks,ss,wr:
dis10000,dis1000:
BUFFERSTD_LOGIC_vector(3downto0);
dis100,dis10,fee2,fee1,fee0:
OUTSTD_LOGIC_vector(3downto0);
dis_flag1,dis_flag0:
BUFFERSTD_LOGIC);
ENDENTITYdistance;
ARCHITECTUREoneOFdistanceIS
PROCESS(clks,ss,wr)
VARIABLEfee_flag2,fee_flag1,fee_flag0,q3,q2,q1,q0:
STD_LOGIC_vector(3downto0);
VARIABLEsw:
STD_LOGIC_VECTOR(1DOWNTO0);
VARIABLEflag:
sw:
=ss&
wr;
IFsw="
00"
ORsw="
01"
THENq2:
0000"
q1:
q0:
fee_flag0:
fee_flag1:
fee_flag2:
flag:
='
ELSIFsw="
11"
=q2;
=q1;
=q0;
ELSIFclks'
EVENTANDclks='
IF(q3=9ANDq2=9)AND(q1=9ANDq0=9)THEN
q3:
q2:
q0:
ELSIFq2=9AND(q1=9ANDq0=9)THEN
q3:
=q3+1;
ELSIFq1=9ANDq0=9THENq2:
=q2+1;
ELSIFq0=9THENq1:
=q1+1;
ELSEq0:
=q0+1;
ENDIF;
IFflag='
IFdis_flag0='
ANDdis_flag1='
fee_flag2:
0110"
="
ELSIFdis_flag0='
IFfee_flag0=9ANDfee_flag1=9THENfee_flag2:
=fee_flag2+1;
fee_flag0:
ELSIFfee_flag0=9THENfee_flag0:
=fee_flag1+1;
ELSEfee_flag0:
=fee_flag0+1;
ENDIF;
ELSE
IFfee_flag2=9AND(fee_flag0=8ANDfee_flag1=9)THENfee_flag2:
ELSIFfee_flag0=8ANDfee_flag1=9THENfee_flag2:
ELSIFfee_flag0=8THENfee_flag0:
=fee_flag0+2;
ENDIF;
ENDIF;
fee2<
=fee_flag2;
fee1<
=fee_flag1;
fee0<
=fee_flag0;
dis10000<
=q3;
dis1000<
dis100<
dis10<
PROCESS(ss,dis1000,dis10000)
IFss='
OR(dis1000<
4ANDdis10000=0)THENdis_flag0<
dis_flag1<
ELSIFdis1000<
8ANDdis10000=0THENdis_flag0<
ELSEdis_flag0<
ENDone;
4.2.4计程模块仿真结果
图7计程模块仿真1
图8计程模块仿真2
从波形图可以看出在时钟的控制下当ss为低电平或wr为高电平的时候LC为零,当SS为高电平且WR为低电平的时候LC开始计数,当计到大于三的时候输出dis_flag0为高电平,当计到大于七的时候输出dis_flag1为高电平。
4.3计时模块
4.3.1计时模块原理图
图9计时模块原理图
4.3.2计时模块介绍
此模块用于计算停车等待的时间。
在出租车行进中,如果车辆暂停而等待(wr=0),计数器则在信号clk的上升沿进行加计数,当等待时间每增加3分钟,按下述规则收费:
如果里程不大于3km,不计费;
如果里程数大于3km不大于7km,计费增加0.5元;
如果里程数大于7km,计费增加1元。
信号介绍如下:
clk:
时钟信号输入;
dis1,dis0:
里程标志输入信号,分别代表里程数大于7km和大于3km;
wait_time1,wait_time0:
等待时间输出,分别代表等待时间的个、分位;
wait_fee1,wait_fee0:
等待费用输出,分别代表等待费用的个、分位
4.3.3计时模块的VHDL程序
ENTITYwait_timeIS
PORT(clk,wr,ss,dis1,dis0:
wait_time1,wait_time0,wait_fee1,wait_fee0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYwait_time;
ARCHITECTUREoneOFwait_timeIS
SIGNALtime3m:
STD_LOGIC;
PROCESS(clk,wr,ss,time3m,dis1,dis0)
VARIABLEq1,q0:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEq3m:
STD_LOGIC_VECTOR(1DOWNTO0);
THENq1:
time3m<
ELSE
IFwr='
IFclk'
EVENTANDclk='
IFq1=9ANDq0=9THEN
q1:
q0:
ELSIFq0=9THENq1:
=q1+1;
ELSEq1:
=q1;
=q0+1;
IFdis1='
ORdis0='
IFq3m="
10"
THENq3m:
ELSEq3m:
=q3m+1;
ENDIF;
wait_time1<
wait_time0<
PROCESS(time3m)
VARIABLEq3,q2:
IFtime3m='
IFdis0='
THEN
IF(q3=9ANDq2=5)THENq3:
ELSIFq2=5THENq3:
ELSEq2:
=q2+5;
ELSIFtime3m='
IFq3=9THENq3:
ELSEq3:
wait_fee1<
wait_fee0<
4.3.3计时模块的仿真结果
图10计时模块仿真图
4.4计费模块
4.4.1计费模块原理图
图11计费模块原理图
4.4.2计费模块介绍
计费模块用于出租车启动后,根据路程费用和等待费用来计算总费用。
disfee2,disfee1,disfee0:
路程费用输入,分别代表路程费用的十、个、分位;
waitfee1,waitfee0:
等待费用输入,分别代表等待费用的个、分位;
总费用输出,分别代表总费用的十、个、分位。
4.4.2计费模块的VHDL的程序
ENTITYchargeis
PORT(ss:
dis_fee2,dis_fee1,dis_fee0,wait_fee1,wait_fee0:
INSTD_LOGIC_VECTOR(3DOWNTO0);
fee2,fee1,fee0:
ENDENTITYcharge;
ARCHITECTUREoneofchargeis
PROCESS(ss,dis_fee2,dis_fee1,dis_fee0,wait_fee1,wait_fee0)
VARIABLEctemp:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEfee_temp2,fee_temp1,fee_temp0:
BEGIN
IF(ss='
)THENctemp:
fee_temp2:
fee_temp1:
fee_temp0:
IF(dis_fee0+wait_fee0>
9)THENfee_temp0:
=dis_fee0+wait_fee0-10;
ctemp:
0001"
IF(dis_fee1+wait_fee1+ctemp>
9)THENfee_temp1:
=dis_fee1+wait_fee1+ctemp-10;
IF(dis_fee2+ctemp>
9)THENfee_temp2:
ctemp:
ELSEfee_temp2:
=dis_fee2+ctemp;
ELSEfee_temp1:
=dis_fee1+wait_fee1+ctemp;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工大学FPGA taxi计价器 武汉理工大学 FPGA taxi 计价器
![提示](https://static.bdocx.com/images/bang_tan.gif)