《EDA课程设计出租车计费器.doc》由会员分享,可在线阅读,更多相关《EDA课程设计出租车计费器.doc(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流EDA课程设计出租车计费器.精品文档. CHANGSHA UNIVERSITY OF SCIENCE & TECHNOLOGYEDA基础课程设计题目: 出租车计费器设计学生姓名: *学 号: 2009*班 级: 电子信息工程09-02班专 业: 电子信息工程所在院系: 电气与信息工程学院 指导教师: * 起止日期:2012年5月28日至2012年6月8日出租车计费器设计摘要随着我国社会经济的全面发展,各大中小城市的出租车营运事业发展迅速,出租车已经成为人们日常出行选择较为普遍的交通工具。出租车计费器是出租车营运收费的专用智能化仪表,是出租车市
2、场规范化 、标准化以及减少司机与乘客之间发生纠纷的重要设备。一种功能完备、简单易用、计量准确的出租车计费器是加强出租车行业管理、提高服务质量的必备品。本文介绍了出租车计费器系统在实际生产生活中的重要性,根据预定的设计要求和设计思路,采用VHDL硬件描述语言作为设计手段,采用自顶向下的设计思路设计了一个实际的基于EP3C80F780C8N芯片的出租车计费系统,通过在Quartus8.1软件下进行模拟仿真,并进行相应的硬件下载调试,证明该出租车计费系统具有实用出租车计费器的基本功能,各技术指标符合预定标准,如能进一步完善,将可以实用化和市场化,具有一定实用性。关键词:出租车计费器;现场可编程门阵列
3、;仿真 目 录1 设计目的12 设计指标22.1 课题22.2技术指标23 VHDL简介24 出租车计费器功能设计44.1出租车计费器功能设计44.2出租车计费器原理54.3模块设计5 4.3.1点阵动态显示模块5 4.3.2里程动态显示模块6 4.3.3计费动态显示模块65 出租车计费器的实现65.1出租车计费器功能设计65.2出租车计费器原理75.3模块设计106 出租车计费器的仿真结果186.1管脚分配186.2显示模块仿真结果197 设计总结21参考文献22附录 出租车计费器VHDL源程序231 设计目的随着我国社会经济的全面发展,各大中小城市的出租车营运事业发展迅速,出租车已经成为人
4、们日常出行选择较为普遍的交通工具。出租车计费器是出租车营运收费的专用智能化仪表,是出租车市场规范化 、标准化以及减少司机与乘客之间发生纠纷的重要设备。一种功能完备、简单易用、计量准确的出租车计费器是加强出租车行业管理、提高服务质量的必备品。本文介绍了出租车计费器系统在实际生产生活中的重要性,根据预定的设计要求和设计思路,采用VHDL硬件描述语言作为设计手段,采用自顶向下的设计思路设计了一个实际的基于AheraFPGA芯片的出租车计费系统,通过在Quartus8.1软件下进行模拟仿真,并进行相应的硬件下载调试,证明该出租车计费系统具有实用出租车计费器的基本功能,各技术指标符合预定标准,如能进一步
5、完善,将可以实用化和市场化,具有一定实用性。传统出租车计费器多数由单片机实现,可扩展的资源有限,硬件电路复杂,不利于系统功能升级,容易在运营过程中产生干扰,影响系统的使用。并且由于分立器件多,造成电源功耗大,影响芯片的使用寿命。而基于FPGA的出租车计费器可以解决电子系统小型化、低功耗、高可靠性等问题,具有非常重要的实际意义。2 设计指标2.1 课题出租车计费器设计2.2技术指标1.用直流电动机模拟出租车轮子,通过8个七段码管的前四个显示里程,后四个显示费用。2.利用16*16点阵显示每公里费用。3.白天黑夜出租车不同费用价格。4.计算超出一定里程的返程费用。3 VHDL简介 VHDL的英文全
6、名是Very-High-Speed Integrated Circuit Hardware Description Language,翻译成中文就是超高速集成电路硬件描述语言,因此它的应用主要是应用在数字电路的设计中。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的认可,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能
7、力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL与Verilog语言将承担起大部分的数字系统设计任务。VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。 VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语
8、言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因
9、为VHDL易读和结构化,所以易于修改设计。VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。4 设计过程4.1 出租车计费器功能设计该系统的设计可以采用分立元件来搭建,也可以通过单片机来设计,而使用可编程FPGA来设计,具有设计周期短、易于修改等明显特点,而且随着可编程逻辑器件和EDA软件的飞速发展,越来越多的
10、电子系统采用FPGA来设计,一旦该系统达到一定的量产规模,也比较容易转化为ASIC芯片设计。因此,基于FPGA来设计一个出租车的计费器。本系统在EDA工具软件Quartus8.1中,采用硬件描述语言和原理图设计相结合的方法,进行各个模块的设计,最终将各个模块组成整个系统。FPGA设计划分为以下几个功能模块,它们分别是:点阵显示模块、计程模块、输出数据显示模块,将每个模块的功能实现后,通过合理连接和协调各相关端口,得到整个电路系统。下面分别是各主要模块的简单描述。点阵显示模块:采用一种16路动态分时扫描技术来实现16*16点阵动态显示白天和夜间不同的每公里费用。具体方法是,将1616数组的显示模
11、块的行输入端与FPGA内的只读存储器ROM的16位数据输出端口相连,16个列控制端与一个4-16译码器的输出相连,而译码器的输入端和片选信号又与FPGA内的列扫描控制模块的输出端口相连。 计程模块:出租车能够显示行驶的里程,可以通过直流电动机的转动产生脉冲,然后通过计数器对脉冲进行计数来实现。本次设计中里程数精确到O1 km,也就是100m,由电动机给出的脉冲信号作为里程计数器的时钟信号,里程计数器每计数1 km还会周期性地输出一个脉冲信号,称为1 km脉冲信号,可以通过一定的组合电路来实现。里程计数器可以用一个四位BCD码计数器来实现,最大能显示到9999,根据设计的要求和条件限制,这里前三
12、位为整数部分,最后一位为小数部分,即最大能显示里程999.9 km。 数据显示模块:系统最核心的部分就是计费如何实现。这里就需要设计一个BCD码的加法器,在起步价的基础上,根据行驶里程的不同,依据计费标准,每增加1 km加上一个单价。系统中用到了四位BCD码加法器,可以实现四位十进制数的加法运算。加法器输出的结果就是乘客应付的费用,这里以元为单位,最大能显示9999元。四位BCD码加法器由四个一位BCD码加法器级联而成。四位BCD码加法器输出的结果通过缓冲器以后,反馈到输入端重新作为一个加数,在脉冲信号的作用下,每来一个脉冲就和单价相加,形成连续累加的功能。4.2 出租车计费器原理脉冲信号里程
13、计数器点阵显示模块直流电动机BCD码计数器脉冲信号数据显示模块单价选择 图1 出租车计费器原理框图4.3 模块设计4.3.1 点阵动态显示模块当白天、夜间转换开关K1置于关状态(低电平)时,16*16点阵显示文字“白天每公里2元”,文字逐个显示,不断循环以告知乘客出租价格;当K1置于开状态(高电平)时,显示“夜间每公里3元”。其原理结构图如下:图2 点阵显示原理结构图4.3.2 里程动态显示模块其包括直流电动机发出的脉冲以及将计数显示动态显示在前四个七段数码管,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1公里)。当S1按键按下进行复位后数值归零,重新开始计数。4.3.3 计费
14、动态显示模块其初值为6元,当里程超过2公里后才接受直流电动机发出的脉冲的驱动,并且计数显示动态显示出来,白天期间每来10个脉冲(代表运行了1公里)其数值加2元,当里程超过20km时加收50%的返程费,即数值加3元;夜间20km以内单价3元,当超过20km时加收返程费。当S1按键按下进行复位后数值归零,重新开始计费。5 出租车计费器的实现5.1 计程模块程序设计计程模块的VHDL源程序如下: process(Motor,Rst) -计里程 begin if(Rst=0) then Meter1=0; Meter10=0; Meter100=0; Meter1K=0; elsif(Motoreve
15、nt and Motor=1) then if(Meter1=9) then Meter1=0; if(Meter10=9) then Meter10=0; if(Meter100=9) then Meter100=0; if(Meter1K=9) then Meter1K=0; else Meter1K=Meter1K+1; end if; else Meter100=Meter100+1; end if; else Meter10=Meter10+1; end if; else Meter1=Meter1+1; end if; end if; end process; 出租车能够显示行驶的
16、里程,可以通过直流电动机的转动产生脉冲,然后通过计数器对脉冲进行计数来实现。本次设计中里程数精确到O1 km,也就是100m,由电动机给出的脉冲信号作为里程计数器的时钟信号,里程计数器每计数1 km还会周期性地输出一个脉冲信号,称为1 km脉冲信号,可以通过一定的组合电路来实现。里程计数器可以用一个四位BCD码计数器来实现,最大能显示到9999,根据设计的要求和条件限制,这里前三位为整数部分,最后一位为小数部分,即最大能显示里程999.9 km。5.1 计费模块程序设计 计费模块的VHDL源程序如下: process(Clk,Rst,dn) -计费模块 begin if(Rst=0) then
17、 Money1=0; Money10=0; Money100=0; elsif(Motorevent and Motor=1) then if( Meter102 and Meter1001 and Meter1k1) then -里程小于2Km时显示起步价 Money100=0; Money10=0; Money1=6; -起步价6元 Old_Money1=0;else if (dn=0 and Meter1002 and Meter1k0) then if (Old_Money1=9) then Old_Money1=0; -白天 if (Money1=9) then Money1=0;
18、if(Money10=9) then Money10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10 +1; end if; else Money1=Money1 +1; end if; else Old_Money11 or Meter1k0) then -白天超过20km加收返程费 if (Old_Money1=9) then Old_Money1=0; if (Money1=9) then Money1=0; if(Money10=9) then Money
19、10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10 +1; end if; else Money1=Money1 +1; end if; else Old_Money1= Old_Money1 +3; -加收返程费 end if; end if; if (dn=1 and Meter1002 and Meter1k0) then if (Old_Money1=9) then Old_Money1=0; -夜间 if (Money1=9) then Money1=
20、0; if(Money10=9) then Money10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10 +1; end if; else Money1=Money1 +1; end if; else Old_Money11 or Meter1k0) then -夜间超过20km加收返程费 if (Old_Money1=9) then Old_Money1=0; if (Money1=9) then Money1=0; if(Money10=9) then Mo
21、ney10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10 +1; end if; else Money1=Money1 +1; end if; else Old_Money1Disp_TempDisp_TempDisp_TempDisp_TempDisp_TempDisp_TempDisp_TempDisp_Temp=Money1; end case; end process; process(Clk) begin if(Clkevent and Clk=1)
22、then -扫描累加 SEG_SEL=SEG_SEL+1; if(SEG_SEL=3) then Display=Disp_Decode or 1000000; else DisplayDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_Decode=00000000; -全灭 end case;end process; 在起步价的基础上,根据行驶里程的不同,依据计费标准,每增加1 km加上一个单
23、价。系统中用到了四位BCD码加法器,可以实现四位十进制数的加法运算。加法器输出的结果就是乘客应付的费用,这里以元为单位,最大能显示9999元。四位BCD码加法器由四个一位BCD码加法器级联而成。四位BCD码加法器输出的结果通过缓冲器以后,反馈到输入端重新作为一个加数,在脉冲信号的作用下,每来一个脉冲就和单价相加,形成连续累加的功能。此设计中2km以内起步价为6元,白天续程单价2元,超过20km为3元;夜间续程单价3元,超过20km为4元。5.3 点阵显示模块程序点阵显示模块的VHDL源程序如下:process(clk) -显示时序控制 begin if clkevent and clk=1 t
24、hen dount=dount+1; if dount=255 then if S=15 then S=0000; else s=S+1; end if; s=s+1; else s=S; end if; if cdount15 then cdount=cdount+1; else cdount=0000; end if; end if; keyckeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyr=1011011011101101;