数字秒表课程设计报告

课程设计总结报告

课程名称:      数   字   秒   表       

班    级:                               

学    号:                           

姓    名:          陈  光  胜           

指导教师:                               

   2008  年  7  月  4  日

目录

1、内容摘要……………………………………………………………2

2、设计课题任务及指标…………………………………………………2

3、系统设计方案论证…………………………………………………2

4、统需要的元器件…………………………………………………3

5、单元电路设计………………………………………………3

  Ⅰ.消抖电路………………………………………………………3

  Ⅱ.脉冲发生器………………………………………3

Ⅲ.微分电路:……………………………………………………4

  Ⅳ.上电复位电路…………………………………………………4

Ⅴ.二/五分频十进制计数器74LS90………………………………………5

  Ⅵ.数码管………………………………………………………6

  Ⅶ.4-7线译码器74LS48………………………………………………6

6、电路图及电路的工作原理………………………………………7

7、组装调试……………………………………………………9

8、设计成果的评价……………………………………………………10

9、课程设计的收获、体会………………………………………………10

10、参考文献…………………………………………………………11


数字秒表

1、内容摘要

数字秒表是采用数字电路实现对分、秒,数字显示的计时装置,广泛用于体育竞赛中。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字秒表的精度,远远超过老式秒表, 秒表的数字化给人们生产生活带来了极大的方便。

本设计的数字秒表是一个将“秒”显示给我们的视觉器官的计时装置。它的计时周期为10秒,显示满刻度为9.9秒。一个基本的数字秒表电路主要由消抖开关、微分电路、整形电路、信号发生器、计数器、译码器及显示器组成。

关键词:脉冲发生器  计数器  译码显示

2、设计课题任务及指标:

(1)  通过本课程的选题、方案论证、设计计算、安装调试、资料整理、撰写“设计报告”等环节,初步掌握电子工程设计方法和组织实施的基本技能,深化、扩展并综合运用课堂上所学的电子电路分析设计方法以及集成电路知识完成小系统的电路设计。

(2)   利用基本SR触发器、脉冲发生器及计数、译码、显示等单元电路设计数字秒表。

(3)   在实验装置上或者利用仿真软件完成数字秒表的线路连接和调试。

功能要求:

最终实现秒表的计时、停止、复位功能。

3、系统设计方案论证

所作为数字式秒表,所以必须有一个数字显示。按设计要求,须用数码管来做显示器。题目要求最大记数值为9.9秒,那则需要两个个数码管。要求计数分辨率为0. 1秒,那么我们需要相应频率的信号发生器。选择信号发生器时,有两种方案:一种是用晶体震荡器,另一种方案是采用集成电路555定时器与电阻和电容组成的多谐振荡器。其核心部分使用三个74LS90计数器采用串联方式构成(其中一个起到对50Hz的分频作用),这种连接方式简单,使用元器件数量少。CP脉冲是由555定时器构成的多谐振荡器,产生50赫兹脉冲,如果精度要求高,也可采用石英振荡器。在选择译码器的时候,有多种选择,74LS46,74LS47,74LS48等4-7线译码器。当然,为了减小设计的误差,还需要设计在开关端设计消抖电路、微分电路、整形电路。为了满足上电复位,还应该设计上点复位电路。

系统框图如下:

4、系统需要的元器件:

74LS00  2片,74HC04  3片,74LS08  1片,74LS90  3片,74LS48  2片,LED数码显示器  2个,二极管IN1202  2个,定值电阻 R=1K  2个,R=47K  2 个,R=1.5K  2 个,R=8  2个,可变电阻R'=100K 1个,电容C=2.2u  2个,C=0.01u  2个,开关 2个,导线若干。

5、单元电路设计(绘制时序图)、参数计算和元器件选择说明(接口要求):

Ⅰ.消抖电路:

两个电阻R=1K。消抖原理:具有锁存功能所致。

Ⅱ.脉冲发生器(由555构成的多些振荡器):

管脚图→

脉冲波形图如下:

由于频率f=1.43/(R1+2R2)C=1Hz , 产生10Hz频率,所以,电容C=2.2u,定值电阻R=47K,可变电阻R=100K。端口3为脉冲发生器的输出端口。

Ⅲ.微分电路:

Ⅳ.上电复位电路:

复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。

Ⅴ.二/五分频十进制计数器74LS90:

引脚图和功能表:

 

