《EDA综合计时系统设计(共21页).doc》由会员分享,可在线阅读,更多相关《EDA综合计时系统设计(共21页).doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上江西理工大学应用科学学院SOPC/EDA综合课程设计报告设计题目: 综合计时系统设 计 者: 唐斌强学 号: 班 级: 电气092指导老师: 王忠锋完成时间: 2010年1月4日设计报告综合测试总评格式(10)内容(40)图标(10)答辩(20)平时(20)目 录1. 综合计时系统设计与分析1.1 系统设计要求设计一个综合性的计时系统,要求能实现年、月、日、时、分、秒及星期的计数等综合计时功能,同时将计时结果通过15个七段数码管显示,并且可通过两个设置键,对计时系统的有关参数进行调整。具体系统功能面板如图1.1所示。图1.1 系统功能面板1.2 系统设计方案1.2.1
2、 综合计时电路的设计根据系统的设计要求,综合计时电路可分为计秒电路、计分电路、计时电路、计星期电路、计日电路、计月电路、计年电路等7个子模块,这7个子模块必须都具有预置、计数和进位功能,设计思想如下: (1) 计秒电路:以直接输入或由分频器产生的秒脉冲作为计秒电路的计数时钟信号,待计数至60瞬间,进位,计分电路加1,而计秒电路则清零并重新计秒。(2) 计分电路、计时电路:其设计思想与计秒电路类似。(3) 计日电路:将计时电路产生的进位脉冲信号作为计日电路的计数时钟信号,通过系统辨认,确定本月总天数X(包括28、29、30、31四种情况),待计数至X1瞬间,进位,计月电路加1,而计日电路返回1重
3、新开始计数。(4) 计星期电路:将计时电路产生的进位脉冲信号作为计星期电路的计数时钟信号,待计数至7瞬间,计星期电路返回1重新开始计数。(5) 计月电路:将计日电路产生的进位脉冲信号作为计月电路的计数时钟信号,待计数至12瞬间,进位,计年电路加1,而计月电路返回1重新开始计数。(6) 计年电路:将计月电路产生的进位脉冲信号作为计年电路的计数时钟信号,待计数至100瞬间,计年电路返回0重新开始计数。(注:由于本系统的计年范围仅为20002099年,所以计年模块只对年份的后两位进行计数,年份的前两位始终保持为20。)下面介绍CNT60、CNT30计数模块的设计。图2.1 CNT60计数模块输入、输
4、出端口图CNT60计数模块是一个多用计时模块,它既可作为计秒电路调用,又可作为计分电路、计时电路调用。图2.1是其输入、输出端口图。其中,输入信号LD为置数控制信号,低电平有效;输入信号CLK为计数时钟信号;输入信号DATA为待预置数;输出信号NUM为计数结果;输出信号CO为计数溢出信号。图2.2 CNT30计数模块的输入、输出端口图1 CNT30计数模块是一个计日模块。由于该计数模块涉及到大小月及闰年问题,所以CNT30的计数范围并非固定变,而是存在128、129、130及131这四种情况。图2.2是其输入、输出端口图。其中输入信号LD为置数控制信号,低电平有效;输入信号CLK为计数时钟信号
5、;输入信号DATA为待预置数;输入信号YEAR为当前计时的年份数;输入信号MON为当前计时的月份数;输出信号NUM为计数结果;输出信号CO为计数溢出信号,输出信号MAX_DAYS为当前月的天数。2 (1)CNT60的主要VHDL程序段如下:3 IF(LD=0) THEN4 NUM=DATA;5 ELSIF CLKEVENT AND CLK=1THEN6 IF NUM= THEN7 NUM=;CO=1;8 ELSE9 NUM=NUM+1;CO=0;10 END IF;11 END IF; 12 分析:这段程序可用来被计秒、计分、计时电路调用。当置数控制模块低电平有效时,待预置数送入计数结果。此时
6、当计数时钟信号上升沿有效时,如果计数结果输出的是,代表此周期内计数到第60次(即若是计分电路,代表计数到第59分钟),将产生进位信号并且计数从0开始;若计数范围在058之间时,计数结果只在下次计数时钟到来时加1,并不产生进位信号。13 拓展:可以利用CNT60的理论设计出计年(CNT100)、计月(CNT12)、计星期(CNT7)的VHDL程序段,只需修改对应的最大计时数、复位值(复位值为1)以及对应的向量范围。14 (2)CNT30的主要VHDL程序段如下:15 IF(LD=0) THEN16 NUM=DAY;17 ELSIF CLKEVENT AND CLK=1 THEN18 MAX_DA
7、YS=TOTAL_DAYS;19 IF NUM=TOTAL_DAYS THEN20 NUM=00001;CO=1;21 ELSE22 NUM=NUM+1;CO=0;23 END IF;24 END IF;25 分析:这段程序用来实现计日模块。当置数控制模块低电平有效时,待预置数送入计数结果。此时当计数时钟信号上升沿有效时,将TOTAL_DAYS的信号送入MAX_DAYS(在结构体中定义SIGNAL TOTAL_DAYS:STD_LOGIC_VECTOR(4 DOWNTO 0)),如果TOTAL_DAYS的计数结果和NUM的结果一致,表明已到当前月份的最后一天,则产生进位信号,并从1开始计数;否
8、则,计数信号加1,不会产生进位信号。1.2.2 显示控制电路XSKZQ的设计本设计显示需要使用的是15个七段显示数码管。在计时结果显示电路中,七段数码管显示部分是一个不容忽视的环节,如若处理不得当,可能引起系统功率过大,产生散热问题,严重时甚至会导致系统的烧毁。为了解决好以上问题,下面就对七段数码管显示电路做简要的分析和介绍。通常点亮一个LED所需的电流是550 mA,通电的电流愈大,LED的亮度愈高,相对的也会使其寿命缩短。一般以10 mA的导通电流来估算它所必须串联的阻值,其计算方式参考图2.3所示。图 2.3 单个LED的串接电阻计算方式七段显示器可分为共阳极、共阴极型两种,它们都可以等
9、效成8个LED的连接电路,其中图2.4就是共阴极型七段显示器的等效电路和每节LED的定义位置图。bcgfeddpdpgfedcbaa图2.4 共阴极型七段显示器的LED位置定义和等效电路由于本设计的目标是设计一个综合的计时系统,要求同时显示年(在这里年份的前两位固定为20)、月、日、时、分、秒及星期共15个数字,依照图2-4的计算方式,同时点亮一个七段显示器的8节LED,结果将需要电流为10mA8=80mA。若再进一步同时点亮15个七段显示器,这时所需的电流为80mA15=1200 mA=1.2A。这对于一般的电子电路来说,是一个不小的电源。不但CPLD和FPGA芯片无法负载这样的电流驱动,而
10、且这个功率也太大,散热也是问题,电路容易被烧毁。因此显示电路部分不能直接实现各个计时结果同时显示,只能另外通过一个扫描电路对计时输出进行逐个扫描,使七段数码管以个位一组,逐个进行显示,只要每个扫描频率不超过人的眼睛的视觉暂留频率24HZ,就可以达到点亮两个七段数码管,却能享有所有七段数码管同时显示的视觉效果,而且显示也不致闪烁抖动,从而间接实现计时结果同时显示。根据以上设计思想,本系统的数据显示电路可分为两个子模块:(1) 显示控制电路XSKZQ:负责完成数据选择扫描及数码管位选择信号的产生,数据扫描选择输出,对于选择的数据进行BCD码转换等功能;(2) 显示译码电路YMQ:将用于显示的BCD
11、码数据进行译码。XSKZQ的输入、输出端口如图2.5所示。图2.5 XSKZQ计数模块的输入、输出端口图YMQ的输入、输出端口如图2.6所示。图2.6 YMQ显示译码模块的输入、输出端口图其中,输入信号CLK_SCAN为用于产生数据选择扫描等控制信号的时钟信号;输入信号SEC、MIN、HOUR、DAY、MON、YEAR、WEEK分别来自计秒电路、计分电路、计时电路、计日电路、计月电路、计年电路、计星期电路等计时电路的计时结果输出端;输出信号BCD为被选择进行显示的计秒、计分、计时、计日、计月、计年、计星期电路等计时电路的计时结果的8位BCD码,输出端SELOUT经外部的3-8译码电路译码后用于
12、选择对应计时结果显示数码管的公共端COM。图2.7为15个共阴极型七段数码管驱动接线图。图2.7 15个共阴极型七段数码管驱动接线图显示控制电路XSKZQ的VHDL部分程序: IF CLK_SCANEVENT AND CLK_SCAN=1 THEN IF CNT=111 THEN CNT=000; ELSE CNT=CNT+1; END IF; END IF; SELOUT TEMP TEMP TEMP TEMP TEMP TEMP TEMP TEMP NULL; END CASE; CASE TEMP IS WHEN 0 = BCD BCD BCD BCD BCD BCD BCD BCD B
13、CD TEMP=CONV_INTEGER(HOUR)表明扫描小时信号;第二个CASE语句用于判断BCD输出信号应在数码管显示电路中所显示的数字。显示控制电路YMQ的VHDL部分程序:HIGHT=DATA(7 DOWNTO 4); LOWS HIGHT_SEG HIGHT_SEG HIGHT_SEG HIGHT_SEG HIGHT_SEG HIGHT_SEG HIGHT_SEG HIGHT_SEG HIGHT_SEG HIGHT_SEG HIGHT_SEG LOW_SEG LOW_SEG = ; END CASE; END PROCESS;END ARCHITECTURE BEHAV;分析:将B
14、CD的高4位赋值给HIGHT,低4位赋值给LOWS,分别对HIGHT、LOWS译码。1.2.3 调整控制电路TZKZQ的设计对于系统中的时间调整电路,拟通过模式和调整两个外部按键完成。模式按键负责切换正常时间计数模式和时间调整模式,调整模式切换顺序如图2.8所示。调整键负责在时间调整模式之下,对当前模式的计时结果进行调整。图2.8 调整模式切换顺序在模式选择的过程中,被选择到的调整模式所对应的发光二极管会被点亮。例如,按动模式键,选定“2010年5月7日09:09:09 星期5”的分钟数“09”,对应的调分模式发光二极管将会被点亮,剩下的6个调整模式发光二极管不被点亮。当处于正常模式时,7个发
15、光二极管均不被点亮。被调整的计时结果之间相互独立。调整过程中,只有被选择到的计数结果才会被接收调整,例如上述的“09”分钟数部分,它可能会有的调整范围为059,其余的数字将固定显示不动。TZKZQ模块是负责各个模块之间的相互切换以及对被选中的模式进行时间调整的。图2.9是其输入、输出端口图。图2.9 TZKZQ计数模块的输入、输出端口图其中输入信号KEY1.0为键盘信号,当KEY=“01”时,表示按下了设置键,系统切换到下一个状态,当KEY=“10”时表示按下了调整键,系统进行自加;输入信号CLK_KEY为按键扫描时钟信号;输入信号YEAR_CUR、MON_CUR、DAY_CUR、HOUR_C
16、UR、MIN_CUR、SEC_CUR、WEEK_CUR、MAX_DAYS均为来自各自计时电路输出的当前计时结果的反馈值;输入信号YEAR_EN、MON_EN、MON_EN、HOUR_EN、MIN_EN、SEC_EN、WEEK_EN均为对应的计时电路的一部并行置数使能信号;输出信号YEAR、MON、DAY、HOUR、MIN、SEC、WEEK则为调整后的对应时间需预置的数。该模块的VHDL程序主要通过一个状态机来实现12。调整控制电路TZKZQ的VHDL部分程序:TYPE STATETYPE IS(NORMAL,SEC_SET,MIN_SET,HOUR_SET,DAY_SET,MON_SET,YE
17、AR_SET,WEEK_SET); SIGNAL MODE:STATETYPE; IF CLK_KEYEVENT AND CLK_KEY=1 THEN IF KEY=01 THEN SEC_EN=1;MIN_EN=1;HOUR_EN=1; DAY_EN=1;MON_EN=1;YEAR_EN=1; WEEK_EN MODE=SEC_SET;SEC=SEC_CUR;SEC_EN MODE=MIN_SET;MIN=MIN_CUR;SEC_EN=1;MIN_EN MODESEC_EN=0; IF SEC= THEN SEC=; ELSE SECDAY_EN=0; IF DAY=MAX_DAYS THE
18、N DAY=00001; ELSE DAYWEEK_EN=0; IF WEEK=111 THEN WEEK=001; ELSE WEEKNULL; END CASE; END IF; END IF;分析:先利用状态机的概念生成状态变量MODEL,当按键扫描信号CLK_KEY上升沿到来时,若KEY =01,则表明按下了设置键,使系统切换到下一个状态。语句WHEN NORMAL = MODE = SEC_SET;SEC=SEC_CUR;SEC_ENMODE=MIN_SET;MIN=MIN_CUR;SEC_EN=1;MIN_EN SEC_EN=0表示异步并行置位使能有效。当SEC信号输出时,表明秒计
19、数到59,则返回0重新计数,否则继续计数;以下情况依次类推。1.2.4 综合计时系统ZHJSQ的设计图2.9 ZHJSQ综合计时系统的输入、输出端口图分析:对整个系统进行封装,外接输入口KEY1.0接两个控制按钮,CLK_SEC接秒脉冲信号,CLK_TAKZ接适当频率的脉冲信号用于扫描按键的情况,CLK_SCAN接大于人眼的频率的脉冲信号;外接输出口接SELOUT2.0用于选中个数码管的COM端,BCD7.0经译码输出接个数码管,高低位接线如图2.6所示。1.3系统单元仿真与分析各部分模块完成后,用QUARTUS 对程序进行编译仿真,以得到相应的仿真波形。1.3.1综合计时电路的仿真CNT60
20、.VHD模块仿真波形如下:图3.1 CNT60.VHD模块仿真图从图3.1可以看出,CNT60.VHD实现了从0到59的循环计数,每实现一次59到0的计数动作,计数模块输出一个进位信号。当LD端有低电平输入时,说明置数信号(LD)有效,模块将预置数(DATA)56送入计数结果(NUM)中去,计数模块从56开始重新计数。当计数结果(NUM)从零开始计数时,产生一个进位信号(CO)。CNT30.VHD的仿真波形如下:图3.2 CNT30模块仿真图从图3.2可以看出,该模块首先要读取当前年月(YEAR和MON),再对该月的最大天数(MAX_DAYS)进行判断并将结果向外输出。在正常计数过程中,模块实
21、现了从0到最大天数(MAX_DAYS)的循环计数,每实现一次最大天数(MAX_DAYS)到0的计数动作,计数模块输出一个进位信号。当LD端有低电平输入时,说明置数信号(LD)有效,模块将预置数(DAY)20送入计数结果(NUM)中去,计数模块从20开始重新计数。1.3.2 显示控制电路的仿真XSKZQ.VHD的仿真波形如下:图3.3 XSKZQ.VHD的仿真图从图3.3可以看出,当SELOUT分别等于0,1,2,3,4,5,6,7时,分别选择对应的输入数据输出。SELOUT等于0时,BCD显示秒输出,为07秒;SELOUT等于1时,BCD显示分输出,为10分;以此类推。时间显示为 2020年1
22、0月26日 02:10:07 星期六,达到了设计要求。YMQ.VHD的仿真波形如下:图3.4 XSKZQ.VHD的仿真图从图3.4可以看出,当DATA输入 ,HIGHT_SEG输出 (数码管显示2),LOW_SEG输出 (数码管显示9),达到了设计要求。1.3.3调整控制电路的仿真TZKZQ.VHD的仿真波形如下:图3.5 TZKZQ.VHD仿真图从图3.5可以看出,键盘产生“01”信号时,CLK_KEY有八次上升沿,调整模式依次经过了正常、调秒、调分、调时、调日、调月、调年、调星期再回到正常这8种模式的循环,即MODE依次从0到7,再从7回到0的循环。在按键过程中,根据按键持续时间,相应地被
23、调整模式的异步并行置位使能置“0”,同时通过一个非门点亮该调整模式所对应的发光二极管,作为该调整模式的指示信号。键盘产生“10”信号时,调整模式切换到了调分模式,然后又根据CLK_KEY的上升沿次数决定增加的值,实现了在调分模式下对当前分的值进行调整(从31调到39)。 1.3.3综合计时系统电路的仿真ZHJSQ.VHD的仿真波形如下:图3.6 ZHJSQ.VHD仿真图(1)从图3.6可知,综合计时系统经过了初始化过程,并显示输出,显示时间为 2000年01月01日 00:00:00 星期一,达到了设计要求。图3.7 ZHJSQ.VHD仿真图(2)从图3.7可知,综合计时系统经过了秒进位并显示
24、输出的过程,BCD从1秒跳变到2秒,并显示输出,达到了设计要求。2. 改进方法由于本系统采用的是利用秒计时器(CNT60)的进位来作为分计时器(CNT60)的脉冲信号,利用分计时器(CNT60)的进位来作为时计时器(CNT24)的脉冲信号,以此类推,这样的设计虽然减少了器件的使用,却会导致误差呈几何倍数的增加。可以考虑对于系统的各种控制时钟信号,通过分频电路对一个给定的合适频率信号进行分频来产生,这样就能适当的减少误差的产生。3. 收获与体会第一眼看到题目-综合计时系统的设计,由于以前尝试国用单片机控制数码管,以及其他些小型系统,再加上本学期刚技术EDA的课程,对EDA还有比较大的印象,觉得本
25、次课程设计可以利用自己所学的知识全部完成。可真正开始做这个课题时,发现不是和想象中那样简单,由于以前尝试的都是小型系统,从没有尝试过制作个单独的系统,而且EDA的编程思想还是与C、汇编的编程方式存在很多的不同,从一开始我就用着错误的思想去做这个事,结果是显当然,毫无结果。终于真正的开始重视本次课程设计,参考过王老师的课程设计指导书后,我采用自上至下的编程思想,将本个系统大概分了几块,可发现总存在很多的瑕疵,终于,我开始尝试查找资料,与组里同学讨论,在了解了别人的编程思想后,我们发现资料不是绝对的、完整的,我们开始在各个资料之间挑出精华,再加上自己的知识来完善该个课程设计。经过几天的辛苦调试,经
26、过仿真终于能达到们所需的设计要求,虽然最终的设计还存在些小瑕疵.但毕竟是第一次做,我们还是比较满意的。本次设计让我们那发现了自己很多的不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固。总的来说,这次设计的综合计时系统还是比较成功的,虽然这次设计的综合计时系统不是很完美,在设计中遇到了很多的难题,最后在老师的辛勤的指导下,终于迎刃而解.还是觉得不错的,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而其锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。最后,对给过我帮助的所有同学和各位知道老师再次表示衷心的感谢!参考文
27、献1崔建明主编,电工电子EDA仿真技术M.北京:高等教育出版社,2004. 2李衍编著,EDA技术入门与提高王行M.西安:西安电子科技大学出版社,2005. 3侯继红, 李向东主编,EDA实用技术教程M.北京:中国电力出版社,2004. 4沈明山编著,EDA技术及可编程器件应用实训M. 北京:科学出版社,2004.5李国洪,沈明山.可编程器件EDA技术与实践M.北京:机械工业出版社,2004.6黄任编著,VHDL入门解惑经典实例经验总结M.北京:北京航空航天大学出版社,2005.7潘松,黄继业编著,EDA技术实用教程M.北京:科学出版社,2006.8王伟编著,VERILOG HDL 程序设计与应用M.北京:人民邮电出版社,2005.9谭会生,张昌凡编著,EDA技术及应用M.西安:西安电子科技大学出版社,2001.10蒋小燕,俞伟钧,张立臣主编,EDA技术及VHDLM.南京:东南大学出版社,2008.11北京理工大学ASIC研究所。VHDL语言100例详解M.北京:清华大学出版社,1999.12付慧生.复杂可编程逻辑器件与应用设计M. 江苏:中国矿业大学出版社 2003.专心-专注-专业