基于FPGA的出租车计费系统设计.docx
- 文档编号:1142098
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:49
- 大小:744.11KB
基于FPGA的出租车计费系统设计.docx
《基于FPGA的出租车计费系统设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的出租车计费系统设计.docx(49页珍藏版)》请在冰点文库上搜索。
基于FPGA的出租车计费系统设计
基于FPGA的出租车计费系统设计
摘要
随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了诸多方便。
利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。
本文介绍了一种基于FPGA出租车计费系统的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法,利用FPGA的可编程性,简洁而又多变的设计方法,缩短了研发周期,同时使出租车计费器的体积更小功能更强大。
本设计不仅实现了出租车计费器所需的一些基本功能,同时考虑到出租车行业的一些特殊性,更注重了把一些新的思路加入到设计中。
主要包括采用了FPGA芯片,使用VHDL语言进行编程,使其具有了更强的移植性,更加利于产品升级。
关键字:
出租车计费器,FPGA,QuartusII,VHDL语言
BasedonFPGAtaxibillingsystemdesign
ABSTRACT
WiththerapiddevelopmentofEDAtechnology,electronicsystemdesigntechniquesandtoolshavebeenprofoundchangesinlarge-scaleprogrammablelogicdeviceCPLD/FPGAemergenceofdesignerstobringalotofconvenience.Useitforproductdevelopment,notonlylowcost,shortcycle,highreliabilityandfullintellectualpropertyrights.
ThisarticlepresentsamethodofhowtouseFPGAtodesignataximeter,andhowtoreplacetraditionalelectricaldesignwithburgeoningEDAparts.ThedevelopperiodcanbeshortbecauseoftheprogrammableFPGAandthedesignmethodwhichissimpleandvariable.Itcanalsomakethetaxicountmetersmallerandmorefunctional.Besidesthebasicfunctionsoftaxicountmeter,somenewideasareaddedconcerningabouttheparticularityofthiscalling.ItbecomesmoretransplantableandeasiertoupgradebyusingoftheFPGAandprogrammingwithVHDLlanguage.
KeyWords:
Taximeter,FPGA,QuartusII,VHDL
第一章引言
1.1课题研究背景及目的
随着中国城市化进程的快速发展,人们出行选择的交通工具也越来越多样化,出租车作为一种重要的交通工具,也越来越多的被人们所选用。
虽然在一些大城市出租车已相当普及,但是在一些小城市,出租车行业也因为城市化进程的加快而快速发展。
出租车行业在我国是八十年兴起的一项新兴行业,目前,出租车已成为城市公共交通的重要组成部分。
由于电子技术的不断发展与进步,集成电路的设计方法也在不断地更新。
时至今日,传统的手工设计过程已经被先进的电子设计自动化(EDA)工具所代替。
以硬件描述语言和逻辑综合为基础的自顶向下的电路设计方法能满足日趋复杂的集成电路系统设计需求。
在这种情形下,传统的出租车计费器设计方法已不能跟上现在的节奏,以往的出租车计费器在功能上也远不能满足现实的需要。
以往的出租车计费器的不稳定性,功能少等缺点使得大家开始寻找更新的,功能更强大,性能更稳定,价钱更低廉的新型出租车计费器。
而大规模可编程逻辑器件的出现,VHDL硬件描述语言的出现,使得这一切成为可能。
本设计拟在QuartusII软件中结合VHDL硬件描述语言的方案设计一套出租车计费系统,使之实现基本计费功能、预制功能、模拟功能、显示功能等其他附加功能。
通过硬件描述语言VHDL设计出租车计费系统,会加强学生对电子设计自动化(EDA)工具、FPGA、电子技术等相关课程专业知识综合能力的应用,为以后的开发及科研工作打下基础。
FPGA是电子设计领域中最具活力和发展前途的一项技术,未来必定会取代部分落伍的数字器件。
本设计的研究目标和意义也就是要使用价钱低廉、性能稳定的大规模逻辑器件,用VHDL硬件描述语言进行编程,设计出一款功能强大、性能稳定、价钱低廉、可扩展性强、适应目前出租车市场需求的出租车计费器,以解决目前出租车计费器存在的一系列问题。
1.2国内外研究状况
从国内外的各种研究方法来看,实现出租车计费系统总共有三种方案。
利用大规模的数字逻辑器件来实现,利用89C51实现,利用CPLD/FPGA来实现。
二十世纪后半期,数字系统得到了飞速发展,同时为了提高系统的可靠性与通用性,微处理器和专业集成电路逐渐取代了通用全硬件电路。
目前,业界大量可编程逻辑器件,尤其是现场可编程器件被大量地应用在集成电路的制作当中。
理想的可编程逻辑开发系统能符合大量的设计要求:
它能支持不同结构的器件。
在多种平台运行,提供易于使用的界面,并且有广泛的特征。
可编程器件的逻辑功能描述一般分为原理图描述和硬件语言描述,原理图描述是一种直观简便的方法,它可以讲现有的小规模集成电路实现的功能直接用可编程器件来实现,而不必去将现有的电路用语言来描述,但电路图描述方法无法做到简练。
而语言描述可以精确和简练地表示电路的逻辑功能,现在可编程器件的设计过程中广泛使用。
常用的硬件描述语言有ABEL、VHDL语言等,其中VHDL语言是一种行为描述语言,其编程结构类似于计算机中的C语言,在描述复杂逻辑设计时,非常简洁,具有很强的逻辑描述和仿真能力,是未来硬件设计语言的主流。
1.3课题主要安排及研究内容
1.设计内容
用VHDL语言设计一个出租车计费系统,使之可以实现对出租车进行计费的功能。
2.要求
运用FPGA技术,在QuartusII软件中结合VHDL硬件描述语言的方案设计一套出租车计费系统,使之实现基本计费功能、预制功能、模拟功能、显示功能等其他附加功能。
3.任务
(1)熟悉设计的题目以及学习应用软件程序。
(2)独立设计完成系统各个模块的编程。
。
(3)能够通过软件完成自己所编制的程序的仿真。
4.内容结构安排
本设计从出租车计费系统的发展背景、国内外现状、研究的目标和意义、研究的思想和主要工作开始进行了全局的研究设计,第二章接着介绍了设计出租车计费系统所用到的可编程逻辑器件FPGA和VHDL硬件描述语言做了简介,还有介绍了系统的方案论证及其设计原理。
第三章对出租车计费系统的设计用到的各个功能模块及其电路的设计进行了详细的介绍。
第四章对所编写的各个模块的程序进行仿真,并验证仿真结果。
最后对本设计进行总结与展望。
第二章系统的设计方案
2.1方案论证
2.1.1传统出租车计费器缺陷
传统计费器不足可以体现在以下几个方面:
1.产品更新周期长。
传统出租车计费器利用89C51单片机作为MCU来实现。
但由于不同的芯片有不同的指令集,单片机程序往往是不通用的,因此设计研发周期长,灵活度不够,不易实现功能复杂设计。
2.计价方式不灵活。
每次计价标准修改都需要将芯片重新烧录,费时费力。
3.显示方式不灵活。
由于传统计费器采用LED显示,看似简单、方便,但是这种方式要求计费器外形设计固定化,如果需要改变显示内容,甚至需要整个设备的更换,不利于产品的理想升级。
这些都体现了目前对出租车计费器市场更新换代的需求。
2.1.2解决方案
考虑到目前出租车行业迅猛发展的趋势以及对计费器更高的灵活性要求,本设计希望尝试一些新的方法来予以解决。
1.利用FPGA取代MCU。
利用FPGA设计出租车计费器,可行性高,电路简单,灵活度高,通用性强。
2.增加计价标准设定功能。
通过设计此功能模块可以使得计价标准设计更加灵活,体现目前出租车行业发展的需要,使运价、油价联动成为可能。
3.利用LCD取代LED。
由于液晶的显示内容的可编程性,使其具有LED不可替代的灵活性和完善的升级能力,出租车计费器在需要改变显示方式和内容时不需过多考虑外形设计,只需在FPGA程序中改动即可。
同时液晶价格的持续走低,都使LCD取代LED成为可能。
2.2FPGA简介
FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个新概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。
FPGA的基本特点主要有:
(1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。
(2)FPGA可做其它全定制或半定制ASIC电路的中试样片。
(3)FPGA内部有丰富的触发器和I/O引脚。
(4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
(5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。
目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。
用户可以根据不同的配置模式,采用不同的编程方式。
加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。
掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。
FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。
当需要修改FPGA功能时,只需换一片EPROM即可。
这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。
因此,FPGA的使用非常灵活。
FPGA有多种配置模式:
并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。
2.3硬件描述语言VHDL简介
VHDL全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage(超高速集成电路硬件描述语言),诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点[5]。
利用VHDL语言设计数字逻辑硬件系统具有多方面的优点。
1.VHDL可以用来描述逻辑设计的结构,比如逻辑设计中有多少个子逻辑,而这些子逻辑是如何连接的。
2.VHDL并不十分关心一个具体逻辑是靠何种电路实现的,设计者主要把精力集中电路所能实现的功能上。
3.VHDL采用类似于高级语言的语句格式完成对硬件行为的描述,所以我们称VHDL为行为描述语言。
4.VHDL所给出的逻辑的模拟与调试为设计者提供了最大的空间,用户甚至不必编写任何测试向量便可进行源代码级的调试。
5.设计者可以非常方便地比较各种方案的可行性和优劣,大大降低了设计的难度。
并且设计者的原始描述是非常简练的硬件描述,经过EDA工具处理最终生成付诸生产的电路描述或版图参数描述的工艺文件。
6.VHDL语言具有良好的可读性,VHDL语言中的设计尸体(DesignEntity)、程序包(Package)、设计库(Library)为设计人员重复利用别人的设计成果提供了技术手段。
2.4设计原理
2.4.1系统的计费方式
某城市的出租车计费标准如下所述:
出租车白天的起步价为2km范围内6元,晚上(22时至次日5时)的起步价为2km范围7元。
白天2km以上续程单价每公里为1.8元,按化零为整的等价计费方式跳表,即每计满1元跳表一次。
当所计费用等于或超过50元时,不管白天或晚上,超出部分按每公里2.5元计费。
出租车在行驶过程中,当遇到红灯或乘客需要暂停行驶时,则按时间计费,累计每满1min计费1元。
当按下复位键时,出租车计费器恢复为初始状态,若为白天则显示的费用为6元,晚上显示的费用为7元,同时其他计数器,寄存器全部清零。
当按下开始键时,出租车将按上述收费标准进行计费。
出租车计费器能够显示车费与行驶里程。
2.4.2总体框架设计
根据出租车计费系统的要求可知,整个出租车计费系统可由车型调换模块,速度模块、计程模块、计时模块、计费模块和显示模块等部分电路构成,采用QuartusⅡ设计各个功能模块,使用文本输入VHDL设计各个功能模块,然后在顶层设计出组件,从而实现一个完整的出租车计费系统。
如图2.1所示。
图2.1出租车计费器结构框图
Fig.2.1taxithemessageaccountingdevicestructurediagram
系统接收到reset信号后,总费用变为6元,同时其他计数器、寄存器等全部清零。
系统接收到start信号后,首先把部分寄存器赋值,总费用不变,单价price寄存器通过对总费用的判断后赋为1.8元。
其他寄存器和计数器等继续保持为0。
速度模块:
通过对速度信号sp的判断,决定变量kinside的值。
Kinside即是行进100m所需要的时钟周期数,然后每行进100m,则产生一个脉冲clkout。
计程模块:
由于一个clkout信号代表行进100m,故通过对clkout计数,可以获得共行进的距离kmcount。
计时模块:
在汽车启动后,当遇到顾客等人或红灯时,出租车采用计时收费的方式。
通过对速度信号sp的判断决定是否开始记录时间。
当sp=0时,开始记录时间。
当时间达到足够长时产生timecount脉冲,并重新计时。
一个timecount脉冲相当于等待的时间达到了时间计费的长度。
计费模块由两个进程组成。
其中,一个进程根据条件对enable和price赋值:
当记录的距离达到3公里后enable变为1,开始进行每公里收费,当总费用大于50元后,则单价price由原来的2元每公里编程2.5元每公里;第二个进程在每个时钟周期判断timeout和clkout的值。
当其为1时,则在总费用上加上相应的费用。
2.5本章小结
本章主要介绍了出租车计费系统的设计方案,首先对方案论证,通过说明传统出租车计费器的缺陷,然后提出解决方案;其次对FPGA和硬件描述语言VHDL进行简介;最后介绍了系统的设计原理,包括系统计费方式和总体框架设计。
通过简单的介绍让大家了解我的设计思路和方法,为下面的总体设计做铺垫。
第三章系统功能模块及电路设计
3.1各个功能模块设计
3.1.1车型调换模块
出租车车型并不是单一的,各个车型的轮胎直径也是不同的。
据调查统计,现行的出租车轮胎直径大致有4种,直径分别为520mm,540mm,560mm和580mm。
若要使不同车型的出租车每行驶100m均送出一个脉冲,可以通过设置“可预置分频器”的系数来完成。
根据上述车轮直径计算分频系数如下:
100/(0.52*3.14)=61.244487996
100/(0.54*3.14)=58.976173626
100/(0.56*3.14)=56.869881711
100/(0.58*3.14)=54.908851307
分别取整得到车轮直径520mm,540mm,560mm和580mm的出租车的分频系数为61,59,57,55。
用车型设置开关来控制预置数据,两位开关状态与车轮直径对应关系如表3.1所示。
表3.1开关状态与车轮直径对应表
Table3.1switchstateandwheeldiametermappingtable
车轮直径/mm
520
540
560
580
开关(2位)
00
01
10
11
计数器分频系数
61
59
57
55
3.1.2速度模块
速度模块是通过对速度信号SP的判断以决定出租车每行驶100m需要的时间值,然后判断出租车行驶的时间是否等于所设定的时间值,若二者相等,则产生一个100m的CLKOUT信号,程序流程如图3.2所示。
编写程序时,可使用两个进程(U1和U2)来描述程序功能。
在U1中用CASE语句描述SP档位选择,以确定每行驶100m需要的时间值。
在U2中先用IF语句判断RESET信号是否有效,若有效,将状态复位为S0,否则每来一个CLK上升沿时,根据当前状态进行相应操作。
图3.1速度模块的程序流程图
Fig.3.1speedmoduleprogramflowchart
3.1.3计时模块
计时模块主要用于计时收费,记录出租车在启动后,由于红灯或乘客要求出租车暂停(SP为“000”)等待的时间。
若记录的时间等于1min时,将输出1个计费脉冲。
程序流程如图3.2所示。
图3.2计时模块的程序流程图
Fig.3.2timermodulesoftheprogramflowchart
3.1.4计程模块
计程模块主要用于记录出租车行驶的距离。
通过对CLKOUT信号的计数,可以计算行驶的距离。
1个CLKOUT脉冲相当于行进100m,因此只要记录CLKOUT的脉冲数就确定出租车所行驶的距离。
编写程序时,在实体中定义KM_CNT0~KM_CNT3为里程输出。
在结构体的功能说明语句中,定义CNT0~CNT3信号用于计数过程暂存里程数。
在结构体的功能描述语句中,先判断系统复位信号RESET是否有效。
若RESET有效,将CNT0~CNT3清零,否则对CLKOUT脉冲进行加1计数。
3.1.5计费模块
计费模块主要用于记录出租车启动后所产生总的费用。
在编写程序时,可使用两个进程(U1和U2)来完成该功能的描述。
U1主要是用来产生ENABLE和PRICE信号,U2用于判断TIMECOUNT和CLKOUT的值,进行费用的统计。
程序流程如图3.3所示。
图3.3计费模块的程序流程图
Fig.3.3pricingmoduleprogramflowchart
3.1.6显示模块
译码显示输出模块是建立在内部系统和观测人之间的桥梁,通过显示模块,人们才能得到重要的信息,可见该模块是系统中必不缺少的。
该模块首先要将计程模块和计费模块输出的费用和里程转换成BCD码。
然后再进行7段译码。
用4个共阴极LED七段数码管输出显示,两位显示路程,两位显示费用。
因此,显示模块包含两部分:
change和DECL7S。
3.1.7去除按键抖动模块
图3.4去除按键抖动模块
Fig.3.4removebuttonsdithermodule
去除按键抖动办法很多,本设计采用的是数字去抖动方法,即对按键进行扫描,去除抖动不确定状态,提高按键的可靠性。
图3.5去除按键抖动原理图
Fig.3.5removebuttonsditherprinciplediagram
3.2整体电路设计
3.2.1出租车计费器的内部电路
clk为时钟周期信号,由试验箱产生,start/stop是启动停止按键电路,reset为自动清零电路。
电源又AD-DC开关电源供电。
图3.6出租车电路内部构成
Fig.3.6taxicircuitinternalcomponents
3.2.2电源电路
电源采用了是比较流行的开关电源,AD-DC开关电源,输入115VAC到230VAC,输出+5V(4A)。
使用开关电源的好处就是比较节省能源,它的转换效率很高,可达85%以上,稳压范围宽,除此之外,还具有稳压精度高、不使用电源变压器等特点。
3.2.3启动/停止按键电路
如图3.7所示,采用双刀双路开关,一路开关用于清零部分,由于显示部分特殊要求,即计费停止后屏幕上荏苒要保持计费的所有信息,只有当下次计费启动时才清零从新开始计费。
另外两路开关,其中一路用于启动指示和启动/停止输出信号给FPGA芯片的I/O口。
当按下键后,清零部分和启动计费部分同时进行,但清零只是瞬间的,计费指示灯两起。
再次按下键后,开关换到另外的两路,空车指示灯亮起。
图3.7启动/停止按键电路
Fig.3.7start/stopbuttoncircuit
3.2.4自动清零部分
由于显示部分的特殊要求,即计费停止后屏幕上仍然要保持计费的所有信息,只有当下次计费启动时才清零从新开始计费。
VHDL语言的特殊性,不能在一个结构中用两个不同的动作使其赋值。
所以必须要有一个瞬间清零的信号,当FPGA的清零I/O端口为“1”时就自动清零。
使用电容的充放电功能来实现,按键断开时清零输出端为接地,按键闭合时电容充电清零端为高电平,充完电后清零端输出又为低电平,当按键断开后,通过一个2k欧姆的电阻放电,为下次充电做好准备。
如图3.8所示。
图3.8自动清零电路
Fig.3.8tobeautomaticresetcircuit
3.3本章小结
本章主要研究了出租车计费系统各个功能模块设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 出租车 计费 系统 设计