74LS90功能: 通过不同的连接方式,74LS90可以实现四种不同的逻辑功能;而且还可借助R0(1)(2管脚)、R0(2)(6管脚)对计数器清零,借助S9(1)(6管脚)、S9(2)(7管脚)将计数器置9。其具体功详述如下:

(1) 计数脉冲从CP1输入,QA作为输出端,为二进制计数器。

(2) 计数脉冲从CP2输入,QD、QC、QA作为输出端,为异步五进制加法计数器。

(3) 若将CP2和QA相连,计数脉冲由CP1输入,QD、QC、QB、QA作为输出端,则构成 异步8421码十进制加法计数器。

(4) 若将CP1与QD相连,计数脉冲由CP2输入,QA、QD、QC、QB作为输出端,则构成 异步5421码十进制加法计数器。

(5) 清零、置9功能。

a) 异步清零

当R0(1)、R0(2)均为“1”;S9(1)、S9(2)中有“0”时,实现异步清零功能,即QDQCQBQA=0000。

b) 置9功能

当S9(1)、S9(2)均为“1”;R0(1)、R0(2)中有“0”时,实现置9功能,即QDQCQBQA =1001。

本设计采用的是74LS90的五分频和十进制计数功能。其中,74LS90(1)是对50Hz的脉冲信号进行五分频,实现输入为10Hz(0.1s),74LS90(2)、74LS90(3)实现十进制计数。

Ⅵ.数码管:

七段数码管(LED)

LED数码管由发光二极管组成,LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。

下图是七段数码管(LED)BS201的示意图,图中引脚6为VCC的为共阳数码管,引脚6为GND的为共阴数码管。

本设计采用共阴数码管与74LS48匹配。

Ⅶ.4-7线译码器74LS48:

74LS48芯片是一种常用的七段数码管译码器驱动器,常用在各种数字电路系统的显示系统中。本设计中,用它与共阴极数码管连接。连接图如下:

6、电路图及电路的工作原理:

电路图如下:

各部分工作原理如下:

消抖电路:它是由两个74LS00集成与非门元件构成。接在机械开关K的后面,防止开关K在打开和闭合时一些假信号窜入逻辑电路。

上电复位电路:它由2.2电容和47K电阻构成。利用电容充放电可以产生脉冲,作为清零复位用。

微分电路:它是由0.01u电容和1.5K电阻构成.从电容端加入的信号,经过电容、电阻,在电阻端输出的信号波形相当于进行了一次微分,故称这种电路为微分电路。

整形电路:它是由反相器74HC04集成非门元件构成。在信号由一端输入,起到整形的作用。

0.1秒脉冲发生器电路:它由555集成定时器元件和外围的47K电阻和2.2u电容等元件构成。调节电阻或电容的数值,可以改变脉冲发生器的输出频率。

计数器电路:从进位制来分,有二进制计数器,十进制计数器等多种形式。在此采用的是二——十进制计数器即8421编码方式。由74LS90构成一位输出电路。

译码器电路:是将数码转换为一定的控制信号。在此由74LS48集成元件构成,它能将十个二进制数码转换为输出端上的电平信号以控制显示器。

显示器电路:有辉光数码管和荧光数码管等多种显示电路。在此采用的是共阴极七段LED显示器。

电路工作原理:

上电时,上点复位电路产生复位信号,经整形后,使两个计数器清零。

当第一次按动开关K,经消抖电路产生一个单脉冲,输出端产生高电平,经与门后,使0.1秒脉冲进入计数器计数,并译码,显示出来。

当第二次按动开关K,产生第二个单脉冲使输出端输出低电平,关闭与门,使计数停止。

7、组装调试:

本设计采用EDA电路仿真对设计电路进行了调试。运用软件Multisim。

在调试的过程中遇到不少的麻烦,经过多次反复的检查和排除,最终实现了部分功能。

故障1:微分电路输出波形不正确。

原因:二极管选择错误,和电阻的阻值参数不匹配。

排除方法:换二极管,改电阻参数。

故障2:脉冲发生器(555定时器构成的多谐振荡器)没法实现0.1s的脉冲信号。

原因:参数不对。

排除方法:利用f=1.43/R1+2R2)C适当的选取定值电阻、电容的大小和可变电阻的最大阻值。

故障3:数码管显示乱码。

原因:计数器74LS90管脚接线错误,LED数码管的共极性弄反(按共阳极的接线方法接线)。

排除方法:对计数器正确接线,调整数码管的阴阳极接线(按共阴极接线方法接线)。

