EDA论文.docx
《EDA论文.docx》由会员分享,可在线阅读,更多相关《EDA论文.docx(13页珍藏版)》请在冰豆网上搜索。
![EDA论文.docx](https://file1.bdocx.com/fileroot1/2022-12/7/40e84528-96da-47a3-9038-f28dfd94bf02/40e84528-96da-47a3-9038-f28dfd94bf021.gif)
EDA论文
出租车计费系统
内容摘要本次设计以EDA技术为核心,以VHDL语言为主要编程语言,并利用QuartusII软件对源程序进行仿真,实现出租车系统实际操作的“情景再现”。
众所周知,随着出租车行业的迅猛发展,人们的出行变得更加便捷,出租车计费系统在应运而生的同时也不断地根据人们的各种需求而做相应的升级,用户不仅要求计费器性能稳定,计费准确,有防作弊功能,同时还要求其具有车票资料打印,IC卡付费和电脑串行通信功能。
不同国家和地址的计费方式存在差异,如有些有夜间收费和郊区收费,而有些地区则没有,计价器是出租车的经营者和乘坐出租车的消费者之间用于公平交易结算的工具,因此出租车必须安装计费系统才能才能投入营运。
本次设计,正是根据我们的需求,更加科学化的通过出租车计费系统的源程序来实现进一步的仿真,运行,把一个完整的系统呈现给大家,是我们更加了解出租车计费系统。
关键词出租车,计费系统,EDA,VHDL
1章设计背景及其发展
1.1设计背景
随着出租车行业的发展,对出租车计费器的要求也越来越高。
二十世纪后半期,随着集成电路和计算机技术的飞速发展,数字系统也得到了飞速发展,其实现方法经历了由分立元件、SSI、MSI到LAI、VLSI以及UVLSI的过程。
同时为了提高系统的可靠性和通用性,微处理器和专业集成电路(ASIC)逐渐取代了通用全硬件LSI电路,而ASIC以其体积小、重量轻、功耗低、速度快、成本低、保密性好而脱颖而出。
目前,业界大量可编程逻辑器件(PLD),尤其是现场可编程逻辑器件(FPLD)被大量的应用在ASIC的制作当中。
在可编程集成电路的开发过程中,以计算机为设计平台,融合了应用电子技术、计算机技术、智能化技术最新成果的电子设计自动化(EDA)技术。
理想的可编程逻辑开发系统能符合大量的设计要求:
它能够支持不同结构的器件,在多种平台运行,提供易于使用的界面,并且有广泛的特征。
此外,一个设计系统应该能给设计师提供充分自由的设计输入方法和设计工具选择。
Altered公司开发的MAX+PLUSII开发系统能充分满足可编程逻辑设计所有的要求。
MAX+PLUSII设计环境所提供的灵活性和高效性是无可比拟的。
其丰富的图形界面,输之以完整的,可及时访问的在线文档,使设计人员表能够轻松、愉快的掌握和使用MAX+PLUSII软件。
众多技术与器材的不断发展和出现,并且不断地更行,推动了出租车计费系统的不断发展和更加精细化。
.
我国的第一家生产计价器企业是重庆市起重机厂,最早的计价器全部采用机械齿轮结构,只能完成简单的计程功能,可以说早期的计价器就是一个里程表。
随着科学技术的发展,产生了 第二代计价器。
它采用了手摇计算机与机械结构相结合的方式,实现了半机械半电子化。
此时它在计程的同时还可以完成计价的工作。
大规模集成电路的发展又产生了第三代计价器,也就是全电子化的计价器。
它的功能也在不断完善。
当EDA的出现并应用于计价器后,现代出租车计价器的模型也就基本具备了,它可以完成计程,计价,显示等基本工作。
EDA的不断发展促进了计价器的发展。
为了平衡经营者和消费者的经济利益,也是近年来国家质量技术监督部门强化管理的六类重点计量器具之一。
在出租车是城市交通的重要组成部分,行业健康和发展也获得越来越多的关注。
汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
1.2EDA
数字电子技术的飞速发展,有力的推动了社会社会生产力的发展和社会信息化的提高。
在其推动下,数字电子技术的应用已经渗透到人类生活的各个方面,并且随着集成电路和计算机的不断发展,电子技术面临着严峻的挑战,由于电子技术发展周期不断缩短,专用集成电路(ASIC)的设计面临着难度不断提高与设计周期不断缩短的矛盾。
为了解决这个问题,要求我们必须采用新的设计方法和使用高层次的设计工具,再次情况下,EDA(ElectonicDesignAutomation即电子设计自动化)技术营运而生。
随着电子技术的发展及缩短电子系统设计周期的要求,EDA技术得到了迅猛发展并逐渐成为现在电子设计技术的核心。
从狭义上来看:
EDA技术是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方法设计电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真、直至对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。
从广义上来看:
除了狭义EDA技术外,还包括计算机辅助分析CAA技术,印刷版辅助计算机技术。
EDA技术伴随着计算机、集成电路、电子系统设计的发展,经历了三个阶段,即:
20世纪70年代发展起来的CAD技术,20世纪80年代开始应用的的CAE技术,20世纪90年代后期出现的以硬件描述语言、系统仿真和综合技术为特征的EDA技术,这时的EDA工具不仅具有电子系统设计的能力,而且能提供独立于工艺和厂家的系统级设计能力,具有高级抽象的设计构思手段。
此外,利用EDA技术进行电子系统设计的特点大致分五个:
1、用软件的方式设计软件;2、用软件方式设计的系统到硬件系统的转换是由有关开发软件自动完成的;3、设计过程中可用有关软件仿真;4、系统可现场编程,在线升级;5、整个系统可集成在一个芯片上,体积小,功耗低,可靠性高。
EDA技术为现代数字系统理论和设计的表达与应用提供了可靠性,它已不是某一学科的分支,而是一门综合性学科。
EDA技术打破了计算机软件与硬件间的壁垒,使计算机的软件技术与硬件实现、设计效率和产品性能合二为一,它代表了数字设计技术和应用技术的发展方向。
21世纪将是EDA技术的高速发展时期
1.3VHDL
硬件描述语言(hardwaredescriptionlanguage,HDL)是电子系统硬件行为描述、结构描述、数据流描述的语言。
目前,利用硬件描述语言可以进行数字电子系统的设计。
随着研究的深入,利用硬件描述语言进行模拟电子系统设计或混合电子系统设计也正在探索中。
国外硬件描述语言种类很多,有的从Pascal发展而来,也有一些从C语言发展而来。
有些HDL成为IEEE标准,但大部分是企业标准。
VHDL来源于美国军方,其他的硬件描述语言则多来源于民间公司。
可谓百家争鸣,百花齐放。
这些不同的语言传播到国内,同样也引起了不同的影响。
VHDL语言的英文全名是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,即超高速集成电路硬件描述语言。
HDL发展的技术源头是:
在HDL形成发展之前,已有了许多程序设计语言,如汇编、C、Pascal、Fortran、Prolog等。
这些语言运行在不同硬件平台和不同的操作环境中,它们适合于描述过程和算法,不适合作硬件描述。
CAD的出现,使人们可以利用计算机进行建筑、服装等行业的辅助设计,电子辅助设计也同步发展起来。
在从CAD工具到EDA工具的进化过程中,电子设计工具的人机界面能力越来越高。
在利用EDA工具进行电子设计时,逻辑图、分立电子原件作为整个越来越复杂的电子系统的设计已不适应。
任何一种EDA工具,都需要一种硬件描述语言来作为EDA工具的工作语言。
这些众多的EDA工具软件开发者,各自推出了自己的HDL语言。
由政府牵头,VHDL工作小组于1981年6月成立,提出了一个满足电子设计各种要求的能够作为工业标准的HDL。
1983年第3季度,由IBM公司、TI公司、Intermetrics公司签约,组成开发小组,工作任务是提出语言版本和开发软件环境。
1986年IEEE标准化组织开始工作,讨论VHDL语言标准,历时一年有余,于1987年12月通过标准审查,并宣布实施,即IEEESTD1076—1987[LRM87]。
1993年VHDL重新修订,形成了新的标准,即IEEESTD1076—1993[LRM93]。
从此以后,美国国防部实施新的技术标准,要求电子系统开发商的合同文件一律采用VHDL文档。
即第一个官方VHDL标准得到推广、实施和普及。
1.4QuartusII
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友好的图形界面及简便的使用方法。
2章系统设计
2.1设计要求
根据实际中出租车的计费要求和工作原理,大致分为三个阶段,假设一些数据如下所示:
1能实现计费功能
费用的计算是按形式的里程收费的,设出租车的起价为5.00元,当里程小于3Km时,按起价计算费用;当里程大于3K时每公里按1.3元计费。
等待累计时间超过2min,按每分钟1.5元计费。
所以总费用按下式计算:
总费用=起费用+(里程-3Km)*里程单价+等候时间*等候单价
2能够实现显示功能
(1)显示汽车行驶里程:
用四位数字显示,显示方式为“XXXX”,单位为K。
计程范围为0-99K,计程分辨率为1K。
(2)显示等候时间:
用两位数字显示分钟,现实方式为“XX”。
计时范围为0-59,计时分辨率为1。
(3)显示总费用:
用四位数字显示,显示方式为“XXXX”,单价为元。
计价范围为0-9999元。
2.2系统基本设计
根据设计要求,系统的输入信号有:
系统时钟信号CLK,计价开始信号START,等待信号STOP,里程脉冲信号FIN。
系统的输出信号有:
总费用数CHA0-CHA3,行驶距离(数)KM0-KM1和等待时间MIN0-MIN1等。
系统组成方框图如下所示,它由外部输入模块、控制模块和显示模块三部分组成。
控制模块是整个系统的核心,它由分频模块、控制模块、计量模块和译码显示模块构成。
图1系统组成方框
1分频模块
分频模块是对系统时钟频率进行分频,分别得到16HZ,15HZ和1HZ三种频率。
2控制模块
计价器控制模块主要完成对计价器状态的控制。
3计量模块
计量模块完成计价、计时和计程功能。
计价部分:
行程在3KM内,而且等待累计时间小于2MIN,起步费为5元;3KM外以每公里按1.3元计费,等待累计时间超过2MIN按每分钟1.5元计费。
计时部分:
计算乘客的等待累计时间。
计时器的量程为59MIN,满量程后自动归零。
计程部分:
计算乘客所行驶的公里数。
计程器的量程为99KM,满量程后自动归零。
4译码显示模块
译码显示模块完成计价、计时和计程数据显示。
计费数据送入译码显示模块进行译码,最后送至以百元、十元、元、角为单位对应的数码管上显示。
计程数据送入译码显示模块进行译码,最后送至以KM为单位的数码管上显示。
2.3系统程序流程图
图2程序流程图
3章系统实现
3.1VHDL源程序
见附录
3.2程序仿真图
*说明:
图中显示为出租车总行驶里程为8KM,累计等待时间为3MIN,所以总费用为13.0元。
即:
总费用=5+5*1.3+1*1.5=13。
结论这次的课程设计对于我们来说算是毕业前的一次演练,无论抽到的是哪方面的题目,都会涉及到画系统组成图解和流程图,再到写出程序和对其进行编译,仿真,分析和画出模块,都需要不停地编不停的改不停的查资料……直至最后完成,我抽到的课题是《出租车计费系统》,通过这次设计,发现了许多设计时的不足和错误,主要体现在对设计的整体观和主次观把握有所欠缺,还有就是自己知识面的不足,所以对VHDL语言没有熟练掌握,很多语句的具体含义和应用都不是很了解,耗费了许多时间来充分了解它们,但是我的收获也是颇多,在了解出租车计费系统的过程中,不但更进一步了解了基于EDA方面的知识,而且对于QuartusII软件的使用也有了一定的了解,充实了自己的知识,加强了自己的独立思考和解决问题的能力,对以后的设计有了很大的帮助,懂得了无论什么样的困难,只要用心、努力,困难也会变得简单很多。
参考文献
1《EDA技术实验与课程设计》
编著:
曹昕燕周凤臣聂春燕清华大学出版社
2《EDA技术及应用》(第二版)
编著:
谭会生张昌凡西安电子科技大学出版社
3《EDA技术与应用》(第三版)
编著:
将国强电子工业出版社
附录
VHDL源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CHUZUCHEIS
PORT(CLK:
IN STD_LOGIC; --系统时钟
START:
IN STD_LOGIC; --计费开始信号
STOP:
IN STD_LOGIC; --行驶中,中途等待停止信号
FIN:
IN STD_LOGIC; --1KM脉冲信号
CHA3,CHA2,CHA1,CHA0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--计费输出信号
KM1,KM0:
OUT STD_LOGIC_VECTOR(3DOWNTO0); --行驶公里数
MIN1,MIN0:
OUT STD_LOGIC_VECTOR(3DOWNTO0)); --等待时间输出
END ENTITY CHUZUCHE;
ARCHITECTUREBEHAVEOFCHUZUCHEIS
SIGNALQ_1:
INTEGERRANGE0TO99;
SIGNALW:
INTEGERRANGE0TO59;
SIGNALC3,C2,C1,C0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALK1,K0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALM1:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALM0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALTEMP0,TEMP1:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALF_1:
STD_LOGIC;
SIGNALEN0,EN1:
STD_LOGIC;
BEGIN
FEIPIN:
PROCESS(CLK,START)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IF START='0'THEN
F_1<='0';
Q_1<=0;
ELSE
IFQ_1<=99THEN
Q_1<=0;
F_1<='1';
ELSE
Q_1<=Q_1+1;
F_1<='0';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(FIN)
BEGIN
IFFIN'EVENTANDFIN='1'THEN
IFSTART='0'THEN
K1<="0000";
K0<="0000";
ELSIFSTOP='0'THEN
IFK0="1001"THEN
K0<="0000";
IFK1="1001"THEN
K1<="0000";
ELSE
K1<=K1+1;
ENDIF;
ELSE
K0<=K0+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(F_1)
BEGIN
IFF_1'EVENTANDF_1='1'THEN
IFSTART='0'THEN
W<=0;
M1<="000";
M0<="0000";
ELSIFSTOP='1'THEN
IFW=59THEN
W<=0;
IFM0="1001"THEN
M0<="0000";
IFM1="101"THEN
M1<="000";
ELSE
M1<=M1+1;
ENDIF;
ELSE
M0<=M0+1;
ENDIF;
ELSE
W<=W+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFSTART='0'THEN
EN0<='0';
EN1<='0';
ELSIFSTOP='0'THEN
EN1<='0';
IFK1&K0>"00000011"THEN
EN0<='1';
ELSE
EN0<='0';
ENDIF;
ELSIFSTOP='1'THEN
EN0<='0';
IFM1&M0>"0000010"THEN
EN1<='1';
ELSE
EN1<='0';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK,START)
VARIABLEC13,C15 :
INTEGER;
BEGIN
IFSTART='0'THEN
C3<="0000";C2<="0000";C1<="0101";C0<="0000";
C13:
=0;C15:
=0;TEMP0<="0000";TEMP1<="0000";
ELSIFCLK'EVENTANDCLK='1'THEN
IF(EN0='1')THEN
IF(C13<13)THEN
C13:
=C13+1;
IF(C13=1)THEN
TEMP0<=K0;
ENDIF;
IFC0="1001"THEN
C0<="0000";
IFC1="1001"THEN
C1<="0000";
IFC2="1001"THEN
C2<="0000";
IFC3="1001"THEN
C3<="0000";
ELSE
C3<=C3+1;
ENDIF;
ELSE
C2<=C2+1;
ENDIF;
ELSE
C1<=C1+1;
ENDIF;
ELSE
C0<=C0+1;
ENDIF;
ELSIF(K0/=TEMP0)THENC13:
=0;
ENDIF;
ELSIF(EN1='1')THEN
IF(C15<15)THEN
C15:
=C15+1;
IF(C15=1)THEN
TEMP1<=M0;
ENDIF;
IFC0="1001"THEN
C0<="0000";
IFC1="1001"THEN
C1<="0000";
IFC2="1001"THEN
C2<="0000";
IFC3=