《基于FPGA的出租车计费系统设计报告.docx》由会员分享,可在线阅读,更多相关《基于FPGA的出租车计费系统设计报告.docx(19页珍藏版)》请在第一文库网上搜索。
1、(封面)XXXXXXX学院题目:基于FPGA的出租车计费系统设计院(系):专业班级:学生姓名:指导老师:时间:1引言22 .实验任务及要求23 ,模块功能24 .设计说明35 .实验结果46 .一些问题和改进47 .心得与体会48 .附录摘要介绍了出租车计费器系统的组成及工作原理,简述了在EDA平台上用FPGA器件构成该数字系统的设计思想和实现过程。论述了分频模块,速度获取模块,计费模块,进制转换模块,显示模块等的设计方法与技巧。一、引言随着EDA技术的高速发展,电子系统的设计技术发生了深刻的变化,大规模可编程逻辑器件CP1D/FPGA的出现,给设计人员带来了诸多方便。利用它进行产品开发,不仅
2、成本低、周期短、可靠性高,而且具有完全的知识产权。本文介绍了一个以A1tera公司可编程逻辑芯片cyc1one2系列的EP2C35F672C6的fpga芯片为控制核心、附加一定外围电路组成的出租车计费器系统。随着社会的不断进步,人们生活水平的不断提高,出租车逐渐成为人们日常生活不可缺少的交通工具而计价器作为出租车的一个重要组成部分,关系着出租车司机和乘客双方利益,起着重要的作用,因而出租车计价器的发展非常迅猛二、实验任务及要求1 .能实现计费功能,计费标准为:按行驶里程收费,起步费为10.00元,并在车行3公里后再按2元/公里,车起启动后停止等待时为每分钟1元(程序中为显示功能,设置为每10秒
3、1元)。2 .实现预置功能:能预置起步费、每公里收费、车行等待时间、总费用。3 .实现模拟功能:能模拟汽车启动、停止、暂停、等状态。4 .设计动态扫描电路:将车费显示出来,一共三位5 .用Veri1Og语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。6 .各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。7 .完成电路全部设计后,通过系统实验箱下载验证设计的正确性。三、模块功能计费器按里程收费,每100米开始一次计费。各模块功能如下:(1)里程动态显示模块其包括计数车速控制模块发出的脉冲以及将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制
4、器每发一个脉冲代表运行了0.1公里)。(2)计费动态显示模块其初值为10元,当里程超过3公里后才接受计数车速控制模块发出的脉冲的驱动,并且计数显示动态显示出来,每来一个脉冲(代表运行了0.5公里)其数值加2元,等待时每分钟加1元。(3)等待计时模块车载行使后,若处于停滞状态,等待时每分钟收费1元。(4)计费模块计算车载行使和停止状态时的费用总和。(5)显示模块在DEO板数码管上显示以上模块。四:设计说明:实际设计共五个模块,分别为分频模块(每一百米送一个脉冲以方便计数)、计算里程模块、等待计时模块、计费模块、显示模块。详细功能如下: 分频模块:假设车轮每转一圈为2米,送一个脉冲,则需要50分频
5、(共100米),同理,若知道车轮直径,即可算出分频比 里程模块:每一百米记一次数,最大可以计999.9公里,精确至Ij0.1公里。 取整模块:现实中出租车的精确度为0.1公里,计算价格的时候不足一公里的按一公里算,所以加了这一个模块,输出的是计算价格时的里程数。 计费模块:按行驶里程收费,起步费为10.00元(包括2元得燃油附加费),并在车行3公里后再按2元/公里,处于等待状态时每分钟收费1元。 显示模块:通过动态扫描显示车费和里程数,将十进制数转化为四位十进制数(如将9999转化为四个9)以方便显示。设计流程图如下脉冲输入计费模块里程计算模块计时模块显示模块50分频器流程说明:车轮每转一圈送
6、一个脉冲波,假设每转一圈为2米,则经过50分频器后是每100米送一个脉冲到里程计算模块,里程计算模块可以精确到0.1公里,将计算的里程数送至取整模块进行判断,若小数部分不为零则整数部分加1,即不足一公里的部分按一公里计算,取整后的里程送至计费模块计费,同时和计算的费用用过显示模块进行转化和显示顶层原理图如下:时序仿真图O - I - 2 - 3 - 4 - 5 - 6 7-8-9-w- - L上(/Dz。-。Q .dkrabrrtSttftovt1(6cvt15ed(mt1(3E】ot1(1(mt2(6引脚分配图1Ch-CnabteInputPINJ61BI1NOZ5V(defau1t)Cfc
7、IInputPIN.G216number(inputPDMG4out16OutputPDVI3out15OutputPINF127out1(4)OutputPING127out13OutputPINH137B6Jeuf:B7N1Z5V(defauOUU2OutputIP1NJ1287JU12.5V(defau1t)10OutputPINJ117B7_N12.5V(defau1t)OutputPIN_E11787JU2.5V(defau1t)OutputPINA15787U_ZSV(defau1t)OutputPINE147B7N125V(defeu1t)OutputPINB147B7J412.
8、5V(defeutt)out2(3OutputNW787Ja25V(dehUh)*wt2OutputPIN.C13787,N12.5V(defau1t)out2(1OutputPIN137B7.N12.5V(deuh)Oout2f0)OutxxitPINA137B7N12.5Vfdefeu1t18i2hllH金-Ql,sQjtputP1N.FH7B7-N02.5v(dcfaUt)OutputPIN_B17787HZ5V(defodt)QjtputPINA177B7N1Z5V(defdt)OutputPINE157B7NO2.5V(defadt)OutputPIN/167B7JU5V(defeU
9、t)OutputP1N_A167B7JU2.5v(dcfadt)CXJtPUtP1NJ)IS7B7JiO2.5V(defedt)OutputP1NeG1S7B7,N05V(dcfadt)OutputPIND197B7NOZ5V(defadt)OutputP1Nf197B7Jdt)25V(defaut;25V(defod)15V(defadt)P1N.A19PWeF15PMPieP1Nf5CutputCxJtPUtQunInOUt29-3IputIpiNj16BM02.5V(defeJt)五、实验结果:通过quartus将文件下载到DEO板上,运行正常,与实验目的一致,可以通过调整输入的脉冲频率
10、来调整计费的速度。初始价格为10元,超过3公里每公里加收2元,等待时每分钟1元。六、一些问题和改进:总的来说本次试验是顺利的,过程中主要遇到了这几点问题:1、刚开始没有完全想好要用几个模块做,没画好流程图,所以模块数量显得有点多,许多模块显得有些不必要,如取整模块完全可以合并到计费模块中。2、对其中的管脚定义太过于随意,造成很大空间的浪费,而且在使用较早的芯片时出现管脚不足的现象,这和模块过多也有很大关系。一些改进的想法:1、在本次设计中,模拟路程的脉冲必须通过拨动开关给脉冲,不能连续变化,应该改进。2、不能模拟语音3、显示部分可以扩展到VGA或者1CD上显示,效果会更好。4、应该参照实际生活
11、中的出租车功能,更加人性化的设计。七、心得与体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,因此作为二十一世纪的大学来说掌握EDA的开发技术是十分重要的。附:参考书目1 .谢自美主编.电子线路设计综合设计.华中科技大学出版社,20062 .罗杰,谢自美主编.电子线路设计.实验.测试(第4版).电子工业出版社,2008.43 .罗杰主编.Veri1ogHD1与数字ASIC设计基础.华中科技大学出版社,2008.34 .FPGA与SOPC设计教程-DE2实践,张志刚编著,西安电子科
12、技大学出版社,2007.45 .夏宇闻.Veri1og数字系统设计教程.北京航空航天大学出版社程序清单modu1eFDIV(C1K,K);/分频器设计inputC1K;outputK;reg12:0count;regM1;parameterratio=50;定义分频比为50a1ways(posedgeC1K)beginif(count=ratio-1)count=0;e1secount=count+1;if(count=0)M1=M1;e1seif(count=ratio2)M1=M1;endassignK=M1;endmodu1emodu1eMi1eage(c1k,start,reset,n
13、umber,distans1,distansh,distans_enab1e);/里程模块inpute1k,start,reset,number;输入信号outputdistans1,distansh,distans_enab1e;里程高低位及使能端regdistans_enab1e;reg3:0Jdistans1,distansh;a1ways(posedgee1k)beginif(reset)begin进位逻辑判断distans1=O;distansh=O;distans_enab1e=0;ende1seif(start)beginif(number)beginif(distans1=9)begindistans1=O;if(distansh=9)begindistansh=O;ende1sedistansh=distansh+1;ende1sedistans1=distans1+1;endendif(!(distans1=2&distansh=0)begindistans_enab1e=1;endendendmodu1emodu1etime_co