故障4:数码管数字跳动频率不均匀。

原因:使能输入信号和清零信号的波形不是规则的脉冲方波。

排除方法:用示波器观察脉冲输出和微分电路输出端的波形,不规则,就加一个反相器74HC04整形,同时,这样还能达到减小误差的目的。

故障5:无法实现暂停的功能。

原因:计数器使能端一直输入脉冲信号。

排除方法:在输入的脉冲信号线路上,加一个开关。

8、设计成果的评价:

通过一周的设计,总算是有了一个结果。只是方案和结果都令我不甚满意。首先是方案,主要是是参考了老师的方案,然后按照老师的方案修改而成。最终没有能够实现上电清零功能和暂停(用两个开关可以实现)的功能,经过反复的修改也没能实现。只实现了计数和停止,虽然大体满足了需要,但总的来说,实用性并不高。由于一周的时间太短,所以设计结果不很完善,只要在设计时间之余,下苦工夫,其它诸如上电清零、暂停、存储、报时等共能都能够一一实现。

9、课程设计的收获、体会:

一周的课程设计已经结束,留给我印象最深的是要设计一个成功的电路,必须要有扎实的知识基础,要熟练地掌握课本上的知识,这样才能对试验中出现的问题进行分析解决。要有耐心和毅力。在整个电路的设计过程中,花费时间最多的是利用Multisim 仿真,因为以前没有学过这个软件,只用过protel,所以其中的一部分我们要从头学起,自行摸索的学习。在各个单元电路的连接上花费了大量时间。我们在设计时做出了两套方案以及仿真电路,我们仔细比较分析其原理以及可行的原因,最后请老师指导了一下,这才确定了我们的电路。实习过程中,我深刻的体会到在设计过程中,要考虑到各个元器件的功能和特性,要翻阅大量资料,参考别人的经验。只有这样才能把自己的电路设计的完美。

通过这次对数字钟的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字秒表的原理与设计理念。在此次的数字秒表设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。

在设计电路中,输入输出端口不一定是固定的,例如74LS90就有好几种计数共能和分频共能,在不同的功能下,它的输入和输出端口是不一样的。再就是注意数码管的共极性(是共阴极还是共阳极),不能将其 “ + ” 与 “ - ” 极接错。比如,共阴极数码管和74LS48接,共阳极数码管和74LS46/74LS47接。

在电路的仿真过程中出错的主要原因都主要是接线的错误所引起的。接线的时候一定要细心,不要接错,同时也要学会如何判别芯片的功能,要是芯片不具备要求的功能,或者,不匹配,即使接线再正确也出不来结果。对自己的设计要仔细考虑,是否可行,尤其是进位输出,着重看看进位的CP脉冲是否正确等。

总体来说,通过这次课程设计学习,让我对各种电路都有了大概的了解,也学会了常用绘图软件的使用,在平时的理论学习中遇到的问题都一一解决,加深了我对专业的了解,培养了我对学习的兴趣,为以后的学习打下了好的开端,我受益匪浅。同时,让我明白:这些电路还是应该自己动手实际操作才会有深刻理解,才会有收获,所谓“一行胜千言”果然不假。

10、参考文献:

《电子技术基础实验与课程设计(第二版)》  高吉祥主编  电子工业出版社 2005.02.

《电子技术实验与课程设计指导  数电分册》  许小军主编  东南大学出版社 2007.10

《电子技术实训教程》  杨碧石主编  电子工业出版社 2005.03

《电子技术实践与训练》  黄仁欣主编  清华大学出版社 2004.09

《电子技术课程设计指导》彭介华主编  高等教育出版社 2007.09

网址:

百度www.baidu.com

谷歌www.google.cn

福星电子www.fxdzw.com

 

第二篇:数字秒表实验报告

EDA课程设计

题目:基于VHDL的数字秒表设计

学生姓名               

学    号          

学    院      电子信息学院  

专    业      10通信工程   

指导教师               

二零一二年十二月

基于VHDL的数字秒表设计

摘要

当前电子系统的设计正朝着速度快,容量大,体积小,质量轻,省电的方向发展。推动该潮流迅速发展的决定性因素就是使用了现代化的EDA设计工具。此次课程设计先确定了系统的逻辑功能,选择电路结构,然后确定并设计电路所需的数据处理以及控制模块,在Quartus II上以超高速硬件描述语言VHDL为系统逻辑描述方法完成了数字秒表所需的分频模块,十进制计数控制模块,六进制计数控制模块与顶层设计和引脚分配,对其进行编译仿真,并下载到实验板上实际验证,通过本设计锻炼了计算机应用能力、VHDL语言的编程能力和Quartus II的使用能力,此次设计圆满完成了用VHDL语言设计1/1000秒数字秒表并仿真和实际下载到ALTERA公司的ACEX1K系列的EP1K30TC144-3中实现。

