《毕业设计(论文)基于CPLD秒表计时器设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于CPLD秒表计时器设计.doc(32页珍藏版)》请在三一办公上搜索。
1、 设计题目: 基于CPLD秒表计时器设计 院 系: 一系 专 业: 电子科学与技术 班 级: 0 3 0 6 姓 名: 指导老师: 华中科技大学武昌分校2006年12月18日毕业设计(论文)任务书学生姓名 朱 林 志 专业班级 电子科学与技术系 指导教师 乐 雄 军 工作单位 武汉理工大学 设计(论文)题目: 基于CPLD秒表计时器设计 设计(论文)主要内容:1.学习LPLD语言、实施原理。2.设计数字电路、数码显示电路。 3.利用实验箱编制并调试出程序。要求完成的主要任务:1. 设计精度为1的秒表数字电路。 2. 设计可调时间的中断装置、数字调节; 3. 设计并调试电路。主要参考文献:1.廖
2、裕评.CPLD数字电路设计.清华大学出版社,2001年10月.2.丁镇生. CPLD原理及应用. 电子工业出版社, 2003年1月. 3. 单片机原理及其应用方面的资料 4电路设计方面的资料。指导教师签名 系 主 任签名 院长签名(章)_ 开题报告1.设计目的和意义本次设计目的主要分为以下几点:1.进一步熟练掌握汇编语言程序设计方法;2.熟悉秒表的设计思路;3.熟悉闹铃基本的原理及利用汇编语言设计的思路 4.熟悉时分调整及秒表/时钟共功能转化的设计思路;5.熟悉产品开发过程,增强实际动手能力。计时器在许多领域中均得到普遍应用,诸如在体育比赛、公共汽车到站时间统计中需进行计时和统计。现今的计时器
3、通常只能通过启/停按键实现断点计时的功能,即通过启/停按键来记录一段时间。这种计时器查看的时间只能为计时结束时刻。实际的应用中往往需要在不影响正常计时的基础上,能查看记录过程中的某些点的时间,即中途计时,如记录长跑运动员跑每圈所用时间,以便了解其各阶段的情况。本文即针对此问题,设计了一种能通过按键方式查看记录过程中任一时刻值的计时器。这种计时器在查看中间值时不会影响整个记录过程,并且能把相应数据送入存储模块及显示模块,以便查看。整个系统的设计借助于VHDL和数字逻辑电路,在EDA设计工具MaxplusII下进行仿真,得到了良好的结果。由于采用模块化的设计思想,使设计变得简单、方便、灵活性强。2
4、.基本内容和技术方案根据计时器的功能特点,具体实现时可划分为6个子模块:键输入模块,时钟分频模块,控制模块,秒表计时模块,计时存储模块和显示模块。各模块的功能独立,可扩充性强,具有再次开发的潜力 。模块设计:键输入模块:计时器的输入控制为按键方式,由于手动按键,会产生开关簧片反弹引起的电平抖动现象,为保证系统能捕捉到输出脉冲,在每一个开关后面安排一个消抖和同步电路,以并保证每按一键,只形成一个宽度为系统时钟周期的脉冲。时钟分频模块:时钟分频模块的功能是将频率为1000Hz的外部时钟信号clk进行分频,从而产生用来消除抖动的25Hz的时钟信号clk1和用于计时器内部定时计数的100Hz的时钟信号
5、clk0。由于计时器系统使用的时钟信号clk1和时钟信号clk0的有效脉冲宽度均为1ms,则需对分频产生的信号进行处理 。本系统将4分频产生的信号clk1_tmp与10分频产生的信号clk0_tmp相与,来得到有效脉冲宽度为1ms的25Hz时钟信号clk1。控制模块:控制模块的功能是用来控制计时模块的工作。当系统电源复位信号sysreset或内部复位信号reset0有效时,控制模块的输出enable信号无效;当reset0和sysreset都无效,且on/off 0有效时,enable信号有效,直到下一次on/off 0有效时enable才变成无效。(reseto 、on/off0为去抖后的信
6、号)秒表计时模块:秒表计时模块用来实现秒表内部定时计数功能。该模块受复位信号reset0、使能信号enable和时钟信号clk0的控制。在使能信号enable有效时,计时模块开始计时,并产生相应的计时输出和进位信号。模块内部采用三进制、四进制、十进制和六进制计数器实现时、分、秒的计时,最长可记录24小时。时间存储模块:时间存储模块的作用是对计时数据进行存储。当en键未按下时,系统将计时模块产生的计时值送入存储模块进行锁存同时送给显示模块进行显示;当en键按下时,存储模块则不锁存计时值,而保留按键时刻的时间并送给显示模块,实现中途计时的功能。当en按键复位时,存储模块再一次重复前面的过程,实现对
7、下一中途时刻进行计时。显示译码模块:显示模块用来显示计时模块输出的即时计时和中途计时结果。为了降低功耗,采用循环点亮LED七段显示数码管的方法来显示计时输出,即用choose(7 downto 0)信号选择位显示,segment(6 downto 0)信号用以确定相应位上显示的数据和段。对于计时位选择电路,由于其输出端口的计时数据q的位数既有2位的、3位的还有4位的,而七段显示译码电路的输入端口接收四位宽度数据,因此在计时位选择电路中还需将计时数据转化为4位宽度的数据。3.进度安排上学期第11-16周,完成开题报告;上学期第17-22周,进行毕业设计; 下学期第1-2周,进行毕业设计; 下学期
8、第3周, 论文格式审查; 下学期第4-5周,撰写论文; 下学期第67周,答辩。4.指导老师审查意见摘 要现今的计时器通常只能通过启/停按键实现断点计时的功能,即通过启/停按键来记录一段时间。这种计时器查看的时间只能为计时结束时刻。实际的应用中往往需要在不影响正常计时的基础上,能查看记录过程中的某些点的时间。本论文即针对此问题,设计了一种能通过按键方式查看记录过程中任一时刻值的计时器。这种计时器在查看中间值时不会影响整个记录过程,并且能把相应数据送入存储模块及显示模块,以便查看。关键词:CPLD;秒表计时;MaxplusII;仿真;功能模块。Abstract I Calculagraph in
9、the nowadays can only generally by opening/ the function stopping a button realizing breaking point timing, namely by opening/ a period of time coming to take notes stopping a button. The time that this calculagraph checks can only be to reckon by time ending moment. Sometimes need in actual applica
10、tion on not affecting the time regular basis , can check the time recording some in process. The thesis is specifically for this problem , the way having designed that one kind can pass a button checks value calculagraph recording any process middle moment. This calculagraph can not affect entire pr
11、ecis writer process when checking centre value , can send corresponding data in memory module and the display module moreover, to check. Key words: CPLD; Manual time-keeping; MaxplusII; Function module目 录 封面I任务书II开题报告 III摘要VABSTRACTVI绪论8第一章 计时器的总体设计911 计时器总体设计结构912 系统设计方案913 总体设计及其工作原理1014 主要功能1315
12、本章小结14第二章 硬件设计1521 芯片设计1522 主体功能设计2423 详细功能及状态2524 参考模块设计 26 25 设计提示27结论30致谢31参考文献32绪 论 本章首先论述一下计时器的设计基本原理和实际方案,然后论述一下研究计时器的目的和意义。本课题的内容是基于CPLD的秒表计时器的设计。现今的计时器通常只能通过启/停按键实现断点计时的功能,即通过启/停按键来记录一段时间。这种计时器查看的时间只能为计时结束时刻。实际的应用中往往需要在不影响正常计时的基础上,能查看记录过程中的某些点的时间,本文针对此问题,设计了一种能通过按键方式查看记录过程中任一时刻值的计时器。这种计时器在查看
13、中间值时不会影响整个记录过程,并且能把相应数据送入存储模块及显示模块,以便查看。整个系统的设计借助于VHDL和数字逻辑电路,在EDA设计工具MaxplusII下进行仿真,得到了良好的结果。由于采用模块化的设计思想,使设计变得简单、方便、灵活性强。另外在单一的显示秒表功能基础上进行了功能扩展,让计时器可以实现:时间显示,跑表,校时,闹钟四大功能。第一章 计时器的总体设计11 计时器总体设计结构 设计原理(工作原理)如图1所示,为计时器的整体结构框图。其中Sysreset为电源复位信号,实现系统的掉电复位,在计时器开启时用到。Reset可对每次操作进行数值清零复位,为计时做好准备。clk为系统时钟
14、信号。on/off为计时的启/停控制信号,计时开始时只需按下该控制信号。这时,通过输出线choose(7 downto 0)来选择指定的一位LED七段数码显示管,并通过输出线segment(6 downto 0)来点亮指定位上的某一段。其中,choose(7 downto 0) 以125Hz的频率使8个LED数码管按次序依次点亮,得到一个无闪烁的稳定的计时输出,计时精度为0.01秒。计时完毕,按下on/off控制信号,终止计时操作。该计时器最长记录时间为24小时。当进行中途计时时,可持续按住en键,此时内部时钟不停,显示按下en键时刻的时间,松手后,即跳变回当前时间,不影响记录过程,可以得到分
15、段计时结果。12 系统设计方案根据计时器的功能特点,具体实现时可划分为6个子模块:键输入模块,时钟分频模块,控制模块,秒表计时模块,计时存储模块和显示模块。各模块的功能独立,可扩充性强,具有再次开发的潜力 。各模块之间的关系如图2所示。13 总体设计及其工作原理131 模块设计(1)键输入模块计时器的输入控制为按键方式,由于手动按键,会产生开关簧片反弹引起的电平抖动现象,为保证系统能捕捉到输出脉冲,在每一个开关后面安排一个消抖和同步电路,以并保证每按一键,只形成一个宽度为系统时钟周期的脉冲。图3即为采用兼具消抖和同步功能的电路,它能产生与系统时钟周期相同宽度的1ms时钟脉冲。(2)时钟分频模块
16、时钟分频模块的功能是将频率为1000Hz的外部时钟信号clk进行分频,从而产生用来消除抖动的25Hz的时钟信号clk1和用于计时器内部定时计数的100Hz的时钟信号clk0。由于计时器系统使用的时钟信号clk1和时钟信号clk0的有效脉冲宽度均为1ms,则需对分频产生的信号进行处理 。本系统将4分频产生的信号clk1_tmp与10分频产生的信号clk0_tmp相与,来得到有效脉冲宽度为1ms的25Hz时钟信号clk1。(3)控制模块控制模块的功能是用来控制计时模块的工作。当系统电源复位信号sysreset或内部复位信号reset0有效时,控制模块的输出enable信号无效;当reset0和sy
17、sreset都无效,且on/off 0有效时,enable信号有效,直到下一次on/off 0有效时enable才变成无效。(reseto 、on/off0为去抖后的信号)在此,采用了一个乒乓信号,该信号在启停信号on/off 0有效时就进行一次反相操作,然后以这个信号作为选通信号,从而得到计数允许信号enable。(4)秒表计时模块秒表计时模块用来实现秒表内部定时计数功能。如图4所示,该模块受复位信号reset0、使能信号enable和时钟信号clk0的控制。在使能信号enable有效时,计时模块开始计时,并产生相应的计时输出和进位信号。模块内部采用三进制、四进制、十进制和六进制计数器实现时
18、、分、秒的计时,最长可记录24小时。(5)时间存储模块时间存储模块的作用是对计时数据进行存储。当en键未按下时,系统将计时模块产生的计时值送入存储模块进行锁存同时送给显示模块进行显示;当en键按下时,存储模块则不锁存计时值,而保留按键时刻的时间并送给显示模块,实现中途计时的功能。当en按键复位时,存储模块再一次重复前面的过程,实现对下一中途时刻进行计时。(6)显示译码模块显示模块用来显示计时模块输出的即时计时和中途计时结果。为了降低功耗,采用循环点亮LED七段显示数码管的方法来显示计时输出,即用choose(7 downto 0)信号选择位显示,segment(6 downto 0)信号用以确
19、定相应位上显示的数据和段。如图所示,显示模块由四个部分构成:八进制计数器count8、计时位选择电路、七段显示译码电路和显示位选择译码电路。其中显示位选择译码电路是根据八进制计数count8的计数输出信号sel,产生用来选通一个LED七段显示数码管的choose信号。计时位选择电路则根据八进制计数器输出信号sel,选择对应计时显示位的计时数据,确定LED七段显示数码管的segment信号。对于计时位选择电路,由于其输出端口的计时数据q的位数既有2位的、3位的还有4位的,而七段显示译码电路的输入端口接收四位宽度数据,因此在计时位选择电路中还需将计时数据转化为4位宽度的数据。14 主要功能本秒表计
20、时器用于体育竞赛及各种要求有较精确时的各领域。此计时器是用一块专用的芯片,用VHDL语言描述的。它除开关、时钟和显示功能以外,它还包括1/100s计时器所有的控制和定时功能,其体积小,携带方便。计时器的设计功能:(1) 精度应大于1/100s(2) 计时器的最长计时时间为1小时 在一般的短时间计时应用中,1小时应该足够了。为此需要一个6位显示器,显示最长时间为59分59.99秒。(3) 设置复位和启/停开关 复位开关用来使计时器清0,并作好清0准备。启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。复位开关可以在任何情况下使用,即使
21、在计时过程中,只要按一下复位开关,计时进程应立即终止,并对计时器清零。15 本章小结本设计从总体要求出发,采用自顶向下逐步细化的方法,将系统模块化,使得系统具有很强的扩充性,并且在实现设计的基础上,采用maxplus的仿真环境得到理想的仿真效果。本设计完成的中途计时功能,实现了在许多特定场合进行时间追踪的功能,在社会生活中具有广泛的应用价值。第二章 硬件设计21 芯片设计各模块程序及生成的符号文件如下:键输入模块(keyin模块),时钟分频模块(clkgen模块),控制模块(ctrl子模块)和秒表计时模块(cntblk模块),211 键输入模块(keyin模块)该模块的描述是为了产生单个复位脉
22、冲res和启停脉冲stst.整个功能模块用两个进程语句描述。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity keyin isport(reset,start_stop,clk :in std_logic;res,stst :out std_logic);end entity;architecture a of keyin issignal res0,res1,stst0,stst1 :std_logic;beginprocess(clk)beginif(clkevent and cl
23、k=0)thenres1=res0;res0=reset;stst1=stst0;stst0=start_stop;end if;end process;process(res0,res1,stst0,stst1)beginres=clk and res0 and (not res1);stst=clk and stst0 and (not stst1);end process;end a;212 时钟分频模块(clkgen模块)该模块的功能是产生100Hz的计时允许信号cntclk和25Hz的宽度为1ms的键输入时钟信号keycek.LIBRARY IEEE;USE IEEE.STD_LOG
24、IC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 IS PORT (reset,en,clk:IN STD_LOGIC; carry:OUT STD_LOGIC; q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END CNT10;ARCHITECTURE rtl OF cnt10 IS SIGNAL qs :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ca :STD_LOGIC;BEGIN PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)TH
25、EN IF(reset=1)THEN qs=0000; ELSIF(en=1) THEN IF(qs=1001) THEN qs= 0000; ca=0; ELSIF(qs=1000) THEN qs= qs+1; ca=1; ELSELIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt4 IS PORT (reset,en,clk:IN STD_LOGIC; carry :OUT STD_LOGIC; q :OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END
26、 CNT4;ARCHITECTURE rtl OF cnt4 IS SIGNAL qs :STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL ca :STD_LOGIC;BEGIN PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN IF(reset=1)THEN qs=00; ELSIF (EN=1)THEN IF(qs=11) THEN qs= 00; ca=0; ELSIF(qs=10) THEN qs= qs+1; ca=1; ELSE qs=qs+1; ca=0; END IF; END IF; END IF; END P
27、ROCESS; PROCESS(ca) BEGIN q=qs; carry=ca AND en; END PROCESS; END rtl;213 控制模块(ctrl子模块)该模块的功能是产生计时计数模块的计数允许信号cntenlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity ctrl isport(sysres,res,stst,cntclk:in std_ulogic;centen:out std_ulogic);end ctrl;architecture rtl of ctrl iss
28、ignal enb1:std_ulogic;beginprocess(stst,sysres,res)beginif(sysres=1 or res=1) thenenb1=0;elsif(ststevent and stst=1) thenenb1=not enb1;end if;end process;centen=enb1 and cntclk;end rtl;214 秒表计时模块(cntblk模块)该模块的功能是实现计时计数,它由四个十进制计数器和两个六进制计数器串结而成。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOG
29、IC_UNSIGNED.ALL;ENTITY cnt10 IS PORT (reset,en,clk:IN STD_LOGIC; carry:OUT STD_LOGIC; q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END CNT10;ARCHITECTURE rtl OF cnt10 IS SIGNAL qs :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ca :STD_LOGIC;BEGIN PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN IF(reset=1)THEN qs=0000;
30、ELSIF(en=1) THEN IF(qs=1001) THEN qs= 0000; ca=0; ELSIF(qs=1000) THEN qs= qs+1; ca=1; ELSE qs=qs+1; ca=0; END IF; END IF; END IF; END PROCESS; PROCESS(ca,en) BEGIN q=qs; carry=ca AND en; END PROCESS; END rtl; LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt6 IS POR
31、T (reset,en,clk:IN STD_LOGIC; carry :OUT STD_LOGIC; q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END CNT6;ARCHITECTURE rtl OF cnt6 IS SIGNAL qs :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ca :STD_LOGIC;BEGIN PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN IF(reset=1)THEN qs=0000; ELSIF(en=1)THEN IF(qs=0101) THEN qs=
32、 0000; ca=0; ELSIF(qs=0100) THEN qs= qs+1; ca=1; ELSE qs=qs+1; ca=0; END IF; END IF; END IF; END PROCESS; PROCESS(ca,en) BEGIN q=qs; carry分Key2-秒清0Key2-24/12小时切换Key2-年Key2-月Key2-日Key2-星期Key2-调分-闹钟开关-整点提示开关-调小时调节方式同上。按Key3(ModeKey)回到时间显示模式。24参考模块设计241 按键接口模块功能:1)消除按键的抖动,输出平稳的电平2)跟据不同模块的需要输出不同宽度的电平。如:
33、输入到跑表的按键电平宽度应与状态机所用时钟的宽度相同。在设定时间和闹钟时,长按Key3需要输出快速调节脉冲。242 分频模块:由输入的时钟得到需要的各种基准频率,详细讨论见设计提示。243 模式切换模块:通过按键切换当前模式及设置选择。输入:ModeKey,SetSelKey输出:当前显示模式Mode,设置对像选择SetSel注意一点的是:当Mode变化时,SetSel应自动清0。244 计时/校时模块根据Mode、SetSel的不同,对各时间部分进行计数及设置输入:1Hz脉冲,Mode,SetSel,设置脉冲等输出:秒、分、小时、日、月、年和星期,并且小时需要24/12小时制两种输出245
34、设定闹钟模块: 输入:Mode,SetSel,设置脉冲、当前时间等输出:所定时间,小时也需要24/12小时制两种输出246 秒表模块: 输入:Mode,StartPauseKey,HoldResetKey输出:当前计时,Holding状态所保持的时间247 闹钟控制及波形产生模块到了设定时间,输出闹铃波形至蜂鸣器闹铃:1秒四个节拍:嘀-嘀-(-表示无声,长度1/8秒)声音频率:1kHz左右整点提示音:四低一高,低音500Hz左右,高音1kHz左右,59分钟最后十秒声音为:低低低低高,(表示无声,长度1秒)248 显示控制模块控制不同模式下显示不同的内容,以及调节时闪烁显示。25 设计提示251
35、 关于输入时钟试验板上可以输入4路时钟,并有多钟频率可以选择(详见后文实验板资源),问题:输入几路时钟?各多少赫兹?如何分频得到所需频率? 提示:选择时钟源的原则是:输入的时钟源尽量少,内部分频器也要尽量少。先查看一下需要哪些时钟。计时的基准时钟:1Hz跑表的基准时钟:100Hz数字闪烁显示:2Hz闹铃/整点提示音:节拍控制4Hz/1Hz,及声音频率1kHz/500Hz左右快速调节:每秒8-10次七段码扫描显示:=200Hz(每位数字至少25Hz,8位扫描至少要200Hz的扫描频率)参考一:输入两路时钟源:8Hz和4096Hz8Hz经分频得到:4Hz,2Hz,1Hz 4096Hz经分频得到音频与数码管的扫描脉冲:1024Hz,512