出租车计费系统的VHDL实现.docx
《出租车计费系统的VHDL实现.docx》由会员分享,可在线阅读,更多相关《出租车计费系统的VHDL实现.docx(20页珍藏版)》请在冰豆网上搜索。
出租车计费系统的VHDL实现
引言
近年来,我国出租汽车行业迅猛发展,出租汽车已成为我国城市公共交通的重要组成部分和现代化城市必备的基础设施,成为人们工作、生活中不可缺少的交通工具。
它对繁荣经济、促进发展、方便群众、改善交通起到了积极作用。
出租汽车对我国人民物质和文化生活影响之大、作用之广是前所未有的。
出租汽车行业的服务水平和程度已经成为现代化的重要标志。
出租汽车服务行业和出租汽车计价器紧密相关,因为出租汽车必须安装出租汽车计价器才能投入营运。
出租汽车计价器是一种能根据乘客乘坐汽车行驶距离和等候时间的多少进行计价,并直接显示车费值的计量器具。
计价器是出租汽车的经营者和乘坐出租汽车的消费者之间用于公平贸易结算的工具,因而计价器量值准确与否,直接关系到经营者和消费者的经济利益
随着出租车行业的发展,对出租车计费器的要求也越来越高。
二十世纪后半期,随着集成电路和计算机技术的飞速发展,数字系统也得到了飞速发展,其实现方法经历了由分立元件、SSI、MSI到LSI、VLSI以及UVLSI的过程。
同时为了提高系统的可靠性与通用性,微处理器和专业集成电路(ASIC)逐渐取代了通用全硬件LSI电路,而ASIC以其体积小、重量轻、功耗低、速度快、成本低、保密性好而脱颖而出。
目前,业界大量可编程逻辑器件(PLD),尤其是现场可编程逻辑器件(FPLD)被大量地应用在ASIC的制作当中。
在可编程集成电路的开发过程中,以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术最新成果的电子设计自动化(EDA)技术主要能辅助进行三方面的设计工作:
IC设计,电子电路设计以及PCB设计
VHDL就是超高速集成电路硬件描述语言。
覆盖面广,描述能力强,是一个多层次的硬件描述语言。
在VHDL语言中,设计的原始描述可以非常简练,经过层层加强后,最终可成为直接付诸生产的电路或版图参数描述。
具有良好的可读性,即容易被计算机接受,也容易被读者理解。
使用期长,不会因工艺变化而使描述过时。
因为VHDL的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的属性参数即可。
支持大规模设计的分解和已有设计的再利用。
一个大规模的设计不可能由一个人独立完成,必须由多人共同承担,VHDL为设计的分解和设计的再利用提供了有力的支持。
第1章EDA及QuartusII简介
1.1EDA发展概况
电子设计技术的核心就是EDA技术,EDA是指以计算机为工作台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计。
EDA技术已有30年的发展历程,大致可分为三个阶段。
70年代为计算机辅助设计(CAD)阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作。
80年代为计算机辅助工程(CAE)阶段。
与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。
CAE的主要功能是:
原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。
90年代为电子系统设计自动化(EDA)阶段。
EDA系统框架结构(FRAMEWORK)是一套配置和使用EDA软件包的规范。
目前主要的EDA系统都建立了框架结构,如CADENCE公司的DesignFramework,Mentor公司的FalconFramework,而且这些框架结构都遵守国际CFI组织制定的统一技术标准。
框架结构能将来自不同EDA厂商的工具软件进行优化组合,集成在一个易于管理的统一的环境之下,而且还支持任务之间、设计师之间以及整个产品开发过程中的信息传输与共享,是并行工程和自顶向下设计施的实现基础。
在EDA软件开发方面,目前主要集中在美国。
但各国也正在努力开发相应的工具。
日本、韩国都有ASIC设计工具,但不对外开放。
中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。
相信在不久的将来会有更多更好的设计工具有各地开花并结果。
据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年复合增长率分别达到了50%和30%。
EDA技术的每一次进步,都引起了设计层次上的一次飞跃,从设计层次上分,70年代为物理级设计(EDA),80年代为电路级设计(CAE),90年代进入到系统级设计(EDA)。
物理级设计主要指IC版图设计,一般由半导体厂家完成,对电子工程师没有太大的意义,因此本文重点介绍电路级设计和系统级设计。
仿真通过后,根据原理图产生的电气连接网络表进行PCB板的自动布局布线。
在制作PCB板之前还可以进行PCB后分析,其中包括热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并可将分析后的结果参数反标回电路图,进行第二次仿真,也称为后仿真。
后仿真主要是检验PCB板在实际工作环境中的可行性。
由此可见,电路级的EDA技术使电子工程师在实际的电子系统产生前,就可以全面地了解系统的功能特性和物理特性,从而将开发风险消灭在设计阶段,缩短了开发时间,降低了开发成本。
系统级设计进人90年代以来,电子信息类产品的开发明显呈现两个特点:
一是产品复杂程度提高;二是产品上市时限紧迫。
然而,电路级设计本质上是基于门级描述的单层次设计,设计的所有工作(包括设计忙人、仿真和分析、设计修改等)都是在基本逻辑门这一层次上进行的,显然这种设计方法不能适应新的形势,一种高层次的电子设计方法,也即系统级设计方法,应运而生。
高层次设计是一种“概念驱动式”设计,设计人员无须通过原理图描述电路,而是针对设计目标进行功能描述。
由于摆脱了电路细节的束缚,设计人员可以把精力集中于创造性的方案与概念的构思上,而且这些概念构思以高层次描述的形式输人计算机,EDA系统就能以规则驱动的方式自动完成整个设计。
这样,新的概念就能迅速有效地成为产品,大大缩短了,产品的研制周期。
不仅如此,高层次设计只是定义系统的行为特性,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工。
1.2QuartusII简介
QuartusII是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。
目前Altera已经停止了对MaxplusII的更新支持,QuartusII与之相比不仅仅是支持器件类型的丰富和图形界面的改变。
Altera在QuartusII中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。
AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
第2章系统设计方案
2.1系统设计要求
设计一个满足日常生活所需功能的车租车计费器。
该计费器能实现计费功能,车起步开始计费,首先显示起步价,起步费为3.00元,车在行驶3km以内,只收起步价。
当里程大于3km时每公里按1.6元计费。
等待累计时间超过1min,按每分钟3.4元计费。
所以总费用按下式计算:
总费用=起步价+(里程-3km)*里程单价+等候时间*等候单价
能够实现显示功能,显示汽车行驶里程:
用两位数字显示,显示方式为“XX”,单位为km。
计程范围为0~99km,计程分辨率为1km。
显示等候时间:
用两位数字显示分钟,显示方式为“XX”。
计时范围为0~59min,计时分辨率为1min。
显示总费用:
用四位数字显示,显示方式为“XXX.X”,单位为元。
计价范围为999.9元,计价分辨率为0.1元。
2.2设计原理
2.2.1系统的结构和设计流程
系统由分频模块、控制模块、计量模块和计费模块四部分组成。
计量模块是整个系统实现里程计数和时间计数的重要部分;控制模块是实现不同计费方式的选择部分;设计通过分频模块产生不同频率的脉冲信号来实现系统的计费。
计量模块采用1HZ的驱动信号,计费模块采用16HZ、34HZ的驱动信号;计量模块每计数一次,计费模块就实现16次或者34次计数,即为实现计程时的1.6元/min、计程时时的3.4元/km的收费;
出租车计费器系统结构如图2.1所示。
kongzhi模块
jifei模块
fenpin模块
jiliang模块
图2.1出租车计费器系统结构图
2.2.2系统的工作原理
系统有两个脉冲输入信号clk_256、fin,两个控制输入开关start、stop,总费用数c0~c3,行驶距离k0~k1,等待时间m0~m1等。
控制过程为:
start作为计费开始开关,当start为高电平时,系统开始根据输入的情况计费。
当有乘客上车并开始行驶时,fin脉冲到来,进行行驶计费,此时的stop需要置为0;如需停车等待,就把stop变为高电平,并去除fin输入脉冲,进行等待计费;当乘客下车且不等待时,直接将start置为0,系统停止工作。
系统的元件框图如图2.2所示。
图2.2系统的元件框图
2.2.3系统总体顶层框图
图2.3系统总体顶层框图
第3章主要模块
3.1分频模块
分频模块是对系统时钟频率进行分频,分别得到16HZ、34HZ、1HZ三种频率;本设计中通过三种不同频率的脉冲信号实现在计程车在行驶、等待两种情况下的不同计费。
分频模块框图如图3.1所示。
图3.1分频模块框图
3.2计量模块
本模块实现对于出租车在行驶和等待过程中的继承和计时功能;当行驶里程大于3KM时,本模块中en0信号变为1;当等待时间大于1min时,本模块中en1信号变为1;clk1每来一个上升沿,计量模块实现一次计数,里程数或者等待时间加1;计量模块框图如图3.2所示
图3.2计量模块框图
3.3计费模块
本模块根据输入的clk2信号变化,调节费用的计数,c0、c1、c2、c3分别表示费用的显示,计费模块框图如图3.3所示。
图3.3计费模块框图
3.4控制模块
模块主要是通过两个不同的输入使能信号,对两个输入脉冲进行选择输出;使能信号是计量模块中的输出,两个输入脉冲是分频模块输出的16HZ、34HZ的脉冲;本模块实现了双脉冲的二选一;控制模块框图如图3.4所示。
图3.4控制模块框图
第4章仿真结果与分析
4.1系统总体仿真
对于系统总体进行仿真,得到的仿真波形如图4.1所示
图4.1系统总体仿真波形图
由图中可以看出,当fin脉冲信号到来时,实现了行驶计费,当行驶里程超过三公里,则再按每公里1.6元计费;当stop为高电平,即进入等待计时收费;当等待时间超过1min时,每过一分钟加3.4元,即为实现每等一分钟收费3.4元。
结果验证:
出租车的起步价是3元,当行驶了89KM的时候,收费为3+(89—3)*1.6=140.6元;等待三分钟时,收费为150.8元。
4.2各个电路模块的仿真分析图
4.2.1分频模块仿真波形图及分析
图4.2分频模块仿真波形图
由图中的周期时间可以看出,三种输出的信号脉冲对应的频率比实现了16:
34:
1。
4.2.2计量模块仿真波形图及分析
图4.3计量模块仿真波形图
由图可以看出,在fin脉冲到来时,k1、k0进行计数,en0在每进行一次加法计数时就输出一次高电平;当stop为高电平时,即为进入等待计时,m1、m0进行计数,en1在每进行一次计时计数的时候输出一个高电平。
4.2.3计费模块仿真波形图及分析
图4.4计费模块仿真波形图
由图中可以看出,随着clk2的高电平的到来,c3、c2、c1、c0逐级进行加法计数,当c0计数到九时,产生进位,c1加一;当c1计数到九时,产生进位,c2加一;当c2计数到九时,产生进位,c3加一;起步价为3元。
4.2.4控制模块仿真波形图及分析
图4.5控制模块仿真波形图
由图中可以看出,当ent0为高电平时,输出为这一时段的clk_in1;当ent1为高电平时,输出为这一时段的clk_in2。
第5章硬件实现
通过硬件下载,该电路可以完成硬件实现,芯片管脚定义可以直接用编辑.pin文件。
完成管脚定义后选择器件,编译后生成.sof、.pof文件。
选择sof文件进行下载。
通过对每一模块的仿真和下载,可以实现各个模块的逻辑功能,验证了各个模块的正确性。
在出租车计费系统的4个模块中,重点在于计费模块、计程模块。
计费模块主要有汽车的启动、停止;各模块完成后,在将它们组合成完整的出租车系统,在设计过程中还需要改进的是控制系统的纠错功能。
出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。
出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。
实验表明:
该计费器实现了计费功能,车起步开始计费,首先显示起步价,起步费为3.00元,车在行驶3km以内,只收起步价。
车行驶超过3km后,每km1.6元,车费一次累加。
当遇到红灯或者客户需要停车等待时,则按时间计费,计费单价为每60s收费3.4元。
由于采用CPLD大规模可编程逻辑器件,整机功耗小、抗干扰能力强、系统稳定、工作可靠、升级方便.
小结
本次设计的首要处是如何实现等待计时和行驶里程的不同计费,对于里程和等待时间的计数都使用的是计数器的原理,通过fin和stop信号的不同值实现在不同情况下的计数;通过分频产生的16HZ、34HZ、1HZ对应的周期频率关系,由1HZ的信号控制计量模块,由控制器选择产生的信号作为计费模块的输入信号,所以计费模块的输入信号是16HZ、34HZ的信号之一,计量模块每完成一次计数,计费模块完成16次或者34次计数,即为实现1.6元或3.4元的计费;
EDA课程设计中对于各个模块的设计是基础,首先要分析清楚各个模块的功能,然后分别进行编程设计、验证,然后使用VHDL语言中的元件例化语句,将各个模块组合到一起,实现总的设计功能。
在硬件实现过程中,当进行计程计费时,发现计程和计费的显示数据跳动很快,初步分析是因为计程的驱动频率太大,需要选择256HZ以下的频率;更改以后,计程和计费显示正常,因此要注意观察点和频率的选择。
谢辞
课设报告的最后我想对我的指导老师韦艳霞表示深深的敬意和谢意!
韦老师在学术上的成就一直让我敬慕不已,做了他的学生后,对她严谨、正直的教学作风更让我敬佩,要感谢这一个学期来韦老师的教导,让我对EDA有了更加深刻的了解,掌握了quartusII的操作技巧,通过这次课设更加深刻的熟悉了EDA中用VHDL设计一个系统的流程,在此我要对老师在这次课设中的给予的悉心指导表示深深的谢意!
参考文献
[1]潘松,黄继业.EDA技术实用教程.北京:
科学出版社,2006.
[2]徐志军,徐光辉.CPLD/FPGA的开发与应用.北京:
电子工业出版社,2001.
[3]亿特科技.CPLD/FPGA应用系统设计与产品开发.北京:
人民邮电出版社,2005.
[4]刘欲晓,方强,黄宛宁.EDA技术与VHDL电路开发应用实践.北京:
电子工业出版社,2003.
[5]谭会生、瞿遂春.EDA技术综合应用实例与分析.西安:
西安电子科技大学出版社,2004.
[6]高有堂.EDA技术及应用实践.北京:
清华大学出版社,2006.
[7]曹昕燕,周凤臣.EDA技术实验与课程设计》,清华大学出版社,2006.
附录
VHDL源程序
分频模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityfenpinis
port(clk_256:
instd_logic;--频率为256HZ的时钟
clk_16:
outstd_logic;--频率为16HZ的时钟
clk_34:
outstd_logic;--频率为34HZ的时钟
clk_1:
outstd_logic);--频率为1HZ的时钟
endfenpin;
architecturert1offenpinis
signalq_16:
integerrange0to15;--分频器
signalq_34:
integerrange0to33;--分频器
signalq_1:
integerrange0to255;--分频器
begin
process(clk_256)
begin
if(clk_256'eventandclk_256='1')then
ifq_16=15thenq_16<=0;clk_16<='1';--此处产生16HZ频率的信号
elseq_16<=q_16+1;clk_16<='0';
endif;
ifq_34=33thenq_34<=0;clk_34<='1';--此处产生34HZ频率的信号
elseq_34<=q_34+1;clk_34<='0';
endif;
ifq_1=255thenq_1<=0;clk_1<='1';--此处产生1HZ频率的信号
elseq_1<=q_1+1;clk_1<='0';
endif;
endif;
endprocess;
endrt1;
计量模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityjiliangis
port(s:
instd_logic;--计量开始信号
fin:
instd_logic;--里程脉冲信号
stop:
instd_logic;--等待信号
clk1:
instd_logic;--计量驱动信号
en1,en0:
bufferstd_logic;--计量输出的控制信号
k1,k0:
bufferstd_logic_vector(3downto0);--里程计数
m1,m0:
bufferstd_logic_vector(3downto0));--时间计数
endjiliang;
architecturert2ofjiliangis
signalw:
integerrange0to59;--秒计数器
begin
process(clk1)
begin
ifclk1'eventandclk1='1'then--本语句实现clk1对计量模块的驱动
ifs='0'then
w<=0;en1<='0';en0<='0';m1<="0000";m0<="0000";k1<="0000";k0<="0000";
elsifstop='1'then--等待计时开始标志
ifw=59thenw<=0;
ifm0="1001"thenm0<="0000";
ifm1="0101"thenm1<="0000";
elsem1<=m1+1;
endif;
elsem0<=m0+1;
endif;--完成等待计时
ifm1&m0>"00000000"thenen1<='1';--等待时间大于1min
elseen1<='0';--输出使能信号en1
endif;
elsew<=w+1;en1<='0';
endif;elsiffin='1'then--行驶计程开始
ifk0="1001"thenk0<="0000";
ifk1="1001"thenk1<="0000";
elsek1<=k1+1;
endif;
elsek0<=k0+1;
endif;--完成里程计数
ifk1&k0>"00000010"thenen0<='1';--行驶里程大于3KM输出使能信号en0
elseen0<='0';
endif;
elseen1<='0';en0<='0';--clk1不驱动,使能信号为0
endif;
endif;
endprocess;
endrt2;
计费模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityjifeiis
port(clk2:
instd_logic;--计费驱动信号
start:
instd_logic;--计费开始信号
c0,c1,c2,c3:
bufferstd_logic_vector(3downto0));--费用的计数
endjifei;
architecturert3ofjifeiis
begin
process(clk2,start)
begin
ifstart='0'thenc3<="0000";c2<="0000";c1<="0011";c0<="0000";--设置起步价为3元
elsifclk2'eventandclk2='1'then--计费开始
ifc0="1001"thenc0<="0000";
ifc1="1001"thenc1<="0000";
ifc2="1001"thenc2<="0000";
ifc3="1001"thenc3<="0000";
elsec3<=c3+1;
endif;
elsec2<=c2+1;
endif;
elsec1<=c1+1;
endif;
elsec0<=c0+1;--计费范围是0~999.9元