数字秒表一设计任务设计用于体育比赛的数字秒表,要求:1.计时精度大于1/1000秒,计时器能显示1/1000秒的时间,提供给计时器内部定时器的时钟频率为10MHz;计时器的最长计时时间为1小时,为此需要一个7位的显示器,显示的最长时间为59分59.999秒。2.设计复位和起/停开关。(1)复位开关用来使计时器清零,并做好计时准备。(2)起/停开关的使用方法与传统的机械式计时器相同,即按一下起/停开关,启动计时器开始计时,再按一下起/停开关时终止。(3)复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时器进程立即终止,并对计时器清零。二方案选择与设计方案选择利用VHDL语言进行数字秒表设计有多种方法。可以利用原件例化语句将各模块联系起来,也可以使用原理图的方法实现此功能,考虑到此次设计中端口众多,使用例化语句繁琐易错,因此采用了条理清晰的绘制原理图的方法生成顶层文件,实现数字秒表功能。根据上述设计要求,可以预先设计若干个不同进制的计数器单元模块,然后将其进行例化组合来得到数字秒表系统。要满足数字秒表的精度,首先要获得精确的计时基准信号,这里的系统精度要求为0.001秒,因此必须设置周期为0.001秒的时钟脉冲。0.001秒、0.01秒、0.1秒、秒、分等计时单位之间的进位转换可以通过不同进制的计数器实现。设置十进制计数器和六进制计数器,每位计数器均能输出相应计时单位计数结果,其中,十进制计数器可以实现0.01秒、0.1秒、秒、分为单位的计数,六进制计数器可以实现以10秒、10分为单位的计数。把各级计数器级联,即可同时显示0.001秒、0.01秒、0.1秒、秒、分钟。级联可分为串行进位方式和并行进位方式。在串行进位方式中,以低位片的进位输出信号作为高位片的时钟输入信号。在并行进位方式中,以低位片的进位输出信号作为高位片的工作状态信号(计数的使能信号EN),两片的CLK端同时接计数输入信号。具体思路:通过分频器将10M晶振所提供的信号进行10000分频,生成脉冲作为计时信号,经计数器累加计数实现数字秒表计数的功能。设计采用七位LED数码管显示分、秒,需要5个10计数器和2个6计数器。使用按键开关可实现开始/结束计时操作以及复位清零操作。设计整个系统设计是采用自顶向下分析,自底向上设计。将数字秒表系统的整体分解为各个模块电路。1.顶层电路设计在顶层设计中,要对内部分各功能块的连接关系和对外的接口关系进行描述,而功能块实际的逻辑功能和具体的实现形式则由下一层模块来描述。数字秒表原理图顶层电路图根据数字秒表的原理图来进行顶层文件的设计。此次设计中使用了总线,从而简化了顶层电路图的绘制。2时钟分频电路模块在基于EDA技术的数字电路系统设计中,分频电路应用十分广泛。常常用分频电路来得到数字系统中各种不同频率的控制信号。所谓分频电路,就是将一个给定的频率较高的数字输入信号经过适当处理后,产生一个或数个频率较低的数字输出信号。本设计需要一个计时范围为0.001s-59分59.999秒的秒表,首先输入一个频率为10MHZ时钟信号源,由CLK输入,经其进行10000分频后获得一个比较精确的1000Hz计时脉冲,即周期为1/1000秒的计时脉冲,由CLR_CNT输出。分频器符号3十进制计数控制模块计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。此次设计中为程序方便没有将按键控制功能单独设为一个模块,而是将其添加到了普通十进制计数器程序中,将两者综合生成十进制计数控制模块。十进制计数控制模块符号CLK为时钟信号输入端、RST为复位信号输入端、EN为使能控制信号输入端、DOUT[3..0]为十进制计数数据输出端、COUT为进位信号输出端。4六进制计数控制模块六进制计数器与十进制计数器类似,同样此处为程序方便没有将按键控制功能单独设为一个模块,而是将其添加到了普通六进制计数器程序中,将两者综合生成六进制计数控制模块。六进制计数控制模块符号CLK为时钟信号输入端、RST为复位信号输入端、EN为使能控制信号输入端、DOUT[3..0]为六进制计数数据输出端、COUT为进位信号输出端。三软件设计与仿真3.1时钟分频电路模块程序libraryieee;useieee.std_logic_1164.all;entityCLKGENisport(clki:instd_logic;clko:outstd_logic);endCLKGEN;architecturebehavofCLKGENissignalq:integerrange0to9999;beginprocess(clki,q)beginifclki'eventandclki='1'thenq=q+1;endif;ifq=1thenclko='0';elseclko='1';endif;endprocess;endbehav;时钟分频电路模块仿真时钟分频电路模块仿真结果3.2六进制计数控制模块程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT6ISPORT(CLK,RST,EN:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCNT6;ARCHITECTUREbehavOFCNT6ISBEGINPROCESS(CLK,RST,EN)VARIABLEQ:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENQ:=(OTHERS='0');ELSIFCLK'EVENTANDCLK='1'THENIFEN='1'THENIFQ5THENQ:=Q+1;ELSEQ:=(OTHERS='0');ENDIF;ELSEQ:=Q;ENDIF;ENDIF;IFQ=0101THENCOUT='0';ELSECOUT='1';ENDIF;DOUT=Q;ENDPROCESS;ENDbehav;六进制计数控制模块仿真六进制计数控制模块仿真结果3.3十进制计数控制模块程序ENTITYCNT10ISPORT(CLK,RST,EN:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCNT10;ARCHITECTUREbehavOFCNT10ISBEGINPROCESS(CLK,RST,EN)VARIABLEQ:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENQ:=(OTHERS='0');ELSIFCLK'EVENTANDCLK='1'THENIFEN='1'THENIFQ9THENQ:=Q+1;ELSEQ:=(OTHERS='0');ENDIF;ELSEQ:=Q;ENDIF;ENDIF;IFQ=1001THENCOUT='0';ELSECOUT='1';ENDIF;DOUT=Q;ENDPROCESS;ENDbehav;十进制计数控制模块仿真十进制计数控制模块仿真结果