基于VHDL语言的出租车计费系统的设计.docx
《基于VHDL语言的出租车计费系统的设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的出租车计费系统的设计.docx(26页珍藏版)》请在冰点文库上搜索。
基于VHDL语言的出租车计费系统的设计
基于VHDL语言的出租车计费系统的设计
摘要
本文通过对VHDL的初步学习并掌握了其基本知识后,以FPGA做主控芯片来实现基于VHDL语言的出租车计费的目的。
基于出租车行业的需求,传统的出租车计费器发展使用了十几年,在稳定性、成本、以及使用习惯上都具有一些优势。
本系统由FPGA和一些外围器件组成,具有操作简单,显示明了,功能强大的特点。
使用1602液晶模组作为显示器,可以显示数字、字母、中文、图片等,使系统信息一目了然。
本方案充分发挥人性化的特点。
本系统涉及到的理论知识有:
VHDL知识、LCD液晶显示器的工作原理和使用方法,出租车计费系统的原理和实现方法等等。
关键词:
1602液晶模组;FPGA;VHDL
TAXIBILLINGBASEDONVHDL
ABSTRACT
BasedonFPGApreliminarystudyandmasteritsbasics,inordertoachievethecontrollingchipFPGAbasedonVHDLtaxibillingpurposes.
Basedonthetaxiindustrydemand,thetraditionaltaximeterdevelopmentusingtenyears,instability,cost,andtheuseofcustomhassomeadvantages.Thesystemconsistsofsingle-chipFPGAandsomeperipheraldevices,hastheadvantagesofsimpleoperation,displayclear,powerfulfeatures.Theuseof1602LCDmoduleasthedisplay,candisplaynumbers,letters,Chinese,pictures,makethesystemmessagestickoutamile.Theproposaltogivefullplaytothecharacteristicsofhumannature.Thesystemrelatestothetheoryofknowledge:
VHDL,LCDliquidcrystaldisplayworkprincipleandusingmethodofbillingsystemofataxi,theprincipleandtherealizationmethod.
Keywords:
1602LCDmodule;FPGA;VHDL
目录
1前言--------------------------------------------------------------------------------------1
2系统设计
2.1总体设计构思---------------------------------------------------------------------2
2.2出租车计价器存在的问题------------------------------------------------------2
2.3问题的修改------------------------------------------------------------------------3
2.4设计要求---------------------------------------------------------------------------3
3硬件部分
3.1FPGA简介-------------------------------------------------------------------------4
3.2工作原理---------------------------------------------------------------------------4
3.3LCD的简介-----------------------------------------------------------------------5
4软件部分
4.1VHDL语言的介绍----------------------------------------------------------------7
4.2VHDL语言的特点-----------------------------------------------------------------7
4.3主程序代码------------------------------------------------------------------------8
4.4部分仿真------------------------------------------------------------------------------------------19
5总结--------------------------------------------------------------------------------------22
6参考文献----------------------------------------------------------------------------------23
7致谢---------------------------------------------------------------------------------------24
第一章前言
汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车最重要的工具。
它关系着双方的利益。
具有良好的性能的计价器无疑是对广大出租车司机朋友还是乘客来说都是很重要的。
因此,汽车计价器的研究也是十分有应用价值的。
随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注。
于是,出租车行业以低价高质的服务给人们带来了出行的享受。
但是总存在着买卖纠纷困扰着行业的发展。
而在出租车行业中解决这一矛盾的最好方法就是改良计价器。
用更加精良的计价器来为乘客提供更加方便快捷的服务。
我国在70年代开始出现出租车,但那时的计费系统大都是国外进口的,不但不不够准确,而且价格还十分昂贵。
随着改革开放的日益深入,出租车行业的发展势头已十分突出,国内各机械厂纷纷推出国产计价器。
刚开始出租车计价器的功能从刚才开始的只显示路程,到能够自主计费,以及现在能够打印发票和语音提示、按时间自主变动单价等功能。
随着旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。
本设计就是采用VHDL硬件描述语言[1]作为设计手段,采用自顶向下的设计思路,得到出租车计价系统的硬件结构,通过单片机FPGA作为主控芯片进行设计、仿真,具有一定的实用性。
单片机进行的出租车计价器的设计时用数字电路设计的整体电路规模较大,所用的器件较多,造成故障率高,导致计价器不够准确;而基于单片机的设计,虽然开发成本降低,但其外围电路较多,而且调试复杂,抗干扰能力差,从而也导致计价器不够准确。
而基于VHDL语言的单片机FPGA芯片稳定性好,抗干扰能力强,外围电路少,执行速度快,适合像出租车计价器的这种较复杂的电路设计。
第二章系统设计
2.1总体设计构思
图2-1总的设计图
2.2出租车计价器存在的问题
随着我国国民经济的高速发展,出租汽车已成为城市公共交通的重要组成部分。
近几年来,出租车汽车行业在各地蓬勃发展,出租车经营也从无序状态逐渐走入正轨。
出租车计价器成为出租车运营中必配的、可靠的计量器具,其使用准确性直接关系到经营者与乘客的经济利益。
但在实际运营中,总有不少经营者或乘客反映相同路径,不同的出租车的收费有较大的出入。
目前出租车计价器存在的问题主要有:
1计价器作弊的问题,有些出租汽车司机在计价器上做手脚,多收乘客租金。
常见的手段是:
输入非法脉冲,计价器主要靠传感器发出的脉冲来计数,脉冲数的多少即汽车行驶里程的少。
作弊者利用这一原理,额外向计价器输入脉冲,其方法多种多样如利用车内收音机、电动剃须刀。
2毛刺(竞争一冒险)现象。
主要影响数字系统设计有效性和可靠性的主要因素,由于毛刺的存在,使得系统存在诸多潜在的不稳定因素,尤其是对尖峰脉冲或脉冲边沿敏感的电路就更是如此。
毛刺通常主要对电路的触发清零端CLR、触发复位端基于VHDL的出租车计价器设计RESET、CP端、锁存器的门控端和专用芯片的控制端等产生严重的影响,会使电路发生误动作,从而造成数字系统的逻辑混乱。
2.3问题的修改
(1)在一个进程中只允许一个信号上升沿或下降沿作为触发条件。
(2)信号值改变后,要经过一个小的延时才能生效,同一个信号不能在多个进程中赋值(因多个信号源不能同时对同一个信号驱动)。
(3)时序电路与组合电路最好不要在同一个进程以免浪费资源。
(4)一个功能模块最好按上升沿信号分多个进程完成,各进程间用信号联系。
(5)同一个信号在进程中的值改变后,要注意该值改变前后,该进程中其他变量的变化,避免逻辑死锁。
(6)在顺序语句中,信号赋值后需一定的延时才能改变而变量不需要延时。
2.4设计要求
设计一种出租车计价器,计费标准如下:
(1)起步价5.00元,起步公里为2公里;
(2)超过2公里,每公里按1.80元收费;
(3)等候时间累积5分钟,每分钟1.00元;
要求显示里程、计费及等候时间。
乘客上车后,按下启动键,开始计费,计费显示为3位整数,2位小数。
第三章硬件部分
3.1FPGA简介[2]
FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。
这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。
在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
系统设计师可以根据需要通过可编辑的连接把FPGA[3]内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。
一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。
FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,但是功耗较低。
但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。
厂商也可能会提供便宜的但是编辑能力差的FPGA。
因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。
另外一种方法是用CPLD(复杂可编程逻辑器件备)。
3.2工作原理[4]
FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。
现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。
FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。
FPGA[4]的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。
1)采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。
2)FPGA可做其它全定制或半定制ASIC电路的中试样片。
3)FPGA内部有丰富的触发器和I/O引脚。
4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5)FPGA采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。
用户可以根据不同的配置模式,采用不同的编程方式。
加电时,FPGA芯片将EPROM中数据读入片内编程RAM中[5],配置完成后,FPGA进入工作状态。
掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。
FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。
当需要修改FPGA功能时,只需换一片EPROM即可[6]。
这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。
因此,FPGA的使用非常灵活
3.3LCD的简介[7]
LCD液晶显示器是LiquidCrystalDisplay的简称,LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。
现在LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分的普及。
工业字符型液晶,能够同时显示16x02即32个字符(16行2列),为了表示的方便,后文皆以1表示高电平,0表示低电平。
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两列,每列16个字符液晶模块(显示字符和数字)。
市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
编辑本段管脚功能1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地
第2脚:
VCC接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端,高电平
(1)时读取信息,负跳变时执行指令。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极
第四章软件部分
4.1VHDL语言的介绍
VHDL(VHSIC(VeryHighSpeedIC)HardwareDescriptionLanguage)就是超高速集成电路硬件描述语言。
诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
覆盖面广,描述能力强,是一个多层次的硬件描述语言。
具有良好的可读性,即容易被计算机接受,也容易被读者理解。
使用期长,不会因工艺变化而使描述过时。
因为VHDL的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的属性参数即可。
支持大规模设计的分解和已有设计的再利用。
一个大规模的设计不可能由一个人独立完成,必须由多人共同承担,VHDL为设计的分解和设计的再利用提供了有力的支持。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点
由于VHDL语言是一种描述、模拟、综合、优化和布线的标准硬件描述语言,因此它可以使设计成果在设计人员之间方便地进行交流和共享,从而减小硬件电路设计的工作量,缩短开发周期
4.2VHDL[8]语言的特点
(1)VHDL语言功能强大,设计方式多样
VHDL语言具有强大的语言结构,只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。
同时,它还具有多层次的电路设计描述功能。
此外,VHDL语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。
VHDL语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法;既支持模块化设计方法,也支持层次化设计方法。
(2)VHDL语言具有强大的硬件描述能力
VHDL语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。
同时,VHDL语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。
VHDL语言的强大描述能力还体现在它具有丰富的数据类型。
VHDL语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。
(3)VHDL语言具有很强的移植能力
VHDL语言很强的移植能力主要体现在:
对于同一个硬件电路的VHDL语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。
(4)VHDL语言的设计描述与器件无关
采用VHDL语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。
这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。
当硬件电路的设计描述完成以后,VHDL语言允许采用多种不同的器件结构来实现。
(5)VHDL语言程序易于共享和复用
VHDL语言采用基于库(library)的设计方法。
在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。
这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。
4.3主程序代码
(1)等待判别模块VHDL源程序:
--DDPB.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYDDPBIS
PORT(START,WCLK:
INSTD_LOGIC;--输入速度传感器信号和启动信号
CLK1HZ:
INSTD_LOGIC;--输入1秒时钟信号
DDBZ:
OUTSTD_LOGIC);--输出等待等待标志信号
ENDENTITYDDPB;
ARCHITECTUREARTOFDDPBIS
SIGNALT60S:
STD_LOGIC;--60秒计时信号
SIGNALWCLKCOU:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
PROCESS(START,CLK1HZ)IS--产生60秒周期性信号跳变进程
VARIABLECNT60:
STD_LOGIC_VECTOR(7DOWNTO0);--每分钟行驶距离
BEGIN
IFSTART='1'THEN
Cnt60:
="00000000";
T60s<='0';
ELSIFCLK1HZ'EVENTANDCLK1HZ='1'THEN
IFCNT60="00111100"THEN
T60S<='1';CNT60:
="00000000";
ELSE
CNT60:
=CNT60+'1';T60S<='0';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(START,WCLK,T60S)IS--每分钟行驶距离计算进程
BEGIN
IFSTART='1'THEN
WCLKCOU<="00000000";
ELSIFWCLK'EVENTANDWCLK='1'THEN
IFT60S='1'THEN
WCLKCOU<="00000000";
ELSE
WCLKCOU<=WCLKCOU+'1';--距离计算,单位为米
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(WCLKCOU,T60S)IS--等待标志判别进程
BEGIN
IFT60S'EVENTANDT60S='1'THEN
IFWCLKCOU<="11001000"THEN
DDBZ<='1';--汽车等待
ELSE
DDBZ<='0';--汽车行驶
ENDIF;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
(2)等待计时模块VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYDDJSIS
PORT(START,DDBZ:
INSTD_LOGIC;--启动信号,等待标志
CLK1HZ:
INSTD_LOGIC;--时钟信号
DDSJ:
OUTSTD_LOGIC_VECTOR(15DOWNTO0);--等待时间
XDBZ:
OUTSTD_LOGIC);--熄灯标志
ENDENTITYDDJS;
ARCHITECTUREARTOFDDJSIS
SIGNALMS,MG,FS,FG:
STD_LOGIC_VECTOR(3DOWNTO0);
--秒个位,秒十位,分十位,分个位
SIGNALXIDENG:
STD_LOGIC;-