基于VHDL语言的出租车计费器方案设计书.docx
- 文档编号:9521220
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:25
- 大小:158.36KB
基于VHDL语言的出租车计费器方案设计书.docx
《基于VHDL语言的出租车计费器方案设计书.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的出租车计费器方案设计书.docx(25页珍藏版)》请在冰豆网上搜索。
基于VHDL语言的出租车计费器方案设计书
最近几年出租车行业发展迅速,在全国有几千家出租车公司,因此出租车计费器的市场是庞大的。
随着电子科学技术的不断发展,特别是集成电路的迅猛发展,电子设计自动化已经成为主要的设计手段。
随着EDA技术的大力发展,FPGA等数字可编程器件的出现,数字出租车计费器的设计也就变得更加简单,而且性能更稳定、能实现较复杂的功能,且运用EDA软件可方便的在计算机上实现设计与仿真。
本设计基于VHDL(FPGA)语言是电子设计领域中最具活力和发展前途的一项技术,未来必定会取代部分落伍的数字元元件。
1.1课程设计目的
随着电子技术的不断发展与进步,集成电路的设计方法也在不断地更新。
时至今日,传统的手工设计过程已经被先进的电子设计自动化(EDA)工具所代替。
只有以硬件描述语言和逻辑综合为基础的子项项下的电路设计方法才能满足日趋复杂的集成电路系统设计需求,才能缩短设计周期以满足设计对集成电路系统日益急迫的需求。
在这种情形下,传统的出租车计费器设计方法已不能跟上现在的节奏,以往的出租车计费器在功能上也远不能满足现实的需求。
以往的出租车计费器的不稳定性,功能稍等缺点是的大家开始寻求更新的,功能更强大,性能更稳定,价钱更低廉的新型出租车计费器。
而大规模可编程逻辑器件的出现,VHDL硬件描述语言的出现,使得这一切成为可能。
本设计的研究目标和意义也就是要使用价钱低廉、性能稳定、价钱低廉、可扩性强、适应目前出租车市场需求的出租车计费器,以解决目前出租车计费器存在的一系列问题。
1.2课程设计要求
1.能实现计费功能,计费标准为:
按行驶里程收费,起步费为10.00元,并在车行3公里后再按2元/公里,当计费器计费达到或超过一定收费(如20元)时,每公里加收50%的车费,车停止不计费。
2.实现预置功能:
能预置起步费、每公里收费、车行加费里程。
3.实现模拟功能:
能模拟汽车启动、停止、暂停、车速等状态。
4.设计动态扫描电路:
将车费显示出来,有两位小数。
5.用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。
6.各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。
7.完成电路全部设计后,通过系统实验箱下载验证设计的正确性。
1.3设计平台
MAX+plusⅡ是美国Altera公司的一种EDA软件,用于开发CPLD和FPGA进行数字系统的设计。
2应用工具介绍
作为当今最流行的计算机软件系统,EDA技术是以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
EDA可提供文本输入以及图形编辑的方法将设计者的意图用程序或者图形方式表达出来,而我们经常用到的VHDL语言便是用于编写源程序所需的最常见的硬件描述语言(HDL)之一。
2.1EDA技术介绍
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。
EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计[1]。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。
综合器的功能就是将设计者在EDA平台上完成的针对某个系统工程的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。
综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。
也就是说,综合器是软件描述与硬件实现的一座桥梁。
综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。
在今天,EDA技术已经成为电子设计的普遍工具,无论设计芯片还是设计系统,没有EDA工具的支持,都是难以完成的。
EDA工具已经成为设计师必不可少的武器,起着越来越重要的作用。
从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用广泛、工具多样、软件功能强大。
EDA技术发展迅猛,完全可以用日新月异来描述。
EDA技术的应用广泛,现在已涉及到各行各业。
EDA水平不断提高,设计工具趋于完美的地步。
2.2VHDL语言介绍
电子设计自动化(EDA)的关键技术之一是要求用形式化方法来描述数字系统的硬件电路。
VHDL硬件描述语言在电子设计自动化中扮演着重要的角色,他是EDA技术研究的重点之一。
硬件描述语言是EDA技术的重要组成部分,VHDL是作为电子设计主流硬件描述语言,VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage)于1983年由美国国防部发起创建,由IEEE进一步发展并在1987年作为IEEE标准10760发布。
因此,VHDL成为硬件描述语言的业界标准之一。
VHDL作为IEEE的工业标准硬件描述语言,得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性,使用VHDL语言,可以就系统的总体要求出发,自上而下地将设计内容细化,最后完成系统硬件的整体设计。
一个完整的VHDL程序包括以下几个基本组成部分:
实体(Entity),结构体(Architecture),程序包(Package),库(Library)。
其中,实体是一个VHDL程序的基本单元,由实体说明和结构体两部分组成,实体说明用于描述设计系统的外部接口信号;结构体用于描述系统的行为,系统数据的流程或系统组织结构形式。
程序包存放各设计模块能共享的数据类型,常数,子程序等。
库用于存放已编译的实体,机构体,程序包及配置。
VHDL语言的编译环境有不同的版本,我们应用的是Altera公司的Maxplus软件,它的操作顺序如下:
使用TEXTEDITOR编写VHDL程序使用COMPILER编译VHDL程序;使用WAVE2FORMEDITOR,SIMULAROT仿真实验;使用TIMINGANALTZER进行芯片的时序分析;用FLOORPLANEDITOR锁定芯片管脚位置;使用PROGRAMMER将编译好的VHDL程序下载到芯片中。
VHDL进行工程设计的优点是显而易见的。
1.与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
2.VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
3.VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效、高速地完成必须有多人甚至多个代发组共同并行工作才能实现。
4.对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的将VHDL描述设计转变成门级网表。
5.VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
6.用VHDL语言编写的源程序便于文档管理,用源代码描述来进行复杂控制逻辑的设计,既灵活方便,又便于设计结果的交流、保存和重用。
3设计原理
车速选择
起/停开关
基本速率
Reset
扫描时钟
显示输出显示输出
图3.1系统顶层框图
计费器按里程收费,每100M开始一次计费。
各模块功能如下:
(1)车速控制模块
当起停键为启动状态时(高电平),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。
(2)里程动态显示模块
其包括计数车速控制模块发出的脉冲以及将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1公里)。
(3)计费动态显示模块
其初值为10元,当里程超过3公里后才接受计数车速控制模块发出的脉冲的驱动,并且计数显示动态显示出来,每来一个脉冲(代表运行了0.5公里)其数值加1元,当收费超过20时数值加1.5元。
4设计步骤
VHDL设计流程图(如图4.0):
图4.0VHDL设计流程图
4.1程序设计
图4.1系统的总体模块图
(1)模块MS的实现(如图4.1.1所示)
图4.1.1模块MS图
模块MS,输入端口CK0、CK1为两个不同的时钟信号,来模拟汽车的加速和匀速,JS加速按键。
(2)模块SOUT的实现(如图4.1.2所示)
图4.1.2模块SOUT图
该模块实现车行状态输出功能,其中clk为时钟信号,enable为启动使能信号,sto暂停信号,clr为清零信号,st为状态信号。
(3)模块PULSE的实现(如图4.1.3所示)
图4.1.3模块PULSE图
该模块实现将时钟信号5分频功能。
(4)模块COUNTER的结果验证(如图4.1.4所示)
图4.1.4模块COUNTER图
实现汽车模拟计费功能。
clr1为清零信号,si为状态信号,c1,c2,c3分别为费用的三为显示。
(5)模块SCAN_LED的实现(如图4.1.5所示)
图4.1.5模块SCAN_LED图
该模块实现显示车费功能。
BT为选位信号,SG译码信号
4.2系统仿真:
系统仿真是在实际系统上进行实验研究比较困难时适用的必不可少的工具,它是指通过系统模型实验去研究一个已经存在或正在设计的系统的过程,通俗地讲,就是进行模型实验。
因而,系统仿真的结果决定整个课程设计任务完成的到位程度。
程序输入完成后进行编译,编译完成后,可以对所进行的设计进行仿真,本课程设计的仿真平台是MAX+plusⅡ,通过对VHDL源程序进行编译检错,然后创建波形文件(后缀名为.scf),加入输入输出变量,选择适用的芯片以及设定仿真结束时间,设置好输入初值进行仿真,得到仿真波形图:
1.模块MS的结果验证(如图4.2.1)
图4.2.1
当JS为高电平,CLK_OUT按照CLK1输出;低电平时,按照CLK0输出
2模块SOUT的结果验证(如图4.2.2)
enable高电平时,每一个时钟上升沿时,CQI计数加1,若CQI<=30时,state赋01,30 图4.2.2 3模块PULSE的结果验证(如图4.2.3) 每个CLK0上升沿时,CNT计数加1,加到4时在下一个时钟上升沿赋值0;cnt不为0时fout赋值低电平,否则高电平 图4.2.3 4模块COUNTER的结果验证(如图4.2.4) SI为出租车状态信号: “00”表示计费值停止,Q1~Q3不变。 “01”计费清零,设置为起步价10元,Q2=1,Q3=0,Q1=0。 “10”正常计费,每公里1元,“11”超过20元后,每公里1.5元;Q1,Q2,Q3的信号分别赋值给C1,C2,C3 图4.2.4 5模块SCAN_LED的结果验证(如图4.2.5) BT位选,SG译码对应数字0~9 图4.2.5 6模块TAXI的结果验证(如图4.2.6) 图4.2.6 4.3结果分析 出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。 车暂时停止不计费,车费保持不变。 若停止则车费清零,等待下一次计费的开始。 出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。 车暂时停止不计费,车费保持不变。 若停止则车费清零,等待下一次计费的开始。 各模块完成后,在将它们组合成完整的出租车系统,在设计过程中还需要改进的是控制系统的纠错功能。 出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。 5结束语 课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。 通过这次实验使我收获很多,对书本理论知识有了进一步加深,初步掌握了MAXPLUSII软件的一些设计使用方法。 对一些器件的使用方法了解更深刻了,如一些器件的使能端的作用等。 主要有以下一些实验感想 1、应该对实验原理有深刻理解; 2、做实验必须不急不躁,不能看见其他同学做的快就沉不住气了; 3、熟练掌握其他软件是必要的,如Matlab软件、Excel、Word等; 4、必须学会自己调试电路,一般第一次设计出的电路都会通不过编译的,所以要学会调试电路,而不是等老师解答或同学帮助; 致谢 经过三周的奋战我的课程设计终于完成了。 在没有做课程设计以前觉得课程设计只是对这半年来所学知识的单纯总结,但是通过这次做课程设计发现自己的看法有点太片面。 课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。 在这次课程设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。 在此要感谢我们的指导老师陈老师对我们悉心的指导,感谢老师们给我们的帮助。 在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,收获颇丰。 参考文献 [1]曹昕燕,周凤臣,聂春燕.EDA技术实验与课程设计【M】.清华大学出版社 [2]刘欲晓,方强,黄宛宁.EDA技术与VHDL电路开发应用实践【M】.电子工业出版社 [3]潘松,黄继业.EDA技术实用教程(第三版)【M】.科学出版社 [4]赵岩岭,刘春等.在MAX+PLUSII平台下用VHDL进行数字电路设计.西安: 希典出版社,2005 [5]康华光主编.电子技术基础模拟部分.北京: 高等教育出版社,2006 [6]阎石主编.数字电子技术基础.北京: 高等教育出版社,2003 附录1: 模块MS清单 //程序名称: MS //程序功能: 模块MS,输入端口CK0、CK1为两个不同的时钟信号,来模拟汽车的加速和匀速,JS加速按键。 //程序作者: 金人佼 //最后修改日期: 2010.12.31 LIBRARYIEEE。 USEIEEE.STD_LOGIC_1164.ALL。 ENTITYMSIS PORT(CK0: INSTD_LOGIC。 //慢速档的时钟信号 CK1: INSTD_LOGIC。 //快速档的时钟信号 JS: INSTD_LOGIC。 //换挡按键信号 CLK_OUT: OUTSTD_LOGIC)。 ENDMS。 ARCHITECTUREONEOFMSIS BEGIN PROCESS(JS,CK0,CK1) BEGIN IFJS='0'THENCLK_OUT<=CK0。 //JS低电平,则为慢速档 ELSECLK_OUT<=CK1。 //JS高电平,快速档 ENDIF。 ENDPROCESS。 ENDONE。 附录2: 模块SOUT清单 //程序名称: SOUT //程序功能: 该模块实现车行状态输出功能,其中clk为时钟信号,enable为启动使能信号,sto暂停信号,clr为清零信号,st为状态信号。 //程序作者: 金人佼 //最后修改日期: 2010.12.31 LIBRARYIEEE。 USEIEEE.STD_LOGIC_1164.ALL。 USEIEEE.STD_LOGIC_UNSIGNED.ALL。 ENTITYSOUTIS PORT(CLK: INSTD_LOGIC。 ENABLE: INSTD_LOGIC。 STO: INSTD_LOGIC。 CLR: INSTD_LOGIC。 ST: OUTSTD_LOGIC_VECTOR(1DOWNTO0))。 ENDSOUT。 ARCHITECTUREONEOFSOUTIS BEGIN PROCESS(CLK,ENABLE,STO,CLR) VARIABLECQI: STD_LOGIC_VECTOR(7DOWNTO0)。 VARIABLESTATE: STD_LOGIC_VECTOR(1DOWNTO0)。 BEGIN IFCLR='0'THENCQI: =(OTHERS=>'0')。 //CLR低电平,CQI清零 ELSIFCLK'EVENTANDCLK='1'THEN//CLK上升沿触发 IFSTO='1'THENSTATE: ="00"。 CQI: =CQI。 //STO高电平时,state赋00态 ELSIFENABLE='1'THEN//ENABLE高电平,CQI计数加1 CQI: =CQI+1。 IFCQI<=30THENSTATE: ="01"。 //CQI<=30时,state赋01态 ELSIFCQI>30ANDCQI<=80THENSTATE: ="10"。 //30 ELSE STATE: ="11"。 //CQI>80时,state赋11态 ENDIF。 ENDIF。 ENDIF。 ST<=STATE。 ENDPROCESS。 ENDONE。 附录3: 模块PULSE //程序名称: PULSE //程序功能: 该模块实现将时钟信号5分频功能。 //程序作者: 金人佼 //最后修改日期: 2010.12.31 LIBRARYIEEE。 USEIEEE.STD_LOGIC_1164.ALL。 USEIEEE.STD_LOGIC_UNSIGNED.ALL。 ENTITYPULSEIS PORT(CLK0: INSTD_LOGIC。 FOUT: OUTSTD_LOGIC)。 ENDPULSE。 ARCHITECTUREONEOFPULSEIS BEGIN PROCESS(CLK0) VARIABLECNT: STD_LOGIC_VECTOR(2DOWNTO0)。 VARIABLEFULL: STD_LOGIC。 BEGIN IFCLK0'EVENTANDCLK0='1'THEN IFCNT="100"THEN//CNT计数到5(“100”) CNT: ="000"。 //CNT清零 FULL: ='1'。 //FULL高电平 ELSE CNT: =CNT+1。 //否则计数CNT加1 FULL: ='0'。 //FULL赋低电平 ENDIF。 ENDIF。 FOUT<=FULL。 //FULL为CLK的五分频信号,赋值给FOUT做输出信号 ENDPROCESS。 ENDONE。 附录4: 模块COUNTER //程序名称: COUNTER //程序功能: 实现汽车模拟计费功能。 clr1为清零信号,si为状态信号,c1,c2,c3分别为费用的三为显示。 //程序作者: 金人佼 //最后修改日期: 2010.12.31 LIBRARYIEEE。 USEIEEE.STD_LOGIC_1164.ALL。 USEIEEE.STD_LOGIC_UNSIGNED.ALL。 ENTITYCOUNTERIS PORT(CLK_DIV: INSTD_LOGIC。 CLR1: INSTD_LOGIC。 SI: INSTD_LOGIC_VECTOR(1DOWNTO0)。 C1: OUTSTD_LOGIC_VECTOR(3DOWNTO0)。 C2: OUTSTD_LOGIC_VECTOR(3DOWNTO0)。 C3: OUTSTD_LOGIC_VECTOR(3DOWNTO0))。 ENDCOUNTER。 ARCHITECTUREONEOFCOUNTERIS BEGIN PROCESS(CLK_DIV,CLR1,SI) VARIABLEQ1: STD_LOGIC_VECTOR(3DOWNTO0)。 VARIABLEQ2: STD_LOGIC_VECTOR(3DOWNTO0)。 VARIABLEQ3: STD_LOGIC_VECTOR(3DOWNTO0)。 BEGIN IFCLR1='0'THENQ1: ="0000"。 Q2: ="0000"。 Q3: ="0000"。 //CLR低电平,清零 ELSIFCLK_DIV'EVENTANDCLK_DIV='1'THEN//CLK_DIV上升沿触发 CASESIIS//SI: “00”表示计费值停止,“01”计费清零,设置为起步价10元,“10”正常计费,每公里1元,“11”超过20元后,每公里1.5元; WHEN"00"=>Q1: =Q1。 Q2: =Q2。 Q3: =Q3。 WHEN"01"=>Q1: ="0000"。 Q2: ="0000"。 Q3: ="0001"。 //起步价10元 WHEN"10"=>IFQ2<"1001"THEN Q2: =Q2+1。 ELSE Q2: ="0000"。 IFQ3<"1001"THEN Q3: =Q3+1。 ENDIF。 ENDIF。 Q1: ="0000"。 WHEN"11"=>IFQ1<"0101"THEN Q1: =Q1+5。 ELSE Q1: ="0000"。 ENDIF。 IFQ1="0101"THEN IFQ2<"1001"THEN Q2: =Q2+1。 ELSE Q2: ="0000"。 IFQ3<"1001"THEN Q3: =Q3+1。 ENDIF。 ENDIF。 ELSE IFQ2<"1001"THEN Q2: =Q2+2。 ELSE Q2: ="0001"。 IFQ3<"1001"THEN Q3: =Q3+1。 ENDIF。 ENDIF。 ENDIF。 WHENOTHERS=>NULL。 ENDCASE。 ENDIF。 C1<=Q1。 C2<=Q2。 C3<=Q3。 ENDPROCESS。 ENDONE。 附录5: 模块SCAN_LED的实现 //程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 语言 出租车 计费 方案设计