EDA_出租车计费器++完整版.doc_第1页
EDA_出租车计费器++完整版.doc_第2页
EDA_出租车计费器++完整版.doc_第3页
EDA_出租车计费器++完整版.doc_第4页
EDA_出租车计费器++完整版.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3基于VHDL的出租车计费器的设计随着出租车行业的发展,对出租车计费器的要求也越来越高。最近几年出租车行业发展迅速,在全国有几千家出租车公司。因此出租车计费器市场是庞大的。而出租车计费器成为不可缺少的一部分。信息社会的现代电子产品,性能越来越高,复杂度越来越大,更新步伐也越来越快。实现这种进步的主要原因就是微电子技术和电子技术的发展。而电子技术的发展后者的核心就是电子设计自动化技术。EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的;反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。本文采用VHDL语言来设计实现出租车计费系统,源程序经ALTERA的MAX+PLUS软件调试优化,下载到特定芯片(MAX系列之一)后,可应用于实际的出租车计费系统中。一 设计任务与要求1.11 设计任务设计一个出租车自动计费器,计费包括起步价、行车里程计费、停止和暂停不计费三部分。现场模拟汽车的启动、停止、暂停和换挡状态。分别用四位数码管显示金额和里程,各有两位小数,行程 3公里内,起步费为6元,超过3公里,以每公里1.3元计费。1.12 设计要求1、设计正确,方案合理。界面友好,使用方便。程序精炼,结构清晰。2、有详细的文档。包括设计思路、设计仿真程序、仿真结果及相应的分析与结论。二 系统方案设计2.1 出租车计费器工作原理实际中出租车的计费工作原理一般分成3个阶段:(1)车起步开始计费。首先显示起步价(本次设计起步费为6.00元),车在行驶3 km以内,只收起步价5.00元。(2)车行驶超过3 km后,按每公里1.3元计费(在6.00元基础上每行驶1 km车费加1.3元),车费依次累加。(3)当等待时间累计超过2分钟按1.5元计费。2.2 基本设计思想(1)根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。计数器A完成车费百位。计数器B完成车费十位和个位。计数器C完成车费角和分。计数器D完成计数到30(完成车费的起步价)。计数器E完成模拟实现车行驶100 m的功能。 (2)车费的显示:由动态扫描电路来完成。用专用模块来实现,完成数据的输入即动态数据的显示。 (3)根据层次化设计理论,该设计问题自顶向下可分为车速控制模块、计数模块、译码和动态扫描显示模块,其系统框图如下图所示:图1.1 出租车系统框图三 具体模块实现3.11 车速控制模块当启停键为启动状态(高电平时),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时,暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。3.12 里程计数模块里程计数模块实现对于出租车在行驶过程的里程计数功能;当行驶里程大于3KM时,本模块中信号变为1;clk每来一个上升沿,里程计数模块实现一次计数,里程数加1。计数车速控制模块发出的脉冲,并将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1公里)。3.13 计费计数模块计费模块启动reset信号,根据输入的clk信号变化,调节费用的计数,用c0、c1、c2、c3显示费用。其初值为6,当里程数超过3公里后,才接受计数车速控制模块发出的脉冲的驱动,并且将计数显示动态显示出来,每一个脉冲其数值加0.12,当收费超过20时数值加0.18当启停键为启动状态(高电平时),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时,暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。3.14 动态扫描模块动态扫描电路将计数器A、B、C的计费状态用数码管显示出来,在一个进程中只允许一个信号上升沿作为触发条件。一个功能模块最好按上升沿信号分多个进程完成,各进程间用信号连接。该模块经过8选1选择器将计费数据(4位BCD码)、计程数据(4位BCD码)动态选择输出。其中计费数据送入显示译码模块进行译码,最后送至百元、十元、元、角为单位对应的数码管上显示;计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示。3.3 总模块taxi的计费器的原理图:将各模块的原理图对应的端口连接。图3.2 出租车计数器原理图四 程序调试及局部仿真结果4.1 车速控制模块仿真结果图4.1 车速控制模块时序仿真结果图4.1clk为基本输入时钟即(基本车速);k为可调车速,通过改变k来模拟车速变化;start为启停开关,当start为1时内部计数器开始计数;reset为复位开关,用于复位车速控制模块中定义的count2计数器;clkout为脉冲输出,当输入车速越大,脉冲输出频率越高,计数周期变短,而clkout输出脉冲的意义为,参照于基本车速所反映的一个相对时间量,一个脉冲代表在该车速下行进了0.1km;仿真出现的问题:该车速控制模块中的reset复位端作为整个系统复位的一个环节,配合其他模块的的复位一起使用,做到对计数模块和显示模块的清零和归位。但是在该模块中单独时,效果不能体现,因为在该模块中,它复位的是内部定义的计数器count2,在脉冲输出clkout中不能体现使其为0,只是不在出现状态变换,在全体仿真和硬件测试中,reset可以体现复位和清零。4.2 测试结果展示 a:起步价格 b:开始行使未超过三公里 c:超过三公里后 d:累计时间超过2分钟后 图4.2 计费和里程测试结果显示图4.2中a为起始起步价格,6元。b为出租车开始行使,未超出三公里保持起始价格不变。c为超过三公里后按每公里加1.2元计算。d为累计时间等待超过2min后按每分子安1.5元计算。 五 课程设计的心得与体会短短一周的EDA课程设计已经接近尾声了,我们从挑选课设题目,查阅资料,到研究出总体设计,详细设计,然后分工合作,再到最后的编程上机调试,修改程序,完善程序,收获颇多。出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动,停止、暂停等功能,并设计动态扫描电路显示车费数目。车暂停时停止计费。若停止清零,等待下一次计费的开始。出租车计费系统设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点。本设计在使用方面居庸一点的价值。由于时间有限和经验是平的欠缺,不足之处还望老师予以指正。在这一周里我们再次熟悉和增强了对VHDL语言的基本知识,熟悉利用VHDL语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来。VHDL硬件描述语言打破了硬件和软件设计人员之间互不干涉的界限,可以使用语言的形式来进行数字系统的硬件结构、行为的描述,直接设计数字电路硬件系统。通过编程、下载后,该芯片已经具备了原来需要使用复杂的数字电路实现的功能;更加了解和加深了对编制和调试程序的技巧,进一步提高了上机动手能力,培养了使用设计综合电路的能力,养成了提供文档资料的习惯和规范编程的思想。本次的课程设计将各个单一的模块实现其功能后,学会通过原理图或顶层文件把各模块连接,从而实现对出租车自动计费。课设注重的不仅是把理论知识巩固,而且应把理论和实际相结合,把知识应用到生活中。在课设过程中,遇到了不少问题,数码管无法正常显示,计费不按要求等。通过的对源代码的修改,发现了一些易忽略的细节。课设考验的是思维逻辑能力,对知识的灵活应用,当然,合作精神是不可或缺的。课设时间不长,要在短时间内完成绝不是个人力量能达到的,要学会集众人之精华,还要善于利用已有的工具为自己服务,开拓思维。课设让我们认识到所学本科知识的真正实用性,只是这门课开始研究的第一步。在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。最后,我们衷心的感谢课设期间一直指导和陪伴着我们的老师。六 参考资料1 候伯亨,顾新. VHDL硬件描述语言与数字逻辑电路设计.修订版。西安电子科技大学出版社,19992 张昌凡,等.可编程逻辑器件及VHDL设计技术.广州:华南理工大学出版社,2001 3 曾繁泰,陈美金.VHDL程序设计 .北京:清华大学出版社,2001 4 潘松,等.VHDL实用教程 .成都:电子科技大学出版社,2000附件1、车速控制模块源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SPEED IS PORT( CLK,RESET,START: IN STD_LOGIC; K : IN STD_LOGIC_VECTOR(4 DOWNTO 0); CLKOUT : OUT STD_LOGIC );END SPEED;ARCHITECTURE A OF SPEED IS SIGNAL COUNT1 :STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL TEMPCLK,CLKS:STD_LOGIC; SIGNAL KINSIDE :STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN KINSIDE=00000-K; CLKS_LABEL: PROCESS(RESET,CLK) VARIABLE COUNT2: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN IF RESET = 1 THEN COUNT2:=00000; ELSIF CLKEVENT AND CLK=1 THEN IF START=1 THEN IF COUNT2=KINSIDE THEN COUNT2:=00000; END IF; IF NOT (K=00000) THEN COUNT2:= COUNT2+1; END IF; IF COUNT2=00001 THEN TEMPCLK = NOT TEMPCLK; END IF; END IF; END IF; END PROCESS CLKS_LABEL; CLKOUT = TEMPCLK; END A;2、计程源程序如下LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CDU99 IS PORT (CLK,RESET: IN STD_LOGIC; COUNT1:OUT STD_LOGIC_VECTOR (3 DOWNTO 0); COUNT2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0); COUNT3:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END CDU99;ARCHITECTURE AA OF CDU99 ISBEGIN PROCESS(CLK,RESET) VARIABLE MM: STD_LOGIC_VECTOR (11 DOWNTO 0); BEGIN IF RESET =1 THEN MM:=000000000000; ELSIF CLKEVENT AND CLK=1 THEN IF MM(3 DOWNTO 0)=1001 THEN MM:=MM+7; ELSE MM:=MM+1; END IF; IF MM(7 DOWNTO 4)=1010 THEN MM:=MM+01100000; END IF; END IF; COUNT1 =MM(3 DOWNTO 0); COUNT2 =MM(7 DOWNTO 4); COUNT3 =MM(11 DOWNTO 8); END PROCESS; END AA;4、计费模块源程序如下LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNT99 IS PORT(CLK,RESET:IN STD_LOGIC; JUDGE2:IN STD_LOGIC_VECTOR(3 DOWNTO 0); JUDGE3:IN STD_LOGIC_VECTOR(3 DOWNTO 0); COUNT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUNT2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUNT3:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUNT4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COUNT99;ARCHITECTURE AA OF COUNT99 ISSIGNAL EN :STD_LOGIC;SIGNAL MONEY :STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL MCOUNT :STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINMONEY=00011000 WHEN (MCOUNT(15)=1) OR (MCOUNT(14)=1) OR (MCOUNT(13)=1) ELSE 00010010;EN=0 WHEN JUDGE3=0000 AND JUDGE2(3 DOWNTO 2)=00 AND(JUDGE2(1)=0) OR (JUDGE2(1)=1 AND JUDGE2(0)=0) ELSE 1;PROCESS(CLK,RESET) VARIABLE MM: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGIN IF RESET=1 THEN MM:=0000011000000000; ELSIF CLKEVENT AND CLK=1 THEN IF EN=1 THEN MM:=MM+MONEY;END IF; IF MM(3)=1 AND (NOT(MM(2 DOWNTO 1)=00)THEN MM:=MM+6;END IF;IF MM(7)=1 AND (NOT(MM(6 DOWNTO 5)=00)THEN MM:=MM+01100000;END IF; IF MM(11)=1 AND (NOT(MM(10 DOWNTO 9)=00)THEN MM:=MM+011000000000;END IF; END IF; COUNT1=MM(3 DOWNTO 0); COUNT2=MM(7 DOWNTO 4); COUNT3=MM(11 DOWNTO 8); COUNT4=MM(15 DOWNTO 12);MCOUNT=MM;END PROCESS;END AA;5、 译码管片选信号源程序:LI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论