关键词:EDA、Quartus II、VHDL、模块、仿真、ACEX1K

Abstract

The electronic system design is moving speed, large capacity, small volume, light weight, energy saving direction. The trend of rapid development of determinant is the use of modern EDA design tools. This course is designed to determine the logic function of the system, establish the algorithm process, selection of circuit structure and circuit design, and then determine the desired data processing and control module, in the Quartus II to very high speed hardware description language VHDL as the system logical description method for completing the digital stopwatch desired frequency module, decimal counting control module, base six counting control module with top design and pin assignment, the compiled simulation, and downloaded to the experiments on actual test and verify, through the design of exercise ability of computer application and VHDL programming language and Quartus II using capability, the design was completed by VHDL language design 1\/1000 seconds stopwatch and simulation and the actual download to ALTERA company's ACEX1K series EP1K30TC144-3 implementation.

Key WordsEDA、Quartus II、VHDL、Module、Simulation、ACEX1K

目录

摘要----------------------------------------------------------------2       

Abstract------------------------------------------------------------2

一、设计要求--------------------------------------------------------4

二、设计思想与方案论证----------------------------------------------4

    2.1 设计思想----------------------------------------------------4

    2.2 方案论证----------------------------------------------------4

三、系统设计--------------------------------------------------------5

    3.1 顶层电路设计------------------------------------------------5

    3.2时钟分频电路模块---------------------------------------------6

    3.3十进制计数控制模块-------------------------------------------7

    3.4六进制计数控制模块-------------------------------------------7

四、系统仿真--------------------------------------------------------8

    4.1 模块仿真----------------------------------------------------8

       4.1.1 时钟分频电路模块仿真 ----------------------------------8

       4.1.2 十进制计数控制模块仿真---------------------------------9

       4.1.3 六进制计数控制模块仿真---------------------------------9

    4.2 总体仿真---------------------------------------------------10

五、下载实现--------------------------------------------------------10

    5.1 引脚分配---------------------------------------------------11

    5.2 下载验证---------------------------------------------------11

六、问题与不足-----------------------------------------------------13七、心得体会-------------------------------------------------------13参考文献-----------------------------------------------------------14

附录---------------------------------------------------------------14

附录1 :本设计各模块代码-------------------------------------------14

一、 设计要求

设计用于体育比赛用的数字秒表,要求

1、 计时精度大于1/1000秒,计时器能显示1/1000秒的时间,提供给计时器内部定时的时钟频率为12MHz;计时器的最长计时时间为1小时,为此需要一个7位的显示器,显示的最长时间为59分59.999秒

2、设计有复位和起/停开关

(1) 复位开关用来使计时器清零,并做好计时准备。

(2) 起/停开关的使用方法与传统的机械式计时器相同,即按一下起/停开关,启动计时器开始计时,再按一下起/停开关计时终止。

(3) 复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时进程立刻终止,并对计时器清零。

二、设计思想与方案论证

2.1设计思想

通过分频器将12M晶振所提供的信号进行6000分频,生成脉冲作为计时信号,经计数器累加计数实现数字秒表计数的功能。设计采用七位LED数码管显示分、秒,需要5个10计数器和2个模6计数器。使用按键开关可实现开始/结束计时操作以及复位清零操作。

2.2方案论证

利用VHDL语言进行数字秒表设计有多种方法。

可以利用原件例化语句将各模块联系起来,也可以使用原理图的方法实现此功能,考虑到此次设计中端口众多,使用例化语句繁琐易错,因此采用了条理清晰的绘制原理图的方法生成顶层文件,实现数字秒表功能。

在设计中可以将每个单独的功能写成一个独立的VHDL文件,此次设计中没有将控制模块独立出来,而是将它融合到十进制计数程序和六进制计数程序中,最终生成十进制计数控制器和六进制计数控制器。虽然显得繁琐,但是比较易于理解,程序中也比较容易操作。

三、 系统设计

整个系统设计是采用自顶向下分析,自底向上设计。将数字秒表系统的整体分解为各个模块电路。该部分详细介绍了数字秒表系统的各个模块的设计,并对各个模块的每一个部分进行了分析,在第四部分对系统模型进行了访真与程序调试。

