您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于-VHDL语言出租车计价器设计
.1.设计背景汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车最重要的工具。它关系着双方的利益。具有良好的性能的计价器无疑是对广大出租车司机朋友还是乘客来说都是很重要的。因此,汽车计价器的研究也是十分有应用价值的。随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注。于是,出租车行业以低价高质的服务给人们带来了出行的享受。但是总存在着买卖纠纷困扰着行业的发展。而在出租车行业中解决这一矛盾的最好方法就是改良计价器。用更加精良的计价器来为乘客提供更加方便快捷的服务。我国在70年代开始出现出租车,但那时的计费系统大都是国外进口的,不但不不够准确,而且价格还十分昂贵。随着改革开放的日益深入,出租车行业的发展势头已十分突出,国内各机械厂纷纷推出国产计价器。刚开始出租车计价器的功能从刚才开始的只显示路程,到能够自主计费,以及现在能够打印发票和语音提示、按时间自主变动单价等功能。随着旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。本设计就是采用VHDL硬件描述语言作为设计手段,采用自顶向下的设计思路,得到出租车计价系统的硬件结构,通过QuartusII7.2软件下进行设计、仿真,再在EDA试验箱进行硬件仿真,使各项指标符合设计要求,具有一定的实用性。虽然以前有基于数字电路、单片机进行的出租车计价器的设计,但用数字电路设计的整体电路规模较大,所用的器件较多,造成故障率高,导致计价器不够准确;而基于单片机的设计,虽然开发成本降低,但其外围电路较多,而且调试复杂,抗干扰能力差,从而也导致计价器不够准确。而基于VHDL语言的FPGA芯片稳定性好,抗干扰能力强,外围电路少,执行速度快,适合像出租车计价器的这种较复杂的电路设计。.2.设计原理2.1设计要求设计一种出租车计价器,计费标准如下:(1)起步价8.00元,起步公里为3公里;(2)超过三公里,每公里按1.00元收费;(3)单程行驶里程超过20公里。每公里租价加收50%;(4)等候时间累积一分钟,每分钟1.00元;要求显示里程、计费及等候时间。乘客上车后,按下启动键,开始计费,除非同一个乘客往返用哪个车,否则按下单程键,这样行驶里程超过20公里时,每公里加收50%,即每公里租费1.5元;计费显示为3位整数,一位小数。2.2设计模块2.2.1总体设计本出租车计价器的设计共分4个模块:判断模块、时间模块、里程模块、计费模块。总的设计图如图1所示:2.2.2判断模块判断模块主要通过对秒脉冲和里程脉冲进行计数,判断出租车是否停下,然后输出片选信号,选择时间计费还是里程计费。判断模块的模块图如图2所示:判断模块stasclklclkdge图2.判断模块单双程控制判断模块里程模块计费模块时间输出计费输出里程输出秒脉冲输入里程脉冲输入计价开始控制图1.总体设计图时间模块.2.2.3时间模块时间模块是当出租车停下时,对秒脉冲进行计数,从而计算出出租车停下的累积时间,并输出累积时间和计费脉冲。时间模块的模块图如图3所示:2.2.4里程模块里程模块是当出租车行驶的时候,对里程脉冲进行计数,从而算出出租车所行驶的里程,通过对单双程的控制进行不同的计费标准,最后输出行驶里程和计费脉冲。里程模块的模块图如图4所示:2.2.5计费模块计费模块通过对里程计费脉冲和时间计费脉冲分别进行计数,将其换算成价钱并对进行价钱输出。计费模块的模块图如图5所示:时间模块stasclkdget_count图3.时间模块时间输出里程模块stalclkdged_count图4.里程模块里程输出doub计费模块stat_countd_count图5.计费模块计费输出.3.仿真结果分析3.1判断模块的仿真判断模块的仿真结果如图6所示:3.2时间模块的仿真时间模块的仿真结果如图7所示:3.3里程模块的仿真里程模块的仿真结果如图8所示:图6判断模块的仿真结果图7时间模块的仿真结果图8里程模块的仿真结果.3.4计费模块的仿真计费模块的仿真结果如图9所示:3.5元件例化后的仿真元件例化后的仿真结果如图10所示:图9计费模块的仿真结果图10元件例化后的仿真结果.6.模块的引脚锁定引脚锁定图如图11所示:图11模块的引脚锁定.4.设计总结在这次对出租车计价器的课程设计实习中,我们充分的应用了所学的知识,通过去图书馆查阅相关资料和上网搜索相关知识,我们颇有收获。由于这次设计比往常设计要复杂,如果将所有功能设计到一个模块中,对于设计和编程都有不小的困难,所以最后我们采用模块化设计,将某些功能设计成一个模块,最后用元件例化将各个模块连接起来,形成一个完整的系统,这种设计方法不仅降低了编程难度,而且使我们的设计更有条理。通过这次设计,我们对模块化设计有了更深的了解。在这次设计中,我们也遇到了许多困难。有些设计虽然在逻辑上成立,但FPGA的硬件结构不能实现这种设计,比如多值驱动问题,上升下降沿问题,像我在设计计费模块的时候,预想的是时间计费脉冲和里程计费脉冲共同来驱动计费计数器,实现计费功能,这种设计很简单,但这种设计会报错。最后只能时间、里程分别计费,然后将费用分别相加,这种设计虽然有点复杂,但并没有报错,而且仿真结果正确。通过这次设计我们更加了解了FPGA的硬件结构,以后设计的时候要注意使用能实现的设计方式。这次设计让我们更加了解了EDA的设计方法,熟悉了模块化的设计思路,对于以后的设计很有帮助。总之,这次设计很有意义。.参考文献[1]潘松,黄继业.《EDA技术使用教程》.科学出版社,2010.6[2]刘江海.《EDA技术课程设计》.华中科技大学出版社,2009.5.附录参考程序:1.判断模块libraryieee;useieee.std_logic_1164.all;--entityjudgeisport(sclk,sta,lclk:instd_logic;dge:outstd_logic);end;architecturebehofjudgeisbeginprocess(sta,lclk,sclk)variablea:integerrange0to64;beginifsta='1'theniflclk'eventandlclk='1'thena:=a+1;endif;ifsclk'eventandsclk='1'thenifa=0thendge='0';--shijianprocesselsedge='1';--lichengprocessendif;endif;ifsclk='1'thena:=0;endif;elsedge='Z';endif;endprocess;end;.2.时间模块libraryieee;useieee.std_logic_1164.all;--entitytime_countisport(sta,sclk,dge:instd_logic;t_count:outstd_logic;minge:outintegerrange0to10;minshi:outintegerrange0to10);end;--architecturebehoftime_countisbeginprocess(sta,sclk,dge)variablecount:integerrange0to60;variablege:integerrange0to10;variableshi:integerrange0to10;variablet_c:std_logic;beginifsta='1'thenifdge='0'thenifsclk'eventandsclk='1'thencount:=count+1;ifcount=1thent_c:='0';endif;ifcount=60thencount:=0;ge:=ge+1;t_c:='1';ifge=10thenge:=0;shi:=shi+1;ifshi=10then.shi:=0;endif;endif;endif;endif;endif;elsege:=0;shi:=0;t_c:='0';endif;minge=ge;minshi=shi;t_count=t_c;endprocess;end;3.里程模块--1500round/km--1.00yuan/km-per150-+1--1.50yuan/km-per100-+1libraryieee;useieee.std_logic_1164.all;--entitydistance_countisport(sta,lclk,doub,dge:instd_logic;kmfen,kmge,kmshi:outintegerrange0to10;d_count:outstd_logic);end;--architecturebehofdistance_countisbeginprocess(sta,lclk,doub,dge)variablefen,ge,shi:integerrange0to10;.variablecount:integerrange0to150;variablect:integerrange0to150;variabled_c:std_logic;beginifsta='1'thenifdge='1'theniflclk'eventandlclk='1'thenct:=ct+1;count:=count+1;ifdoub='0'andshi=2then--singleandlicheng=20kmifct=1thend_c:='0';endif;ifct=100thenct:=0;d_c:='1';endif;elsifge=3orshi/=0then--doubleorlicheng=20kmandkm3ifct=1thend_c:='0';endif;ifct=150thenct:=0;d_c:='1';endif;elsect:=0;endif;ifcount=150thencount:=0;fen:=fen+1;iffen=10thenfen:=0;.ge:=ge+1;ifge=10thenge:=0;shi:=shi+1;ifshi=10thenshi:=0;endif;endif;endif;endif;endif;endif;elsefen:=0;ge:=0;shi:=0;d_c:='0';endif;kmfen=fen;kmge=ge;kmshi=shi;d_count=d_c;endprocess;end;4.计费模块libraryieee;useieee.std_logic_1164.all;--entityprice_countisport(sta,t_count,d_count:instd_logic;mjiao,mge,mshi,mbai:outintegerrange0to10);end;--.architecturebehofprice_countissignalt_ge,t_shi,t_bai:integerrange0to10;signald_ge,d_shi,d_bai:integerrange0to10;begin--process(sta,t_count)variabletshi,tbai:integerrange0to10;variabletge:integerrange0to10:=8;beginifsta='1'thenift_count'eventandt_count='1'thentge:=tge+1;iftge=10thentge:=0;tshi:=tshi+1;iftshi=10thentshi:=0;tbai:=tbai+1;iftbai=10thentbai:=0;endif;endif;endif;endif;elsetge:=8;tshi:=0;tbai:=0;endif;t_ge=tge;t_shi=tshi;t_bai=tbai;endproces
本文标题:基于-VHDL语言出租车计价器设计
链接地址:https://www.777doc.com/doc-5434082 .html