您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于FPGA的出租车计价器设计
基于FPGA的出租车计价器设计摘要介绍了出租车计费器系统的组成及工作原理,简述了在EDA平台上用FPGA器件构成该数字系统的设计思想和实现过程。论述了计程模块,计费模块,计时模块,译码动态扫描模块等的设计方法与技巧。1.引言随着EDA技术的高速发展,电子系统的设计技术发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了诸多方便。利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。本文介绍了一个以Altera公司可编程逻辑芯片cyclone2系列的EP2C5T144C8的FPGA芯片为控制核心、附加一定外围电路组成的出租车计费器系统。随着社会的不断进步,人们生活水平的不断提高,出租车逐渐成为人们日常生活不可缺少的交通工具。而计价器作为出租车的一个重要组成部分,关系着出租车司机和乘客双方利益,起着重要的作用,因而出租车计价器的发展非常迅猛。2.出租车计费系统的实验任务及要求2.1技术要求(1)掌握较复杂逻辑的设计、调试。(2)进一步掌握用VHDL语言设计数字逻辑电路。(3)掌握用Max+pulsII软件的原理图输入的设计方法。2.2功能要求基本功能:(1)按行驶里程收费,起步价为9.00元,并在车行3公里后再按3元/公里计算车费。(2)实现模拟功能:能模拟汽车启动、停止。(3)设计动态扫描电路:将车费、里程、等待时间动态的显示出来。(4)用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。(5)各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。附加功能:(1)增加了晚上计费功能和等待功能。晚上起步价为12.00元,并在车行3公里后再按4元/公里计算车费。车白天停止超过三分钟后按1元/分钟计算,晚上超过3分钟按2元/分钟计算。(2)实现预置功能:能预置起步费、每公里收费、等待加费时间。(3)实现模拟功能:白天、黑夜;等待、行驶状态。(4)设计超过三公里提醒功能。2.3本人任务本人负责软件部分。2.4任务书(附录一)3.方案设计及原理框图3.1硬件方案设计及原理框图硬件系统组成框图各模块的作用和组成:(1)开关模块该模块的作用是用于电路的输入的信号。主要有三个开关以及三个限流电阻,电源构成。(3)动态显示模块:此模块由六个数码管和三个二极管所构成,17个200Ω电阻起到限制电流的作用,使得流到数码管的电流适当,防止数码管中的电流过大,而使得数码管损坏。数码管将计费、等待时间和里程动态的显示出来。3.2软件方案设计及原理框图FPGA模块动态显示电路开关电路3.2.1系统的顶层框图及方案设计:信号输入:各种控制信号经输入端给控制芯片。控制芯片:采用的有CPLD或者FPGA等。动态显示电路:采用的是数码管来实现功能的输出。3.2.2FPGA内部具体框图及方案设计:出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,里程计数器从0开始计数,费用计数器从9开始计算;出租车载客中途等待,等待时间计数器从0开始计数。最后根据行驶里程或停止等待的时间的计费标准计费。出租车到达目的地停止后,停止计费器,显示总费用。根据出租车计费器的工作过程,本系统采用分层次、分模块的方式设计,其FPGA内部具体框图如下所示。各模块的功能:(1)由FPGA晶振电路产生50MHz时钟信号并输入。(2)分频器:将时钟信号进行分频。(3)标志模块:将按钮产生的脉冲转化为一种标志信号。(4)计程模块:在等待信号未作用时,来一个时钟脉冲信号,里程值加1。车费计数模块车行驶状态译码模块输出控制模块里程计数模块控制芯片信号输入动态显示模块分频器输入信号该模块还包含一个路程计费标志的小模块,输出一个路程计费的信号。(5)等待状态模块:等待信号作用时,该模块可以记录等待的时间,并产生等待计费的信号。(6)车费计数模块:按行驶里程收费,分为白天和黑夜。白天收费标准:起步费为12.00元,超过3公里按4元/公里,车暂停超过三分钟按2元/分钟计算。黑夜收费标准:起步费为15.00元,超过3公里按5元/公里,车暂停超过三分钟按1元/分钟计算。(7)输出控制模块:分时输出里程、等待时间、费用三个信号,实现动态显示功能。(8)译码模块:实现将车费计数模块、等待状态模块和里程计数模块输出的BCD码转换成七段码输出。4.各单元模块设计,仿真结果及分析本系统采用层次化、模块化的设计方法,设计顺序为自下向上。首先实现系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。4.1分频模块:4.1.1分频模块的框图CLK0FOUTPULSEinst5图3.1.1分频器的实体图此模块的功能是对总的时钟进行分频,总的时钟是50M。计数分频器使用五个这样基本的分频器(35分频)组合而成,控制模块分频器使用三个这样基本的分频器(35分频)组合而成。4.1.2分频模块的VHDL程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYPULSEISPORT(CLK0:INSTD_LOGIC;FOUT:OUTSTD_LOGIC);ENDPULSE;ARCHITECTUREONEOFPULSEISBEGINPROCESS(CLK0)VARIABLECNT:STD_LOGIC_VECTOR(2DOWNTO0);VARIABLEFULL:STD_LOGIC;BEGINIFCLK0'EVENTANDCLK0='1'THENIFCNT=100THENCNT:=000;FULL:='1';ELSECNT:=CNT+1;FULL:='0';ENDIF;ENDIF;FOUT=FULL;ENDPROCESS;ENDONE;4.1.3仿真的结果从该波形图可以看出输入脉冲的频率是输出脉冲的频率的35倍。4.2计程模块:4.2.1计程模块的框图:clksSSWRLC[7..0]JCinst2SSLC[7..0]LCJFBZLCJFBZinst4此模块的功能是计算出租车行驶的路程。在出租车启动并行驶的过程中(开始/结束信号SS为1,行驶/等待信号WR为1),当时钟clks是上升沿的时候,系统即对路程计数器JC的里程计数器进行加计数,当路程超过三公里时,系统将输出标志正脉冲LCJFBZ。4.2.2计程模块的VHDL程序(1)计程程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityJCisport(clks,SS,WR:instd_logic;LC:BUFFERstd_logic_vector(7downto0));endentityJC;architectureoneofJCisSIGNALQ1,Q0:std_logic_vector(3downto0);beginprocess(clks,SS,WR,LC)VARIABLESW:STD_LOGIC_VECTOR(1DOWNTO0);beginSW:=SS≀IFSW=00ORSW=01THENQ1=0000;Q0=0000;ELSIFSW=11THENQ1=Q1;Q0=Q0;ELSIFCLKS'EVENTANDCLKS='1'THENIFQ1=9ANDQ0=9THENQ1=0000;Q0=0000;ELSIFQ0=9THENQ1=Q1+1;Q0=0000;ELSEQ1=Q1;Q0=Q0+1;ENDIF;ENDIF;ENDPROCESS;(2)计程标志程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityLCJFBZisport(SS:instd_logic;--SS开始/复位信号,LC:INSTD_LOGIC_VECTOR(7DOWNTO0);LCJFBZ:OUTstd_logic);endentityLCJFBZ;architectureTWOofLCJFBZisBEGINPROCESS(SS,LC)BEGINIFSS='0'OR(LC(7DOWNTO4)=0000ANDLC(3DOWNTO0)4)THENLCJFBZ='0';ELSELCJFBZ='1';ENDIF;ENDPROCESS;ENDTWO;4.2.3计程模块仿真结果:从波形图可以看出在时钟的控制下当SS为低电平的时候LC为零,当SS为高电平且WR为高电平的时候LC开始计数,当计到大于三的时候输出了LCJFBZ为高电平。4.3计时模块:4.3.1计时模块的框图:CLKSSDDBZDDJFBZDDSJ[7..0]DDZTinst1此模块用于计算停车等待的时间。在出租车行进中,如果车辆停止等待,计数器则在信号clk的上升沿进行加计数,当累计等待时间超过2(不包括2分钟)分钟时,输出标志DDJFBZ正脉冲信号。4.3.2计时模块的VHDL程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYDDZTISPORT(CLK,SS:INSTD_LOGIC;DDBZ:INSTD_LOGIC;DDJFBZ:OUTSTD_LOGIC;DDSJ:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYDDZT;ARCHITECTUREONEOFDDZTISBEGINPROCESS(CLK,SS,DDBZ)VARIABLEQ1,Q0:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFSS='0'THENQ1:=0000;Q0:=0000;DDJFBZ='0';ELSIFDDBZ='1'THENIFCLK='1'ANDCLK'EVENTTHENIFQ1=9ANDQ0=9THENQ1:=0000;Q0:=0000;ELSIFQ0=9THENQ1:=Q1+1;Q0:=0000;ELSEQ1:=Q1;Q0:=Q0+1;ENDIF;IF(Q10ORQ03)THENDDJFBZ='1';ENDIF;ENDIF;ENDIF;DDSJ(7DOWNTO4)=Q1;DDSJ(3DOWNTO0)=Q0;ENDPROCESS;ENDONE;4.3.3计时模块的仿真结果:从波形图可以看出在clk的控制下当SS为高电平DDBZ为高电平的时候时间计数但是费用没有计数,DDJFBZ为低电平。4.4计费模块:4.4.1计费模块的框图:SSDNLC[7..0]DDSJ[7..0]LCJFBZDDJFBZFY[7..0]JFinst3费用计数器模块用于出租车启动后,根据行驶路程和等待时间计算费用。当出租车启动时,SS为高电平,用于将费用计数器复位为起步价10元;当车处于行驶状态且满3公里时,select_clk信号选择distans_enable,此后路程每满1公里,费用计数器加1元;当出租车处于停止等待状态且时钟满2分钟时,select_clk信号选择time_enable信号,时间每满1分钟,费用计数器加1元。4.4.2计费模块的VHDL的程序:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;--定义函数名PACKAGEPACKEXP1ISFUNCTIONbcd_add8(AIN,BIN:instd_logic_vector)RETURNstd_logic_vector;END;--描述函数体PACKAGEBODYPACKEXP1ISFUNCTIONbcd_add8(AIN,BIN:std_logic_vector)RETURNstd_logic_vectorIStypetype_bcdx4isarray(3downto0)ofstd_logic_vector(4down
本文标题:基于FPGA的出租车计价器设计
链接地址:https://www.777doc.com/doc-4517471 .html