3.1 顶层电路设计

在顶层设计中,要对内部分各功能块的连接关系和对外的接口关系进行描述,而功能块实际的逻辑功能和具体的实现形式则由下一层模块来描述。

3-1数字秒表原理图

3-2顶层电路图

 

根据数字秒表的原理图来进行顶层文件的设计。此次设计中使用了总线,从而简化了顶层电路图的绘制。

3.2 时钟分频电路模块

在基于EDA技术的数字电路系统设计中,分频电路应用十分广泛。常常用分频电路来得到数字系统中各种不同频率的控制信号。所谓分频电路,就是将一个给定的频率较高的数字输入信号经过适当处理后,产生一个或数个频率较低的数字输出信号。

本设计需要一个计时范围为0.001s-59分59.999秒的秒表,首先输入一个频率为12MHZ时钟信号源,由CLK输入,经其进行6000分频后获得一个比较精确的1000Hz计时脉冲,即周期为1/1000秒的计时脉冲,由CLR_CNT输出。

3-3分频器符号

3.3 十进制计数控制模块

计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。

此次设计中为程序方便没有将按键控制功能单独设为一个模块,而是将其添加到了普通十进制计数器程序中,将两者综合生成十进制计数控制模块。

3-4十进制计数控制模块符号

其中CLK为时钟信号输入端、RST为复位信号输入端、 EN为使能控制信号输入端、 DOUT[3..0]为十进制计数数据输出端、 COUT为进位信号输出端。

3.4 六进制计数控制模块

六进制计数器与十进制计数器类似,同样此处为程序方便没有将按键控制功能单独设为一个模块,而是将其添加到了普通六进制计数器程序中,将两者综合生成六进制计数控制模块。

3-5六进制计数控制模块符号

其中CLK为时钟信号输入端、RST为复位信号输入端、 EN为使能控制信号输入端、 DOUT[3..0]为六进制计数数据输出端、 COUT为进位信号输出端。

四、 系统仿真

系统设计完成后需要对其编译仿真,观看仿真波形图来判断设计的是否以实现期望功能。时序仿真也叫后仿真,时序仿真使用布局布线后器件给出的模块和连线的延时信息, 在最坏的情况下对电路的行为作出实际地估价。时序仿真使用的仿真器和功能仿真使用的仿真器是相同的,所需的流程和激励也是相同的;惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有,时序仿真波形会有毛刺现象。

4.1 模块仿真

4.1.1 时钟分频电路模块仿真

4-1时钟分频电路模块仿真结果

4.1.2 十进制计数控制模块仿真

4-2十进制计数控制模块仿真结果

4.1.3 六进制计数控制模块仿真

4-3六进制计数控制模块仿真结果

4.2 总体仿真

4-4总体仿真结果

五、 下载实现

EDA设计最终要下载到实际硬件中进行测试才可检测设计的是否可靠,在现代化的软件中利用清晰明了的算法编写程序,然后把程序下载到可编程芯片中自动进行调试,大大方便了现有工作人员,减轻了其工作量,不用再在纸上画好算好逻辑门电路,再人工装成电路。Quartus II软件编译仿真功能强大,使用方便,但是也有很多问题不会在软件仿真时出现,不能最终判定设计是完善的,下载到硬件中实际运行才能检测设计是否可靠。

此次设计采用ACEX1K系列的EP1K30TC144-3中实现,根据需要实现的功能最终选用了其中的模式0。

5.1 引脚分配

为实现数字秒表的规定功能,需用到一个12M的时钟源,两个电平按键(一个用来进行复位功能,一个用来控制数字秒表的开启与关闭),除此之外还需要七个数码管(高两位数码管用于显示分,第三位的数码管用于显示时分秒、百分秒、千分秒,剩余的中间两位数码管用来显示秒)。具体的引脚分配如下:

5-1引脚分配图

5.2 下载验证

下载到芯片需要连接实验板与电脑,我们采用USB BLASTER来连接下载。具体的下载操作此处不再叙述。此次设计下载到试验箱后的具体操作如下:

1、将短路帽接到clock0中12M处;

2、按下按键3,数字秒表开始计时,再次按下按键3,数码管停止计时并持续显示最终的结果;再次按下按键3,数字秒表在停止时数的基础上继续计时;

3、无论在数字秒表工作的任何时刻,按下按键4,都会使数字秒表计时清零。

