毕业设计(论文)基于FPGA的出租车计费系统设计.doc
郑州大学西亚斯国际学院本科毕业论文(设计) 题 目 基于FPGA的 出租车计费系统设计 指导教师 职称 讲师 学生姓名 学号 20111525114 专 业 电子设计自动化 班级 EDA1班 院 (系) 电子信息工程学院 完成时间 2015年04月20日 基于FPGA的出租车计费系统设计摘 要随着集成电路的应用越来越重要和普遍,各式各样的对集成电路的制作、仿真、设计工具也实现了高速的发展。比如,EDA技术获得长足进步,由此FPGA、CPLD相继出现并切取得一定成果。利用EDA技术对FPGA开发板的开发,不仅仅具有对程序的简化和对设计难度,稳定系数有了长足的进步 ,并且可以使得程序员能再程序中自由的设计修改其实现功能,这对设计人员来说非常方便。本文主要采用了FPGA类型的芯片,利用当前流行的VHDL语言制作了一套出租车计费系统,使之具有更好的一致性,有方便于产品的升级。本文设计之程序成功模拟了出租车的计费、预置功能和发动、停止动作,采用LCD1602完成出租车行驶里程、里程单价、总费用等主要信息的显示功能。该套系统可以和车速传感器配合使用,应用在不同车型上,很好地实现预期功能。关键词:FPGA;EDA技术;VHDL语言;计费系统 Taxi Billing System Design Based on FPGAABSTRACTAs integrated circuits become increasingly important , simulation, design tools,all has achieved rapid development. As technology continues to mature, such as EDA, FPGA and CPLD appeared and made some progress. Use FPGA, EDA technology to develop products, not only has the advantage such as high reliability, short , low and can be modified at any time, it's very convenient for the designer. In this paper, have use of the FPGA chip, take the current very popular VHDL language designed a taxi billing system, it has a more powerful consistency, help upgrade products. This paper implements the simulation taxi start, pause, billing, stop, preset functions, use LCD1602 displays mileage, mileage, price, total cost and other information. And achieved the desired functionality.Keyword: FPGA; EDA Technology; VHDL Language; Billing System目 录摘 要IABSTRACTII目 录31. 序论12. 相关技术概述22.1 FPGA基本结构特点22.2 VHDL硬件描述语言32.3.EDA技术简介43. 出租车计费系统硬件设计63.1 当前出租车计费系统存在问题63.2出租车计费系统问题解决方案63.2.1以FPGA取代MCU63.2.2用LCD取代LED63.2.3增加设定计价标准的功能74. 出租车计费器系统软件设计84.1系统要求与设计方案4.1.1 出租车计费器的系统要求84.1.2 出租车计费系统的整体设计方案84.2 系统各模块的功能及核心模块的实现104.2.1 系统模块的功能104.2.2系统部分核心模块的实现116. 整个系统的测试16结 论18致 谢19参考文献20附 录211. 序论近年来,人们对出行的要求越来越高,出租车的出现带给人们诸多方便,出租车行业的诞生与壮大是大势所趋,此时出租车行业顺应形势,快速发展。其中,性能良好的计价器对于规范行业管理,降低司乘纠纷是不可或缺的。采用模电及数电而设计的的计费系统有器件多、繁杂电路、失误率高并且不好调试。当前市面上多数出租车计价器都采取微控器,好比PD78F0034、89C51单片机基础上设计而成的计费系统。当前出租车的计费系统主要采取利用MCU比如89C51单片机来设计实现,主要采取LED显示。传统出租车计费系统已经发展应用了十几年时间,在使用习惯上具有很大优势,使用成本低廉,性能稳定的优点,可是在运行过程中,该系统并不非常稳定,有的时候会发生死机现象。本课题立足于上述背景,研究探讨了FPGA基础上的出租车系统实现方案,对于改造当前的计费系统,提高系统机动程度具有重要的现实意义。2. 相关技术概述2.1 FPGA基本结构特点当前大部分FPGA采取查找表技术,它们逻辑的最基本单元都是触发器和查找表组成。其中,查找表简称LUT(Loook Up Table,LUT)。因为查找表主要采用SRAM工艺,因此当前大部分FPGA基于SRAM工艺进行生产。可是SRAM芯片断电之后就会导致信息缺失,所以需要额外配置一个专门的芯片。上电时,由此芯片将数据加载至FPGA,FPGA即可正常运作。另外,有一部分的FPGA产品是利用Flash或者反熔丝工艺生产制作的,掉电话不会丢失配置好的信息,所以这种FPGA芯片不必要额外配置专业的应对芯片。本设计从系统的总成本方面考虑,决定利用反熔丝技术对FPGA实现计费功能的设计。随着应用系统需求的不断扩大,加之微电子技术及EDA技术等不断成熟,FPGA逐渐成为常用的数字系统开发平台。FPGA品种、型号繁多,不同品质型号的FPGA具体结构及性能指标也各具特点,但它们有一个共性特点,对逻辑性的功能块重组排序,由可编写代码程对这些功能块进行连接组装,来完成各种功能和任务。FPGA通常包涵三种基本资源:可编写的互通信息、输出/输入块以及逻辑块。其中,可编写的信息包括长度不一的连线段及一些可以编写的能控制开和控制关的模块,由这些连接各可以编写的逻辑块或者输出/输入功能块,组成各种可实现的电路;可编写的输出/输入块是外面管脚和内部芯片逻辑间接口,在逻辑单元的阵列周围回转;能编写的功能块则是使用者功能得以完成的基本单位,一般情况下几个逻辑功能块按照规律排成阵列结构,在芯上自由散布。用户能通过编写程序来决定各单元的功能及其互连关系,以实现逻辑的功能。但是,各种品种、型号的FPGA能编程的逻辑块内部的大小、构造及其连接方式等方向通常存在较大差异。随着工艺的不断进步及应用系统的需求变化,一般FPGA当中可能还包涵下述可选资源:1.算数单元,例如乘加器、高速硬件乘法器;2.高速串行I/O接口;存储器资源如RAM、块RAM;3.数字时钟管理单元如时钟锁定、数字延迟、倍频/分频功能;4.多电平标准兼容I/O接口;5.微处理器,如PowerPC405等硬件处理器IP核;6.特殊功能模块(以太网MAC等硬处理器IP核)。2.2 VHDL硬件描述语言系统设计采用VHDL语言,为从上向下的一种设计思路,该设计过程首先在整体上细分系统性能和作用,形成各个功能模块;进行各功能模块的设计;各个功能模块完成调试之后,将所有模块电路连接,进行统一调试,直到最终完成对电路系统的功能设计。大体流程如图2.2所示。VHDL文本编辑VHDL文本编辑FPGA/CPLD适配器FPGA/CPLD编程下载器VHDL仿真器时序与功能仿真器FPGA/CPLD器件和电路系统图2.2 VHDL工程设计流程图 伴随着EDA技术与系统的高速进步,采用硬件完成对FPGA的设计逐渐成为大势。借助QuartusII或者MAXPLUSII等软件,采用VHDL语言开发FPGA,完整流程如下:1.编辑文本:既可以用文本编辑器,也可以用专门的VHDL来编辑。VHDL文件通常保存为文件.vhd。2.功能仿真:对vhd文件的编译来完成仿真功能,并对其中的问题加以解决,可以得到结果的正确与否。3.逻辑综合:用逻辑综合器软件对VDd文件进行翻译表达,综合成布尔表达式及信号的连接关系。在这一步的情况下,软件将生成后缀为.edif(.edf)的EDA标准VHDL文件。4.布局布线:从上面生成的文件调入到厂家提供的软件里面进行编译,也就是说将之前已经设计好的逻辑放进FPGA中进行布线。5.时序仿真:从上面的软件中获得的具体的参数来利用仿真软件把电路时序进行验证。6.编程下载:仿真没有错误后,下载到芯片中。采取VHDL语言设计数字逻辑硬件系统具备很多优点。1.VHDL能够对逻辑设计结构进行清晰地描述,比如在逻辑设计当中有多少个子逻辑,这些子逻辑之间的连接方式等;2.VHDL重视电路能够实现的功能,对于逻辑具体依靠哪种电路去实现,则不是VHDL语言关心的问题。3.VHDL采取类似于高级语言语句格式对硬件行为进行描述,因此我们将VHDL语言称作“行为描述语言”。4.VHDL给出的逻辑模拟和调试提供给设计者最大空间,甚至用户可以不编写测试向量,而直接进行源代码级别的调试。5.设计者能够非常方便地对各种方案的可行性及优劣进行比较,降低设计难度。6.VHDL语言具有很强的表达能力,涉及范围面广,覆盖了逻辑设计的方方面面,允许多种软硬模型。7.设计师对VHDL的描述开始是最简的硬件只是,只是简单的通过EDA工艺,最后生成能够完成各种工作和各种参数描写的文件。2.3.EDA技术简介电子设计自动化的出现对其所在的电子系统工程师有了十足的推进,并是其获得了巨大的进步。电子自动化设计技术是在计算机平台基础之上,综合了计算机技术、电子技术和智能技术等,研制出的新的技术,帮助电子系统设计人员方便地进行繁琐复杂的设计工作。这种系统高层次的设计方法无需使用门级原理图对电路进行描述,而是对目标有选择性的来描述。因为他没有冗杂的设计过程,能让设计师傅把主要的时间都话费再对于概念的理解和方案的设计上,并且如果这些设想的功能和概念能够通过计算机来进行输入和表达,那么利用EDA可轻松的利用规则加以约束来实现自动的设计。此外,高层的设计只是概念的存在,不一定能满足现实的状况和厂家的综合库支持。其高层次设计的步骤如下所述:1.设计方案的确定,同样是采用自上而下的方法来实现系统的有条不紊的功能;2.输入设计。利用编辑VHDL代码进行编译,或者直接用图像直接输入,比如波形图、状态图、原理图等,这些方法容易一目明了,便于人轻松理解。3.源代码仿真。此项主要对系统功能的检验,对或者不对。4.适配、综合。这两项完成对于源代码综合优化的处理及把综合之后得到的网表文件对于某个具体器件做映射的操作,包涵布局布线、逻辑优化、逻辑分割、底层的器件配置等。5.器件的编程或者配置,也就是设计完成。把适配器所产生出来的器件编程文件借助编程器或者下载线缆再如到目标芯片CPLD或者FPGA当中,实现设计的功能。3. 出租车计费系统硬件设计3.1 当前出租车计费系统存在的问题 当前出租车计费系统主要存在以下问题:1. 更新周期长、难度大:虽然该计费系统很多的功能能够利用单片机实现,可是单片机的内部实现并不通用,他们有不同的命令,所以有不同的集,所以设计研发周期长,难度大。2. 计价方式不灵活:如果设计的系统不够完善,就会导致系统发生紊乱,缺乏灵活程度,复杂的功能设计无法实现。基于单片机设计的出租车计费系统计费方式比较死板,计价标准每发生改变一下,就需要重新烧录芯片,导致每次对计价标准的调整都不得不消耗大量的物力与人力,油价联动的实现颇费周折。由此,出租车的计费系统更新换代是科技进步的必然趋势,更是由市场需求决定的。3. 显示方式不灵活:传统的计费器显示采用LED,虽然看起来方便、简单,可实际上这种显示方式对计费器的外形设计要求固定化,假如需要对显示内容加以改变,则可能需要更换整个设备,对于产品的升级并不理想。3.2出租车计费系统问题解决方案3.2.1 以FPGA取代MCU随着数字可编程器件如FPGA等的出现,对于传统的电子设计无法完成的任务提供了非常好的解决方案,相对来说,基于FPGA设计的计费系统比微控制器更具优势。其电路简单,减少了外围器件,能够使用软件仿真,具有较高的灵活度,而且能够设计比较复杂的系统,编号的系统能够在不同的CPLD或FPGA芯片上通用。它可完成元件的任何功能,采用FPGA完成数字电路的开发,能够极大地减少完成设计时间,降低PCB的面积,提高系统的稳定性。同时,因为FPGA功能完全由VHDL语言所编写的程序决定,不不仅仅限个别芯片及其特殊的命令,而且可以根据需要进行重新编程,比较快地完成原型的开发,以便迅速地把产品推向市场。而一旦需求发生了变化,也可以对其进行现场更新,因此其更新换代能力提高了。3.2.2 用LCD取代LED基于液晶显示内容具有可编程性,因此其具有的灵活性及良好的升级能力远远超过LED。出租车计费器的输出内容与输出方式需要更改时,无需过多考虑外部设计,而只需在FPGA程序中做出改变就能实现。同时,液晶的价格不断下降为LCD取代LED提供了机会。3.2.3 增加设定计价标准的功能功能型模块可以随意提取,这样他的计费灵活性可以得到很大的提升,顺应当前出租车行业发展的需求,能够实现油价、运价同步调动。本课题采取Alter的CycloneIII系列的芯片(型号EP3C5E144C8),采用VHDL语言完成出租车计费系统的设计,使用LCD1602显示器进行输出,或者采用数码管进行输出,只要重新锁定输出端口就可以。此套计费系统,不仅可以实现计费功能,还能综合行驶路程和总费用等标准,自动调节单价。最后,把可执行的文件下载到实验开发系统中进行验证。经过实际操作验证,本设计能够完成起步价格的设置,等待时间的费用,以及单价,并且能得出最后的总价,完成开始的设想功能。4. 出租车计费器的软件设计4.1 出租车计费系统要求及设计方案4.1.1出租车计费系统要求本课题所设计的出租车计费系统应当具备如下功能:1.从车辆起步即启动计费功能,起步的价格设定为7元,行驶里程数小于3km只收起步价;2.里程数大于3km后,收费标准是2元/km,在起步价的基础之上,以行驶1km为单位进行计费累加;3.总费用达到或者超过100元,或者行驶的公里数大于50km之后,收费调整为3元/km;4.等待红灯的时刻或者根据客户要求泊车等候时,等待时间的前面10分钟不予计费,大于10分钟的时间按照1元/min进行计费;5.一旦发给计价器暂停的命令,则立即停止计费,原来的车费保持不变;而受到停止的命令,则计费归零,计费系统等待下一个计费周期开始时启动。本系统要求可以实现预置计费的功能,即可以对单价、起步价、计时收费、涨价费用、涨价里程等标准进行预置;能够对出租车的停车、暂停、运动状态进行模拟,按照不同的状态计费;出租车的收费标准、行驶里程、总费用和等待时间等的显示采取十进制。4.1.2 出租车计费系统设计方案通过上述设计要求基本能够得到出租车的计费器系统结构图(如图4.1.2所示),整套计费系统依功能应当氛围计费模块、计程模块、正/倒计时模块、时间模块、速度模块、LCD1602显示模块、分频模块。单价总费用Speed模块Start_stopGradeLCD显示模块Mon-ey模块Kilometers模块总里程判断Dffl模块Do_undo模块Timer模块Divider模块Key_stable模块Clk_20MReset1Hz500Hz等待时间Watch模块LCD1602控制信号显示数据图4.1.2 系统结构图当系统接收到了reset发出的信号,起步价变成9元开始计费,而倒计时寄存器则变为10分钟(10:00),其他的寄存器、计数器等则全部复位。当系统收到stop_start信号,先赋值一部分寄存器,使总费用保持不变,然后判断总里程和总费用,赋值2元给单价unit_price,其他的计数器和寄存器则继续维持初始状态。速度传感器输入信号Grade,本课题拟用4位的二进制数对速度传感器输入的脉冲频率进行模拟,并且同速度模块当中已经预先设置好了的速度大小相比较,提供给计程模块100m的路程标志脉冲。而系统则采取通过分频模块发出的时钟信号。4.2各系统模块的功能及核心模块的实现4.2.1 系统模块的功能模块Key_stable:采样reset信号并通过判断和处理,可以对reset按键做消抖处理,避免因为微小震动产生复位信号。模块Divider:能够产生适应于系统的1Hz和500Hz的时钟信号。模块Speed:判断速度信号Grade,对于need_100m变量的值发生决定性作用。变量need_100m是汽车平均行驶100m必要的诗中周期数,当时钟周期数达到一定值,则产生一个clk_100脉冲。模块Timer:汽车启动之后,遇到红灯、交通堵塞、顾客等人等情况不能前进的时候,出租车收费方式转为计时收费。经过对速度信号Grade的判断,决定是否开始计时。Grade为零则开始计时。时间达到了预设的时间长度,则立刻产生一个脉冲clk_time,而且开始重新开始计算时间。脉冲clk_time的产生表明等待时间已经满足了计时收费的标准。在本设计中,计时收费的标准设定为60s。模块Do_undo:通过判断信号Grade和Start_stop,决定模块Watch是否开始运行。模块Watch:判断输出信号do_undo,如果输出1,则模块里的倒计时模块dec_watch开始工作,使mux2_1二选一模块输出显示倒计时;当倒计时达到00:00,停止倒计时的同时开启正计时模块inc_watch,起始值即是00:00。倒计时模块和正计时模块分别由十进制计数器和六进制计数器组成(此部分系统结构如图所示)。Mux2.1模块六进制减法计数器模块十进制减法计数器模块Dec.watch模块六进制加法计数器模块十进制加法计数器模块Inc.watch模块Do_undo倒计时显示flag正计时显示计时显示图7.0 Watch电路模块内部系统结构图模块Dffl:通过模块Watch输出的信号控制Dffl。当flag=0,则系统处于倒计时状态,dffl关闭,则Time模块输出的脉冲clk_time无法经由dffl传递给模块Money,如此,就能够达到预设时间之内不计费的效果。模块Kilometers:因为模块Speed传送的一个脉冲信号clk_100表示车已经行驶100m,因此只需要对脉冲信号clk_100进行技术,就可以得到总的行进距离km_cnt。模块Money:由两个进程构成。第一个进程根据模块Kilometers输出的驾驶里程对是否超过了3km,超过之后按照单位公里数收费,行驶里程超过50km或总费用超过100元,则unit_price从原本的2元/km变成3元/km;另外一个进程的每一个时钟周期都对输出给模块Speed的脉冲信号clk_100m进行检测,判断其有没有累加到1km(10个),同时对模块Dffl输出的clk_time_ok信号的值进行检测。当行驶里程大于5km而且clk_100m数目累计达到10个之后,在总费用基础上加上里程单价,检测得到clk_time_ok=1的时候,则总费用加计时单价。在模块当中嵌入了能够把二进制的数转成十进制数的模块B_to_BCD,把总费用和里程单价转成十进制并输出。显示模块LCD:系统采取字符型显示数据,在LCD上显示等待时间、行驶的单价、总费用和总里程数。由于1602液晶具有很多优点,比如良好的稳定性、简单的外围电路、小巧的体积和低廉的价格等,而LED数码管电路比较复杂,经过综合衡量,本设计采用LCD1602。可是在实际的应用当中,为了满足客户要求,需要采取不一样的显示方法,因此设计中设置数据的输出格式为BCD码,就能比较方便地实现将LCD1602转换成LED七段数码显示管。4.2.2系统部分核心模块的实现1.速度电路模块Speed这个模块的功能是实现对实际速度的脉冲信号的模拟,通过判断速度信号grade和开始信号start_stop,系统的时钟开始计数,而当计数值同grade值所对应的数目相当时输出一个脉冲clk_100m。仿真采用100MHz时钟脉冲,在reset无效,而start_stop是高电平的时候,输出的clk_100信号频率以grade的大小而发生变化。2.计时电路模块Timer模块Timer的作用是计时收费,对允许计费之后车速是零的时间进行记录。判断信号Grade,标记在Grade=0的时候开始;累计时间到了预设的时长时,产生一个脉冲clk_time,而且重新开始计时。这样,允许计费的时间段内,Grade=0,每隔段确定的时间就发出一个脉冲clk_time,Grade不等于零的时候,不输出脉冲信号。3.等待时间电路模块Watch这个模块的功能主要是实现正计时和倒计时,其输入频率为1Hz,在do_undo=1的时候计时开始,do_undo=0的时候则计时暂停。不管在什么状态中,但凡reset=0,这个模块的输出即是程序中已经设定好了的10:00(10分钟)。电路模块Watch的内部构造氛围三个部分,其中,第一个模块是dec_watch倒计时模块,这个电路通过对do_undo的输出信号进行判断以决定是否启动倒计时。当倒计时倒计到0时,会发出一个脉冲clk,输出端flag为1,且反馈给倒计时模块dec_watch,倒计时停止。第二个部分是正计时模块inc_watch,通过判断模块do_undo及dec_watch输出的信号flag,决定是否开启正计时的电路。即,当复位信号结束,而do_undo=1,且flag=1,则电路inc_watch开启正计时;do_undo=0,则处于保持的状态。4.里程电路模块Kilometers这个模块的功能主要是记录出租车的行进距离,它对于行进距离km_cnt的计算以对脉冲信号clk_100m的计数作为基础。由于一个clk_100m脉冲信号代表出租车行进了100m,因此只需要对于脉冲信号clk_100m的树木进行记录就能正确统计行驶距离。其中,十分位是km_cnt0,个位是km_knt1,十位是km_cnt2,都是十进制数,超出量程的溢出标志位是flag_100km,而能够体现出速度状态的输出端口是light,和LED等顺序连接之后,就能比较直观的将速度快慢显示出来。就是说,在行驶里程数目达到99.9km,而flag_100km又加1后,里程数就会从零重新开始计数。伴随里程数目不断增加,light表现出循环变化。5.计费电路模块Money计费模块可以分成进程M1、进程M2,和将二进制转换成BCD码的模块。其中,进程M1用来设置里程单价unit_price,产生按照里程单位进行计费的信号en_km。记录距离到达3km以后,则en_km=1,开始按照里程进行计费。当驾驶的总里程大于50km,或者总费用超过100元,单价unit_price从之前的2/km变成3/km。进程M2用来累计总费用。clk_time_ok=1则总费用与等待时间的单价wait_unit_price相加;当en_km=1,而且对于clk_100的计数达到了10的时候,则总费用基础上加上里程收费单价unit_price。6.显示电路模块LCD将各模块需要输出显示的数据传送给该模块,通过该模块把数据输出到LCD1602显示。因为LCD1602所显示的为数据ASCII码的值,所以把将显示的数据先转成与数字对应的ASCII码值,然后把该值传送到LCD1602。使用VHDL编写LCD1602显示的核心程序如下:beginLCD_RW <=0;LCD_EN<=LCD_CLK_500Hz;process(LCD_CLK_500Hz,MyState,reset)beginif Reset=0thenn1<=0;MyState<=Write_instr;LCD_RS<=0;elsif rising_edge(LCD_CLK_500Hz)thencase MyState iswhen Write_instr=> /将命令写入LCD控制器if(n1=0)thenLCD_DATA<=00111000;n1<=n1+1;elsif(n1=1)thenLCD_DATA<=00000110;n1<=n1+1;elsif(n1=2)thenLCD_DATA<=00001100;n1<=0;MyState<=Set_DDRam_line_1;end if;when Set_DDRam_line_1=>LCD_RS<=0LCD_DATA<=10000000;MyState<=Write_Data_line_1;when Write_Data_line_1=>LCD_RS<=1;if n1=15 thenLCD_DATA<=MyRam_line_1(n1)(7downto0);n1<=0;MyState<=Set_DDRam_line_2elseLCD_DATA<=MyRam_line_1(n1)(7downto0);n1<=n1+1;MyState<=Write_Data_line_1;end if;when Set_DDRam_line_2=>/0xc0=>40HLCD_RS<=0;LCD_DATA<=11000000;MyState<=Write_Data_line_2;when Write_Data_line_2=>LCD_RS<=1;if n1=15 thenLCD_DATA<=MyRam_line_2(n1)(7downto0);n1<=0;MyState<=Set_DDRam_line_1;elseLCD_DATA<=MyRam_line_2(n1)(7downto0);n1<=n1+1;MyState<=Write_Data_line_2;end if;when others=>MyState<=Write_instr;end case;end if;end process;end art;通过VHDL状态机进行LCD1602数据的写入。5. 整个系统的测试对于顶层的编程,要依据上述的十个模块,即TAXI_TOP.vhd编译,对引脚进行锁定。该系统输入引脚总共7位,包涵时钟信号一位(clk_20M),复位信号一位(reset)、暂停/启动信号一位(start_stop)及速度信号4位(grade)。共27位输出引脚,其中包括LCD16023位控制位(EN/RW/RS),数据8位(DATA),速度指示灯8位(light),百公里标志4位(Flag_100km),千元标志4位(Flag_1000RMB)。通过clk_20M导入时钟频率20MHz;锁定reset至一个常高的按键;锁定start_stop至一位拨码的开关;通过开关性质的薄码对grade3.0进行输入;将Light7.0锁定至8个LED灯,Flag_100km3.0与Flag_1000RMB3.0则分别锁定于两位LED数码管,EN、RW、RS、DATA7.0分别锁定于相对的LCD1602输入引脚;编写之后把这套程序载入实验开发系统进行测试。首先置零start_stop与grade3.0,接着按reset复位键,液晶屏显示里程单价“<2.0/km>”免费等待的时间“<10:00>”,起步价“¥:009.0”,驾驶里程“km:00.0”。把start_stop设置成1之后,倒计时钟启动,代表正处在等待中,计费已经开始。假如这个时候把grade设置成任意数值,计时就会立即停止,而公里数值增加,LED数码管依次同时点亮,而且数码管变量的速度同grade值的大小成正相关关系。当里程数值大于10km,则总费用是原基础之上累加2/km;里程数达到50km之后,行驶单价即变成3,总价是原数值上累加3/km;里程数增大超过100km时,会使里程的溢出标志数码管加1,里程数显示变成0;这时候,如果把grade置为零,则倒计时钟开始倒计时,倒计到00:00,则启动正计时钟,每分钟的总费用在原来的基础上累加1/60s。总费用满1000,总费用的数码管溢出位标志增1,总费用显示从零开始继续计费。也可以重置之后重新测试,在里程数没达到50km时将grade置为零,则系统进入等待运行的位置,什么时候总费用增加到100元,里程单价即由2元升为3元。上面的过程当中,只要start_stop置零,则系统停止工作,保持停止前一刻的状态。当reset置零,改系统重新启动并且开始正确计费。系统当中各标准的情况可以精确到0.1元,而且可以方便的地在系统内中修改起步价、行驶单价等数据,而不必要变更很多的数据才能实现。因为数字信号的输入的过程中会产生震颤的现象,并且会有不良反应,所以对于再输入中避免震颤的问题上面是不可或缺的,而且可以大大提高数组电磁机能的兼容性的一种关键技术。因此,在设计的工程上加入除颤功能能有效避免外界因素带来的各种影响,即电路模块Key_stable,可以充分的防止由于出租车影响而产生的失误操作。使用康芯CycloneIII系列实验班本EP3C5E144C8时,为了能够实现清晰的实验演示,可以用有序的LED灯来依次快慢的点亮,用来表示车子的快慢,为乘客展示更具体的效果。因为开始设定的费用最高价格是999.9元,最远行驶99.9km,如果想对更大量程范围进行显示,则需要借助溢出标志位,即达到1000元或者100km之后,对应的溢出位会加上1,溢出位范围是1F,如此,该系统能够显示的行驶里程数可达1599.9km,而总费用可达到15999.9元。结 论本论文利用FPGA的技术,使用VHDL语言完成了对出租车计费系统的设计,出租车计费器基本的功能都能够得到实现,而且能够达到比较正常、合理的运行。EDA技术为借助系统实现数字系统的逻辑综合和布线布局,及设计仿真工作。该系统的设计完成对于所设计系统的功能描述,就能由计算机的软件自己处理,得出系统预计的结果。比如本系统中设定的出租车起步价、里程单价等都无需硬件电路支持而可以直接在VHDL源程序当中做修改。由此可见,采用FPGA能够极大改善设计的效率和灵活性,实现快捷修改。 致 谢经过三个月的努力,基于FPGA的出租车计费系统设计论文终于完成了。在论文完成的过程中,我复习了很多与课题相关的图书,对于所学知识的了解更加清晰,并掌握了一定的技能,可以说,完成论文的过程是再次学习的一个过程,这期间的收获对我来说是终身受益的。在论文完成期间,我特别感谢我的指导老师张会敏,张老师严谨的治学风格和细致的探究精神对我产生了极大影响,一次又一次帮我从知识的迷雾中引领向光明。没有张会敏老师的帮助,我的论文不可能在进度之内顺利完成。在这里,请让我对张会敏老师说一句:“老师,您辛苦了!”此外,对于帮助过我的同学和社会人士,也请允许我满怀感激之情,谢谢各位。参考文献1亿特科技.CPLD/FPGA应用系统设计与基础篇M.北京:人民邮电出版社,2005,93-102.2求是科技.FPGA数字电子系统设计与开发实例导航M.北京:人民邮电出版社,2005,115126.2黄智伟.FPGA系统设计与实践M.北京:电子工业出版社,2005,200-217.3胡菲卢益明.基于FPGA的PCI接口控制器设计与实现J.电子科技.2006(7).71-74,79.4高立新.二进制补码乘法及其FPGA实现J.内江科技.2006(5)111-112.5裴亚男,高彦丽,孟艳花.基于FPGA的自动门控制系统设计J,电子技术应用.2006,32(7).86-89.6郭来功,基于FPGA的串行实时时钟的电路设计J,矿业科学技术.2006,34(1).19-22,32.7孙戎,梁宜勇.FPGA在直流电机调速中的应用N.重庆工学院学报.2006,20(5).78-80.8付家才.EDA工程实践技术M.北京:化学工业出版社,2005,57-63.9曹公正,陈娟,张宝利,陈乾辉.FPGA在出租车记费器上的研究与设计N.长春工业大学学报,2007,28(3):267-270.10蒋璇.数字系统设计与PLD应用M.北京:电子工业出版社,2005,181-190.11亿特科技.CPLD/FPGA应用系统设计与基础篇M.北京:人民邮电出版社,2005,93-102.12EDA先锋工作室.AlteraFPGA/CPLD设计(高级篇)M.北京:人民邮电出版社,2005,27-58.13史小波.集成电路设计VHDL教程M.北京:清华大学出版社,2005,15-22.14北京理工大学ASIC研究所.VHDL语言100例详解M.北京:清华大学出版社,2003.15Jin LiLongxu, JinGuoning Li. FPGA Configuration Monitoring Technology for Space Optical Imaging SystemsZ.Jilin: Institute of Optis, Fine Mechanics and Physics Chinese Academy of Sciences .2012.16Lei RenLinbo, TangYe Jin. Implementation of MPEG codec system based on FPGA and upper computerZ. B