EDA课程设计出租车计价器(共17页).docx
精选优质文档-倾情为你奉上目 录1引言出租车是现代人类的重要交通工具,而出租车的计费系统的安全性和先进性是人们普遍关心的问题,要求计费器性能稳定,计费准确,以及预防司机作弊行为等等都关系到乘客的切身利益。因此,设计出符合人们普遍要求及放心的产品具有重要的意义。本设计采用Altera公司的Quartus软件作为开发平台,以VHDL作为程序设计设计的语言,设计了出租车计费器系统的程序,并进行了程序仿真。使其实现了计费、计时和记录行车里程的功能,并利用动态扫描显示车费总额。计费系统在各大、中城市出租车中使用越来越广泛。针对现有计费系统通用性差的缺陷,采用VHDL语言可以开发出租车计费系统,该计费系统的可靠性高,成本低,通用性强。该系统在不改变硬件电路的前提下,具有可以重建系统的功能,采用完全相同电路结构,只要根据各地区的需求在VHDL程序中设置个别参数,就可以适应各地区出租车不同计费标准的需要,还可根据各地区需求增加其他功能。2 EDA技术简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。现在对EDA的概念或范畴用得很广,包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。EDA工具软件可大致分为芯片设计辅助软件、可编程芯片辅助设计软件、系统设计辅助软件等三类。目前进入我国并具有广泛影响的EDA软件是系统设计软件辅助类和可编程芯片辅助设计软件:Protel、PSPICE、multiSIM10(原EWB的最新版本)、OrCAD、PCAD、LSIIogic、MicroSim,ISE,modelsim等等。这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同进还可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。3 VHDL语言简介VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。VHDL的英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Description Language.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点 与其他硬件描述语言相比,VHDL具有以下特点:功能强大、设计灵活。VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。支持广泛、易于修改。由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。强大的系统硬件描述能力。VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。独立于器件的设计、与工艺无关。设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。很强的移植能力。VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。易于共享和复用。VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。1. 与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。2. VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。3. VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。4. 对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。5. VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。4 设计要求及其背景4.1 设计要求本课程设计就是针对EDA技术所设计的一个出租车计价器,其所能实现的功能如下: 1. 起步价为8.00元,起步公里为3公里;2. 超过3公里,每公里按1.00元收费;3. 单程行驶里程超过20公里,每公里租价加收50%;4. 等候时间累积1分钟,则每分钟这算1公里里程价。要求显示里程、计费及等候时间。乘客上车后,按下启动键,开始计费,除非同一乘客往返用那个车,否则按下单程键,这样行驶里程超过20公里时,每公里加收50%,既每公里租费1.5元;计费显示为3位整数、1位小数。4.2 设计背景随着出租车行业的发展,对出租车计费器的要求也越来越高,用户不仅要求计费器性能稳定,计费准确。利用VHDL语言设计出租车计费系统,使其实现计费以及预置和模拟汽车启动、停止、等待等功能设计出动态扫描电路显示车费数目,突出了其作为硬件描述语言的良好的可能性、可移植性和易理解等优点。VHDL就是超高速集成电路硬件描述语言。覆盖面广,描述能力强,是一个多层次的硬件描述语言。在VHDL语言中,设计的原始描述可以非常简练,经过层层加强后,最终可成为直接付诸生产的电路或版图参数描述。具有良好的可读性,即容易被计算机接受,也容易被读者理解。使用期长,不会因工艺变化而使描述过时。因为VHDL的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的属性参数即可。支持大规模设计的分解和已有设计的再利用。一个大规模的设计不可能由一个人独立完成,必须由多人共同承担,VHDL为设计的分解和设计的再利用提供了有力的支持。5 系统设计根据层次化设计理论,该设计问题自顶向下可为分频模块、控制模块、计量模块、译码和动态扫描显示模块,各模块功能如下所述。5.1分频模块分频模块对频率为240Hz的输入脉冲进行分频,产生频率为16Hz、15Hz、1Hz的3种频率。该模块产生频率信号用于计费,每个1Hz脉冲为0.1元计费控制,15Hz为1.5元的计费控制,16Hz信号1.6元计费控制。5.2 控制模块计价器控制模块主要完成对计价器状态的控制。5.3 计量模块计量模块完成计价、计时和计程功能。计价部分:行程在3公里内,而且等待累计时间小于2分钟,起步费为10元;3公里外以每公里按1.6元计费,等待累计时间超过2分钟按每分钟1.5元计费。计时部分:计算乘客的等待累计时间。计时器的量程为59分钟,满量程后自动归零。即时数据送入显示译码模块进行译码,最后送至以分为单位对应的数据管上显示。计程部分:计算乘客所行驶的公里数。计程器的量程为99千米, 满量程后自动归零。计程数据送入显示译码模块进行译码,最后送至以公里为单位对应的数据管上显示。5.4 译码显示模块译码显示模块完成计价、计时、计程数据显示该模块经过8选1选择器将计费数据(4位BCD码)、计时数据(2位BCD码)、计程数据(2位BCD码)动态显示输出。其中计费数据jifei4jifei1送入显示译码模块进行译码,最后送至以百元、十元、元、角为单位对应的数码管上显示,最大显示为999.9元;计时数据送入显示译码模块进行译码,最后送至以分为单位对应的数码管上显示,最大显示为59分;计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示,最大显示为99公里。其系统组成框图如图5-1所示。公里脉冲计费/复位控 制 器计费计时分频器计程显 示时钟信号等待信号图5-1出租车自动计价器的系统方框图6 软件调试及硬件仿真6.1 软件调试没有等候时间且单程行驶的程序仿真图如图6-1所示,由图可知,在20公里以内每行驶1公里收费1元,超过20公里每公里收费1.5元。图6-1 没有等候时间且单程行驶的程序仿真图20公里以内有等候时间的程序仿真图如图6-2所示,由图可知在20公里以内超过三公里每行驶1公里收费1元。当有等待时间时每等待1分钟收费1元。图6-2 20公里以内有等候时间的程序仿真图20公里以外有等候时间且单程行驶的程序仿真图如图6-3所示,20公里以外有等候时间且单程行驶时,每行驶1公里收费1.5元,当有停车等待时,每等待一分钟也收费1.5元。图6-3 20公里以外有等候时间且单程行驶的程序仿真图20公里以外有等候时间且不是单程行驶的程序仿真图如图6-4所示,由图可知20公里以外有等候时间且不是单程行驶时,每行驶1公里收费1元,当停车等待时每等待1分钟收费1元。图6-4 20公里以外有等候时间且不是单程行驶的程序仿真图6.2 硬件连接及调试本设计下载到芯片EP3C40Q240C8后的引脚锁定如图6-5所示:图6-5 引脚锁定图做好引脚锁定后,打开硬件箱的电源,数码管有正确的数字显示,连接硬件箱与计算机开始验证。操作运行实验结果完全符合设计要求。通过仿真验证表明,本文所设计的出租车计价器能够正常地显示行驶的里程数和乘客应付的费用及顾客等待的时间数,符合正常的出租车计价标准。7 结束语通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。并且这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。课设中运用了学过的EDA技术及应用,数字电路、模拟电路以及电子技术实验等知识,提高了我们对知识的综合运用能力,同时还增强了动手能力。在这次动手实践中,我不仅了解自己的不足,而且深刻的体会到合作的重要性,两个人共同探讨,可以使问题变得比预料的简单化,避免走歧路。参考文献1 吴继华,王诚.设计与验证VerilogHDLM.北京:人民邮电出版社.2006.082 潘松.VHDL实用教程M.成都:电子科技大学出版社.20033 张凯,林伟.VHDL实例剖析M.北京:国防工业出版社.20044 黄智伟.FPGA系统设计与应用M.北京;电子工业出版社,20055 孙延鹏,张芝贤,尹常永.VHDL与可编程逻辑器件应用M.北京:航空工业出版社.20066 卢毅,赖杰.VHDL与数字电路设计M.北京:科学出版社.20027 乔庐峰,王志功.VHDL数字电路设计教程 M.北京:电子工业出版社.2011.11附录library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity liu isport(clk1hz,mile:in std_logic; start,single:in std_logic; stop:in std_logic; min1,min2:out std_logic_vector(3 downto 0); km1,km2:out std_logic_vector(3 downto 0); price1,price2,price3,price4:out std_logic_vector(3 downto 0);end;architecture bhv of liu issignal start_r:std_logic;signal second:integer range 0 to 59;signal p1,p2,p3,p4:std_logic_vector(3 downto 0);signal k1,k2:std_logic_vector(3 downto 0);signal m1,m2:std_logic_vector(3 downto 0);signal en0,en1,f_wait,f:std_logic;beginmin1<=m1;min2<=m2;km1<=k1;km2<=k2;price1<=p1;price2<=p2;price3<=p3;price4<=p4;U1:process(clk1hz) begin if start='0' then f_wait<='0' m1<="0000" m2<="0000"elsif(clk1hz'event and clk1hz='1')thenif stop='1' then if second=59 then -等待时间的秒信号 second<=0; f_wait<='1' if m1="1001" then -分信号的计数器部分 m1<="0000" if m2="0101" then m2<="0000" else m2<=m2+'1' end if; else m1<=m1+'1' end if; ; else f_wait<='0' second<=second+1; end if; else f_wait<='0' end if; end if; end process;U2:process(clk1hz)begin if(clk1hz'event and clk1hz='1')then start_r<=start; -取消延时 end if;end process;f<=f_wait when stop='1' else -计费脉冲的产生 mile when en0='1' else '0'U3:process(start,mile) -里程数目的计数器 begin if start='0' then k1<="0000" k2<="0000" en0<='0' en1<='0' elsif(mile'event and mile='1')then if stop='0' then if k1="1001" then k1<="0000" if k2="1001" then k2<="0000" else k2<=k2+'1' end if; else k1<=k1+'1' end if; if k1="0011" then en0<='1' end if; if k2="0010" and k1="0000" and single='1' then en1<='1' end if; else k1<=k1; k2<=k2; end if; end if; end process;U4:process(start,f) -计费的进程 begin if start='0' then p1<="0000" p2<="0000" p3<="0000" p4<="0000" elsif start='1' and start_r='0' then -3公里的计费 p1<="0000" p2<="1000" p3<="0000" p4<="0000" elsif(f'event and f='1')then -3到20 公里的计费 if en1='0' then if p2="1001" then p2<="0000" if p3="1001" then p3<="0000" if p4="1001" then p4<="0000" else p4<=p4+'1' end if; else p3<=p3+'1' end if; else p2<=p2+'1' end if; else if(p1="0101" and p2="1000") or p2="1001" then -超过20公里的计费 if(p2="1001" and p1="0101")then p1<="0000" p2<="0001" elsif(p2="1001" and p1="0000") then p1<="0101" p2<="0000" elsif(p2="1000" and p1="0101")then p1<="0000" p2<="0000" end if; if p3="1001" then p3<="0000" if p4="1001" then p4<="0000" else p4<=p4+'1' end if; else p3<=p3+'1' end if; elsif p1="0000" then p1<="0101" p2<=p2+'1' else p1<="0000" p2<=p2+"0010" end if; end if; end if; end process;end bhv; 专心-专注-专业