实际部分操作的效果图如下:

六、问题与不足

此次实验虽然实现了题目要求的基本功能,但并没有对功能进行必要的拓展,着实显得内容空洞,除此之外由于大部分时间都浪费在了考虑太多错误问题导致最终没有时间来考虑按键毛刺对实验结果的影响。

七、心得体会

此次课程设计题目简单,但由于自身对EDA掌握程度有限,以及对试验箱不熟悉,导致把简单的问题复杂化走了不少弯路。起初看到题目,没有仔细审题,将题目中要求的按键要实现的功能理解错误,接近尾声时才发现题目理解错了;由于对试验箱各部件不熟悉加上近期频繁接触单片机,因此错误认为EDA中按键也是产生脉冲的,想通过控制程序对脉冲进行控制,又想到当按键按下松开瞬间秒表开始工作,再次按下按键时秒表停止工作,第一次按键按下持续时间长短对结果无影响,所以就对程序进行了大改进,最终十进制计数控制程序仅对第一位数码管有效,对高位数码管并不起控制作用。在进行测试时偶然间发现实验箱上按键能保持电平,才恍然大悟把所有的问题都复杂化了,删掉了复杂的变量控制程序,留下最简单的,最终实现了题目要求的功能。

通过此次课程设计,学到了很多。即使再简单的题目也会因为知识的匮乏而显得困难,因此需要加强对EDA知识的学习;现阶段接触到的单片机按键产生脉冲,因此就定势思维的认为EDA中也是如此,导致了一连串的复杂化,可能翻一下课表,查一下不确定的问题,就不会出现此类问题;实验是学习EDA最好的方法,在没做实验前,纯理论的学习效率很低,接触实验后,才明白好多不懂的问题,做了一个完整的题目就对EDA的基本流程有了大致的了解,胜于看几遍书,以后要加强实验练习。

参考文献

[1]潘松黄继业编著.EDA技术使用教程---VHDL版(第四版).科学出版社.2011

附录

附录1 :此次设计各模块代码

时钟分频电路模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CLKGEN IS

    PORT( CLK : IN STD_LOGIC;

        CLR_CNT: OUT STD_LOGIC );

END CLKGEN;

ARCHITECTURE behav OF CLKGEN IS

 SIGNAL MIDDLECLK : STD_LOGIC;

BEGIN

PROCESS(CLK)

 VARIABLE K :INTEGER:=6000;

BEGIN

    IF CLK'EVENT AND CLK = '1' THEN

        K := K-1;

        IF K = 0 THEN

            MIDDLECLK <= NOT MIDDLECLK;

            K := 6000;

        END IF;

    END IF;

END PROCESS;

CLR_CNT <= MIDDLECLK;

END behav;

六进制计数控制模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT6 IS

       PORT( CLK,RST,EN : IN STD_LOGIC;

              DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

              COUT : OUT STD_LOGIC );

END CNT6;

ARCHITECTURE behav OF CNT6 IS

BEGIN

PROCESS (CLK,RST,EN)

       VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

       IF RST = '1' THEN Q := (OTHERS=>'0');

       ELSIF CLK'EVENT AND CLK = '1' THEN

              IF EN = '1' THEN

                            IF Q<5 THEN

                                   Q := Q + 1;

                            ELSE

                                   Q := (OTHERS=>'0');

                            END IF;

              ELSE

                      Q := Q ;

              END IF;

       END IF;

       IF Q = "0101" THEN COUT <= '0';

       ELSE COUT <= '1';

       END IF;

DOUT<= Q ;

END PROCESS;

END behav;

十进制计数控制模块

ENTITY CNT10 IS

       PORT( CLK,RST,EN : IN STD_LOGIC;

              DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

              COUT : OUT STD_LOGIC );

END CNT10;

ARCHITECTURE behav OF CNT10 IS

BEGIN

PROCESS (CLK,RST,EN)

       VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

       IF RST = '1' THEN Q := (OTHERS=>'0');

       ELSIF CLK'EVENT AND CLK = '1' THEN

              IF EN = '1' THEN

                            IF Q<9 THEN

                                   Q := Q + 1;

                            ELSE

                                   Q := (OTHERS=>'0');

                            END IF;

              ELSE

                      Q := Q ;

              END IF;

       END IF;

       IF Q = "1001" THEN COUT <= '0';

       ELSE COUT <= '1';

       END IF;

DOUT<= Q ;

END PROCESS;

END behav;

相关推荐