基于FPGA的出租车计费系统设计Word下载.docx
- 文档编号:21458645
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:16
- 大小:100.52KB
基于FPGA的出租车计费系统设计Word下载.docx
《基于FPGA的出租车计费系统设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于FPGA的出租车计费系统设计Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
目录3
1.序论1
2.相关技术概述2
2.1FPGA基本结构特点2
2.2VHDL硬件描述语言3
2.3.EDA技术简介4
3.出租车计费系统硬件设计6
3.1当前出租车计费系统存在问题6
3.2出租车计费系统问题解决方案6
3.2.1以FPGA取代MCU6
3.2.2用LCD取代LED6
3.2.3增加设定计价标准的功能7
4.出租车计费器系统软件设计8
4.1系统要求与设计方案
4.1.1出租车计费器的系统要求8
4.1.2出租车计费系统的整体设计方案8
4.2系统各模块的功能及核心模块的实现10
4.2.1系统模块的功能10
4.2.2系统部分核心模块的实现11
6.整个系统的测试16
结论18
致谢19
参考文献20
附录21
1.序论
近年来,人们对出行的要求越来越高,出租车的出现带给人们诸多方便,出租车行业的诞生与壮大是大势所趋,此时出租车行业顺应形势,快速发展。
其中,性能良好的计价器对于规范行业管理,降低司乘纠纷是不可或缺的。
采用模电及数电而设计的的计费系统有器件多、繁杂电路、失误率高并且不好调试。
当前市面上多数出租车计价器都采取微控器,好比μPD78F0034、89C51单片机基础上设计而成的计费系统。
当前出租车的计费系统主要采取利用MCU比如89C51单片机来设计实现,主要采取LED显示。
传统出租车计费系统已经发展应用了十几年时间,在使用习惯上具有很大优势,使用成本低廉,性能稳定的优点,可是在运行过程中,该系统并不非常稳定,有的时候会发生死机现象。
本课题立足于上述背景,研究探讨了FPGA基础上的出租车系统实现方案,对于改造当前的计费系统,提高系统机动程度具有重要的现实意义。
2.相关技术概述
2.1FPGA基本结构特点
当前大部分FPGA采取查找表技术,它们逻辑的最基本单元都是触发器和查找表组成。
其中,查找表简称LUT(LoookUpTable,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.2VHDL硬件描述语言
系统设计采用VHDL语言,为从上向下的一种设计思路,该设计过程首先在整体上细分系统性能和作用,形成各个功能模块;
进行各功能模块的设计;
各个功能模块完成调试之后,将所有模块电路连接,进行统一调试,直到最终完成对电路系统的功能设计。
大体流程如图2.2所示。
伴随着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的Cyclone
系列的芯片(型号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显示模块、分频模块。
当系统接收到了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。
倒计时模块和正计时模块分别由十进制计数器和六进制计数器组成(此部分系统结构如图所示)。
模块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所显示的为数据ASC
码的值,所以把将显示的数据先转成与数字对应的ASCII码值,然后把该值传送到LCD1602。
使用VHDL编写LCD1602显示的核心程序如下:
begin
LCD_RW<
=`0`;
LCD_EN<
=LCD_CLK_500Hz;
process(LCD_CLK_500Hz,MyState,reset)
ifReset=`0`then
n1<
=0;
MyState<
=Write_instr;
LCD_RS<
elsifrising_edge(LCD_CLK_500Hz)then
caseMyStateis
whenWrite_instr=>
//将命令写入LCD控制器
if(n1=0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 出租车 计费 系统 设计