基于VHDL语言的出租车计费器方案设计书Word格式.docx
《基于VHDL语言的出租车计费器方案设计书Word格式.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的出租车计费器方案设计书Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。
也就是说,综合器是软件描述与硬件实现的一座桥梁。
综合过程就是将电路的高级语言描述转换低级的、可与目标器件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<
CQI<
=80时,state赋10态,…..;
enable低电平时,CQI计数暂停,保持不变
图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
//程序功能:
//程序作者:
金人佼
//最后修改日期:
2010.12.31
LIBRARYIEEE。
USEIEEE.STD_LOGIC_1164.ALL。
ENTITYMSIS
PORT(CK0:
INSTD_LOGIC。
//慢速档的时钟信号
CK1:
//快速档的时钟信号
JS:
//换挡按键信号
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
USEIEEE.STD_LOGIC_UNSIGNED.ALL。
ENTITYSOUTIS
PORT(CLK:
ENABLE:
STO:
CLR:
ST:
OUTSTD_LOGIC_VECTOR(1DOWNTO0))。
ENDSOUT。
ARCHITECTUREONEOFSOUTIS
PROCESS(CLK,ENABLE,STO,CLR)
VARIABLECQI:
STD_LOGIC_VECTOR(7DOWNTO0)。
VARIABLESTATE:
STD_LOGIC_VECTOR(1DOWNTO0)。
IFCLR='
THENCQI:
=(OTHERS=>
'
)。
//CLR低电平,CQI清零
ELSIFCLK'
EVENTANDCLK='
1'
THEN//CLK上升沿触发
IFSTO='
THENSTATE:
="
00"
。
CQI:
=CQI。
//STO高电平时,state赋00态
ELSIFENABLE='
THEN//ENABLE高电平,CQI计数加1
CQI:
=CQI+1。
IFCQI<
=30THENSTATE:
01"
//CQI<
=30时,state赋01态
ELSIFCQI>
30ANDCQI<
=80THENSTATE:
10"
//30<
=80时,state赋10态
ELSE
STATE:
11"
//CQI>
80时,state赋11态
ST<
=STATE。
ENDPROCESS。
附录3:
模块PULSE
PULSE
ENTITYPULSEIS
PORT(CLK0:
FOUT:
ENDPULSE。
ARCHITECTUREONEOFPULSEIS
PROCESS(CLK0)
VARIABLECNT:
STD_LOGIC_VECTOR(2DOWNTO0)。
VARIABLEFULL:
STD_LOGIC。
IFCLK0'
EVENTANDCLK0='
THEN
IFCNT="
100"
THEN//CNT计数到5(“100”)
CNT:
000"
。
//CNT清零
FULL:
='
//FULL高电平
ELSE
=CNT+1。
//否则计数CNT加1
//FULL赋低电平
FOUT<
=FULL。
//FULL为CLK的五分频信号,赋值给FOUT做输出信号
附录4:
模块COUNTER
COUNTER
ENTITYCOUNTERIS
PORT(CLK_DIV:
CLR1:
SI:
INSTD_LOGIC_VECTOR(1DOWNTO0)。
C1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)。
C2:
C3:
OUTSTD_LOGIC_VECTOR(3DOWNTO0))。
ENDCOUNTER。
ARCHITECTUREONEOFCOUNTERIS
PROCESS(CLK_DIV,CLR1,SI)
VARIABLEQ1:
STD_LOGIC_VECTOR(3DOWNTO0)。
VARIABLEQ2:
VARIABLEQ3:
IFCLR1='
THENQ1:
0000"
Q2:
Q3:
//CLR低电平,清零
ELSIFCLK_DIV'
EVENTANDCLK_DIV='
THEN//CLK_DIV上升沿触发
CASESIIS//SI:
“00”表示计费值停止,“01”计费清零,设置为起步价10元,“10”正常计费,每公里1元,“11”超过20元后,每公里1.5元;
WHEN"
=>
Q1:
=Q1。
=Q2。
=Q3。
=>
Q1:
0001"
//起步价10元
IFQ2<
"
1001"
Q2:
=Q2+1。
IFQ3<
Q3:
=Q3+1。
IFQ1<
0101"
=Q1+5。
IFQ1="
=Q2+2。
WHENOTHERS=>
NULL。
ENDCASE。
ENDIF。
C1<
C2<
C3<
附录5:
模块SCAN_LED的实现
//程