您好,欢迎访问三七文档
南京理工大学EDA设计(II)实验报告作者:学号:学院(系):自动化学院专业:自动化标题出租车计费器指导老师:实验日期:2015年9月目录1绪论.............................................................12系统总体设计.....................................................12.1系统设计思想...................................................12.2系统功能概述...................................................12.3系统总体组成结构...............................................23系统各模块详细设计................................................23.1计时模块.......................................................23.2按键控制模块...................................................23.3动态显示模块...................................................33.4里程和车费计算模块.............................................43.5我的部分.......................................................44系统调试.........................................................54.1系统仿真.......................................................54.2系统实际验证...................................................54.3调试过程中遇到的问题与解决方法.................................55总结与心得体会...................................................6致谢................................................................6参考文献.........................................................71出租车计费器1绪论EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,发展于20世纪90年代。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。本次EDA设计使用MAX+plusII实验开发系统,学习并掌握VHDL硬件描述语言的基本语法以及设计方法和思想,将已学过的数字电子设计知识综合运用于电子系统的设计中,掌握运用VHDL设计电子系统的流程和方法,加强和培养自己对电子系统的设计能力。综合设计的任务是用一周的时间,在EDA软件MAX+plusII上用VHDL语言设计完成一个电子技术综合问题,小组成员分工,负责各个子模块的设计,最后将各个模块整合起来,连接整体电路,分配引脚,下载到实验班上进行测试。2系统总体设计2.1系统设计思想用VHDL语言设计出符合功能要求的的出租车计费器系统,完成设计后使用系统实验箱下载验证。2.2系统功能概述1、计费功能:计费标准为按行驶里程收费,起步价为11元,车行3公里后每公里1.4元,车停止时不计费;2、实现模拟功能:能模拟汽车启动、暂停及停止状态;3、实现显示功能:能在数码管上显示出公里数及总费用。22.3系统总体结构整个计费系统的结构如下图所示,其计时模块负责对实验板上的时钟信号进行分配,产生合适的计数脉冲,供里程计算模块和车费计算模块的技术。而显示模块则将前两者计算得到的结果显示在数码管上。开关控制模块则接受实验板上的开关信号,模拟出租车的起停。计时模块显示模块里程计算模块车费计算模块开关控制模块3系统各模块详细设计3.1计时模块计时模块的时钟源为试验箱的CP2时钟,频率为1024Hz,在VHDL中经过计数十分频得到模拟的出租车百米行驶计数时钟。其计数的逻辑比较简单,不再详细列出。3.2按键控制模块在按键控制模块中我们引入了两个拨码开关K1和K2,其中K1是启动和停止开关,K2是暂停开关,两个按键向上拨逻辑值均为1,向下拨逻辑值均为0。为了方便控制,我们引入了state这个两位的二进制变量,用它的值来标记出租车的不同状态,其控制逻辑如下:键值逻辑结果K1=1,K2=1出租车处在停止状态,但此次载客未结束,state=”00”K1=1,K2=0出租车处于载客运行计费状态,state=”11”3K1=0,K2任意出租车处于载客结束的停止状态,state=”01”或”10”(本设计里默认为01)按键控制模块程序如下:control:PROCESS(start,pause)beginif(start='0')thenstate=01;elsif(pause='1')thenstate=00;elsif(pause='0')thenstate=11;endif;endPROCESS;3.3动态显示模块由于此系统要用到实验板上的8个数码管,且每个数码管显示的数字都不相同,所以不能采用静态显示而必须使用动态显示,动态显示即依次向每位数码管同时送出字形码和相应的位选,位与位之间利用延时程序进行延时,当延时程序非常短时,由于发光管的余辉和人眼视觉暂留作用,此时我们的人眼就分辨不出位与位之间有延时存在(人眼视觉暂留时间为0.05-0.2秒,延时程序应当根据这个范围来调整),感觉各位数码管同时都在显示。此处用系统时钟1024Hz来扫描数码管,取得了不错的效果。该模块程序如下,后面tmp1为其它值时,各种情况与其值为0时相似,未有一一列出:PROCESS(clk)variabletmp1,tmp2:integerrange0to10;BEGINif(clk'eventandclk='1')thentmp1:=tmp1+1;if(tmp1=8)thentmp1:=0;endif;casetmp1iswhen0=sel=00000001;4tmp2:=CONV_INTEGER(fee_tenth);casetmp2iswhen0=data=11111100;when1=data=01100000;when2=data=11011010;when3=data=11110010;when4=data=01100110;when5=data=10110110;when6=data=10111110;when7=data=11100000;when8=data=11111110;when9=data=11110110;whenothers=null;endcase;3.4里程和车费计算模块在里程和车费计算模块中,只需要完成一个工作——计数。里程的计算与之前所做数字钟的计数没有什么本质区别,由于每个时钟上升沿只要在原里程的基础上加0.1,故计算的逻辑就是从低位(十分位)到高位(百位)层层判断,每次加“1”,满‘9’归零即可。而对于车费的计算,还需要对逻辑进行如下调整:1.由于里程数小于3公里的情况下,车费要保持11元不变,这一要求可以用if语句进行限制;2.车费的计算是每100公里1.4元,故在里程大于3公里的情况下每接受到计时模块时钟上升沿就要在原有车费基础上加1.4即可。3.5我的部分详细介绍在本次综合设计中,我负责的是动态显示模块,之前的基础实验中,我们已经做过类似的显示程序,我在自己编写的时候参照该模块进行了一定的调整。对每一位进行位选后分别显示前端传送过来的数据,每一位只要显示0到9,原本打算使用选择循环方法显示,但经尝试后出现了问题不能得到合理解决,故最终在与本组周珅宇同学商定后,由其整合为最终程序的分段式对每一位进行显示,随程序段较长,但不易出现逻辑错误。54系统调试4.1系统仿真我们将程序整合在一起,并未进行仿真校验,而是直接下载到实验箱上验证。4.2系统实际验证将程序整合完成以后,我们进行了编译与调试,多次修改完善,然后对照实验指导书进行管脚分配。在多次修改尝试后,最终在试验箱上成功完成了出租车计费器系统的相关要求,实现了计费功能、模拟功能和显示功能,即实现了开始时制定的系统设计要求。4.3调试过程中遇到的问题与解决方法4.3.1数码管显示问题在进行基础实验时我们发现数码管显示不能按照我们预先的设想,随后我们利用资料对实验箱的数码管进行了研究,发现基础实验中数码管采用的是静态显示,由于本系统中数码管各位需要显示不同的数字,最后我们选定了动态扫描显示的方法,问题得到了解决。4.3.2取模运算问题在系统设计中期,我们本准备采用公式计算的方法来得到车费,即将里程数的各位(mile_tenth,mile_unit,mile_decade,mile_hp)通过函数CON_INTEGER()从8位二进制数转化为整型数,然后对各位加权求和得到整型数表示的里程数,从而将其带入公式后,计算得到对应车费,再在用函数REM()分离出车费的各位,分别显示。然而在实际编程中我们发现,使用REM()函数需要添加头文件IEEE.NUMERIC_STD。在QUARTUSII编译环境下可以成功添加并编译,然而在MAX+PLUSII下却缺少这个头文件,多次尝试添加失败后,我们放弃了计算法,采用另外的方法来实现显示目的,即改为采用每次加1.4元的方法实现计费,最终取得了成功。64.3.3调试中的问题针对器件的引脚配置不能马虎,否则在下载到实验箱上时会出现显示位的错乱,在实际调试中我们便遇到了这样的问题,随后进行了分析纠正。5总结与心得体会本次实验我初次接触了VHDL语言,了解了其基本语法以及设计方法和思想。在经过两次基础实验的锻炼之后,我已经基本上熟悉了整个MAX+plusII实验开发系统,也能够对其进行简单的操作设计。在综合设计中,我主要是负责了动态扫面显示方面的设计工作,其原理与基础实验中的显示方法相同,故在理解原程序的基础上我对其进行了改进,并最终由周珅宇同学对其进行整合用于总的程序中去。经过本次实验,锻炼了我的操作能力和系统设计能力,对于课堂知识进行了再一次的巩固,同时接触到了新的编程语言,获益颇丰。当然,其中还有许多的不足之处,在今后的学习中依旧要注重予以改进。致谢这次EDA设计锻炼了我的动手实践能力,让我学到了很多,衷心感谢吴益飞老师的悉心指导,感谢同学的帮助,也感觉学院、学校给我提供了这样一个锻炼自我的机会!7参考文献[1]郑燕,赫建国.基于VHDL与QuartusII软件的可编程逻辑器件应用与开发(第二版).北京:国防工业出版社,2011.[2]谭会生,张昌凡.EDA技术及应用.西安:西安电子科技大学出版社,2001.
本文标题:出租车计费器EDA
链接地址:https://www.777doc.com/doc-2641110 .html