基于VHDL的计时系统的设计

合集下载

基于VHDL的秒表

基于VHDL的秒表

内容1、总体设计要求具有启动停止功能;计时器能显示0.01s的时间;计时器最长计时时间为24h;具有复位功能在任何情况下按复位键秒表无条件清零;2、系统功能描述本次课程设计通过VHDL做的秒表主要有以下的功能:(1)在下载到实验箱后,打开开始开关才能开始计时;(2)在开始开关打开后,能够通过另一个开关进行暂停;(3)再按下清零键后能够清零,并且是在任何条件下都能清零;(4)能够精确到0.01秒,更加精确的计时3、系统设计方案论述,画出顶层电路图及功能分割图,并说明之间的联系或功能。

先是将100进制计数器、60进制计数器、60进制计数器和24进制计数器连接,将100进制计数器的进位接到60进制计数器的CLK输入端上,然后将60进制的进位连接到另一个60进制的CLK输入端上,然后将已将连接进位的60进制计数器的几位连接到24进制计数器的输入端口CLK上,24进制的仅为端悬空,这就是秒表的主体。

当100进制计数器进位端口为1时,与之相连的60进制计数器开始工作,当进位为0时停止工作,剩余两个计数器的工作原理与之相同。

将100进制计数器、两个60进制计数器和24进制计数器的en端口相连并连接到input得输入端口上,并且将他们的cir连接到一起也连接到input 的输入端口上,这样就实现了暂停和清零的功能,并且秒表的精确度为0.01。

在100进制的输入端口处还剩下一个clk端口,将两个输入端口通过一个与门与之相连,其中一个接入clk信号,而另一个就可当做一个开关,实现开始的功能,并且能够暂停。

将100进制计数器、两个60进制的计数器和24进制计数器的输出端分别接到8选1的数据选择器的输入端上,并且按高低位接好,而八进制的选择功能是通过一个8进制的不管计数来实现的,所以在8选1的数据选择器的sel 输入端端口接到8进制计数器的输出端上,而八进制的输入端口上,通过两个输入端input,一个接扫描频率,另一个通过一个开关来控制8进制的工作,并且清零端接1使它的清零作用失效。

基于VHDL数字钟系统设计

基于VHDL数字钟系统设计

基于VHDL数字钟数字系统课程设计姓名:周振坤学号:100341239专业:计算机科学与技术基于VHDL数字钟一、内容摘要本次课程设计运用VHDL语言实现了数字钟的各项基本功能,各个模块均用VHDL语言实现。

运用语言编写的程序使得我们的思路更加清晰,逻辑关系更加明确。

相比较其他系统,这个数字钟系统比较可靠,并且修改和升级都很灵活。

二、设计内容及要求数字钟是常见的一种计数装置,以1Hz的频率工作,其主要功能有以下几个方面:(1)以1Hz的频率工作,进行计时;(2)显示时、分、秒信息。

这些显示信息在6个7段数码管上完成;(3)通过按键设置时、分信息,并且具有复位功能。

复位按键可将时、分、秒清零,并做好重新技术的准备。

其他按键还具有预置时、分的功能,分别对当前的时和分信息做递增设置和递减设置。

(4)具有独特的整点报时功能,每当整点来临之前会有3声较低频率的提示音,整点到来的时候会有较高频率的整点报时声,会按照在几点来决定发出声响的次数,例如5点响5声,20点响8声。

三、系统方案及系统框图用VHDL语言编写分频模块和主控制模块,连接输入输出端,在top电路文件中形成最终的框架,整体结构清晰严谨。

这里的主控制模块较为复杂,接下来单独来讲。

先说说分频模块,这里要分出两种频率的信号,一个是用于主控制模块中定时时钟所用的1Hz信号,另一个是扫描时钟所需的1khz 信号。

所以这里采用的是利用计数器实现。

(理论上是分频1hz和1khz,实际上没有这样分频)。

下面是主控制模块的框架结构:主控制模块中又分为主要的5个模块(这里也可以称为进程),按键处理,计时控制,显示处理,定时时钟,扫描时钟。

讲解细节代码的时候再进行详细分析。

·!这里有一个小的问题出现了,在实际操作的时候发现,显示处理的时候如果仅给出“001”等这样的输出很容易,但是我们必须要经过译码才可以得到想要的值。

所以,我们决定用3-8译码器来解决译码的问题,从主控模块中进行分离,从主控制模块中的输出再经过一个3-8译码器才是真正的输出。

计时器的VHDL设计

计时器的VHDL设计

本报告共包含5个VHDL程序的设计:VHDL程序1:计时器.VHDL程序2:序列计数器.VHDL程序3:脉冲宽度处理电路设计.VHDL程序4:01011序列检测器.VHDL程序5:赛跑计时秒表.一计时器1.设计任务和原理介绍:假定输入时钟周期为1秒,我们根据这个时钟周期进行计数,设立了3个计数器,分别是秒计数器,分钟计数器,小时计数器。

每次输入的时钟上升沿来临,直接驱动秒计数器。

如果秒计数器值为59(二进制为111011),则秒计数器恢复为0,否则则秒计数器加1;在此情况下接着查看分钟计数器的值,如果此时分钟计数器值也为59(二进制为111011),则分钟计数器值恢复为0,否则分钟计数器加1;在秒计数器与分钟计数器都为59的情况下,还需查看小时计数器的值,如果此时小时计数器的值为23(二进制10111),则小时计数器的值恢复为0,否则小时计数器的值加1.2.VHDL源程序:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isport (reset : in std_logic;clk_sec : in std_logic;seconds : out std_logic_vector (5 downto 0);minutes : out std_logic_vector (5 downto 0);hours : out std_logic_vector (4 downto 0));end counter;architecture behavior of counter issignal count_sec : std_logic_vector (5 downto 0); signal count_min : std_logic_vector (5 downto 0); signal count_hour : std_logic_vector (4 downto 0); beginprocess (reset,clk_sec)beginif reset='0' thencount_sec (5 downto 0) <="000000";count_min (5 downto 0) <="000000";count_hour (4 downto 0) <="00000";elseif clk_sec'event and clk_sec='1' thenif count_sec="111011" thencount_sec<="000000";if count_min="111011" thencount_min<="000000";if count_hour="10111" thencount_hour<="00000";elsecount_hour<=count_hour+1;end if;elsecount_min<=count_min+1;end if;elsecount_sec<=count_sec+1;end if;elsenull;end if;end if;end process;seconds (5 downto 0) <=count_sec (5 downto 0); minutes (5 downto 0) <=count_min (5 downto 0); hours (4 downto 0) <=count_hour (4 downto 0);end behavior;3.程序主要部分介绍及流程图:port (reset : in std_logic;clk_sec : in std_logic;seconds : out std_logic_vector (5 downto 0);minutes : out std_logic_vector (5 downto 0);hours : out std_logic_vector (4 downto 0));定义端口,从上往下分别为复位键,时钟信号输入端,秒输出端(0—59),分钟输出端(0—59),小时输出端(0—24).signal count_sec : std_logic_vector (5 downto 0);signal count_min : std_logic_vector (5 downto 0);signal count_hour : std_logic_vector (4 downto 0);定义内部信号变量,分别对应秒,分钟,小时信号。

2019年基于VHDL的电子计时器的设计课程设计33229934.doc

2019年基于VHDL的电子计时器的设计课程设计33229934.doc

EDA技术及应用课程设计题目:基于VHDL的数字计时器目录1引言 (1)1.1 EDA简介 (1)1.2 VHDL简介 (2)1.3 VHDL的特点 (3)1.4 VHDL的设计结构 (4)1.5 VHDL的设计步骤 (4)2设计主要内容 (5)3内部各功能模块 (6)3.1六十进制计数模块 (6)3.2二十四进制计数模块 (8)3.3分频器模块 (10)3.4LED显示模块 (11)4顶层系统联调 (15)5结语 (21)6参考文献 (22)7附录 (23)1.引言随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。

集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展。

基于这种情况,可编程逻辑器件的出现和发展大大改变了传统的系统设计方法。

可编程逻辑器件和相应的设计技术体现在三个主要方面:一是可编程逻辑器件的芯片技术;二是适用于可逻辑编程器件的硬件编程技术,三是可编程逻辑器件设计的EDA开发工具,它主要用来进行可编程逻辑器件应用的具体实现。

在本实验中采用了集成度较高的FPGA 可编程逻辑器件, 选用了VHDL硬件描述语言和MAX + p lusⅡ开发软件。

VHDL硬件描述语言在电子设计自动化( EDA)中扮演着重要的角色。

由于采用了具有多层次描述系统硬件功能的能力的“自顶向下”( Top - Down)和基于库(L ibrary - Based)的全新设计方法,它使设计师们摆脱了大量的辅助设计工作,而把精力集中于创造性的方案与概念构思上,用新的思路来发掘硬件设备的潜力,从而极大地提高了设计效率,缩短了产品的研制周期。

MAX + p lusⅡ是集成了编辑器、仿真工具、检查/分析工具和优化/综合工具的这些所有开发工具的一种集成的开发环境,通过该开发环境能够很方便的检验设计的仿真结果以及建立起与可编程逻辑器件的管脚之间对应的关系。

1.1 EDA简介20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。

电子秒表设计VHDL

电子秒表设计VHDL

一、设计题目:基于VHDL语言的电子秒表设计(可调时,有闹钟、定时功能)二、设计目的:⑴掌握较复杂的逻辑设计和调试⑵学习用原理图+VHDL语言设计逻辑电路⑶学习数字电路模块层次设计⑷掌握QuartusII软件及Modelsim软件的使用方法三、设计内容:(一)设计要求1、具有以二十四小时计时、显示、整点报时、时间设置和闹钟的功能。

2、设计精度要求为1S。

(二).系统功能描述1 . 系统输入:系统状态及校时、定时转换的控制信号为k、set、ds;时钟信号clk,采用实验箱的50MHz;系统复位信号为reset。

输入信号均由按键产生。

系统输出:8位LED七段数码管显示输出,蜂鸣器声音信号输出。

多功能数字钟系统功能的具体描述如下:2. 计时:set=1,ds=1工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。

3. 校时:在set=0,ds=0状态下,按下“k键”,进入“小时”校准状态,之后按下“k键”则进入“分”校准状态,继续按下“k键”则进入“秒校准”状态,之后如此循环。

1)“小时”校准状态:在“小时”校准状态下,显示“小时”数码管以1Hz的频率递增计数。

2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以1Hz的频率递增计数。

3)“秒”复零状态:在“秒复零”状态下,显示“分”的数码管以1Hz的频率递增计数。

4. 整点报时:蜂鸣器在“59”分钟的第50—59,以1秒为间隔分别发出1000Hz,500Hz的声音。

5. 显示:采用扫描显示方式驱动8个LED数码管显示小时、分、秒。

闹钟:闹钟定时时间到,蜂鸣器发出交替周期为1s的1000Hz、500Hz的声音,持续时间为一分钟;6. 闹钟定时设置:在set=0,ds=1状态下,按下“k”,进入闹钟的“时”设置状态,之后按下“k键”进入闹钟的“分”设置状态,继续按下“k 键”则进入“秒”设置状态, 之后如此循环。

1)闹钟“小时”设置状态:在闹钟“小时”设置状态下,显示“小时”的数码管以1Hz 的频率递增计数。

基于VHDL数字时钟的设计与实现

基于VHDL数字时钟的设计与实现

1 引言随着科学技术的不断发展,人们对时间计量的精度要求越来越高。

相对机械钟而言,数字钟能实现准确计时,并显示时,分,秒,而且可以方便,准确的对时间进行调节。

在此基础上,还可以实现整点报时的功能。

因此,数字钟的应用十分广泛。

所谓数字时钟,是指利用电子电路构成的计时器。

1.1课题的背景、目的电子技术是一门应用很广,发展极为迅速的科学技术,尤其由于数字电子技术具有高抗干扰能力、更高的可靠性和便于计算机处理等特点,近年来得到更加迅速的发展,数字通讯设备、数字电视、数字照相机、数字摄象机等数字化产品近年如雨后春笋般大量涌现,数字电子技术已经成为今后电子技术发展的主要方向。

现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用,有着非常现实的意义。

通过数字时钟的设计,巩固计算机组成原理课程,理论联系实际,提高分析、解决计算机技术的实际问题的独立工作能力;掌握用VHDL语言编制简单的小型模块,学会数字钟的设计方法,熟悉集成电路的使用方法,初步掌握电子钟的设计方法并实现时间的显示和校对,以及报时的功能,并能对数字电子钟进行扩展。

数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。

1.2 课程设计的内容本课程设计实现一个数字时钟,具有按秒走时功能,能够分别显示小时(2位24小时)、分钟(2位)、秒(2位)。

具有整点报时、时间调整功能,且能够对计时系统的小时、分钟进行调整。

基于VHDL的计时系统方案的设计研究

摘要本次设计是通过使用VHDL语言设计了一个综合的计时系统,能实现年、月、日、时、分、秒、星期的计数综合计时功能,同时将计时结果用15个七段数码管显示,并且可通过两个设置键对计时系统有关的参数进行调整。

综合计时电路可分为计年电路、计月电路、计日电路、计时电路、计分电路、计秒电路、计星期电路等7个子模块,这7个子模块都具有预置、计数和进位功能。

关键词: VHDL;计时系统AbstractUsing the VHDL language design timing system ,a comprehensive system to achieve the year , month , day , hour ,minute and second weeks of counting and timing functions such as integrated , while timing the results of 15 seven-segment digital display ,and can be set by two key system parameters on the timing adjustment. Timing circuit integrated circuit can be divided into the seconds ,scoring circuit ,timing circuit, namely, on the circuit, monthly circuit, namely, 7-week circuit sub-module, which has a preset 7 sub-module, counting ,and carry function .Key words: VHDL;Timing system目录摘要 (I)Abstract (II)1.1 计时系统研究背景 (1)1.2 设计要求 (1)1.3 设计方案与方案优点 (2)1.4 设计的可行性 (3)2 外围电路设计 (4)2.1 电源设计 (4)2.2 方波信号源设计 (5)2.2.1晶振电路 (5)2.2.2分频电路 (6)2.3 七段数码显示电路 (7)2.4 总体电路设计 (9)3 VHDL内部电路设计 (10)3.1 综合计时电路设计 (10)3.1.1 计秒电路设计 (10)3.1.2 计分电路设计 (12)3.1.3 计时电路设计 (12)3.1.4 计日电路设计 (13)3.1.5 计月电路 (15)3.1.6 计年电路设计 (15)3.1.7 计星期电路设计 (15)3.2 调整控制电路设计 (16)3.3 显示控制电路设计 (20)4 VHDL程序仿真 (25)4.1 COUNT60仿真 (25)4.2 COUNDAY仿真 (25)4.3 调整模块仿真 (26)4.3.1 SELECT模块仿真 (26)4.3.2 FUZHI模块仿真 (27)4.4 显示模块仿真 (28)4.5 总体设计 (28)5 总结 (30)致谢 (31)参考文献 (32)附件 (33)1前 言1.1 计时系统研究背景计时器是人们日常生活、学习、工作和进行科学生产、管理、研究必备的仪器,其历史是伴随着人类文明史而发展.从远古时代的日晷、滴漏进展到现代化的机械钟表、石英电子钟表、原子钟表的历程,都是计时器的不断发展过程,它们记录了人类社会的进化和工业文明的发展。

基于VHDL的数字时钟设计

目录1 概述...................................................................... 错误!未定义书签。

1.1数字时钟的工作原理 (1)1.2设计任务 (1)2 系统总体方案设计 (2)3 VHDL模块电路设计 (3)3.1模块实现 (3)3.1.1分频模块pinlv (3)3.1.2按键去抖动模块qudou (5)3.1.3按键控制模块self1 (6)3.1.4秒、分六十进制模块cantsixty (7)3.1.5时计数模块hourtwenty (9)3.1.6秒、分、时组合后的模块 (9)3.1.7数码管显示模块 (10)3.2数字时钟的顶层设计原理图 (13)3.3系统仿真与调试 (14)结束语 (16)参考文献 (17)致谢 (18)附录源程序代码 (19)1 概述1.1数字时钟的工作原理数字钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。

秒计数器的计数时钟CLK为1Hz的标准信号,可以由晶振产生的50MHz信号通过分频得到。

当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号,每一秒钟发出一个中断给CPU,CPU采用NIOS,它响应中断,并读出小时、分、秒等信息。

CPU对读出的数据译码,使之动态显示在数码管上。

1.2 设计任务设计一个基于VHDL的数字时钟,具体功能要求如下:1.在七段数码管上具有时--分--秒的依次显示。

2.时、分、秒的个位记满十向高位进一,分、秒的十位记满五向高位进一,小时按24进制计数,分、秒按60进制计数。

3.整点报时,当计数到整点时扬声器发出响声。

4.时间设置:可以通过按键手动调节秒和分的数值。

此功能中可通过按键实现整体清零和暂停的功能。

基于VHDL的数字时钟课程设计

数字时钟设计1.设计要求(1)能显示周、时、分、秒,精确到0.1秒(2)可自行设置时间(3)可设置闹铃,并且对闹铃时间长短可控制2.设计分析(1)根据题目要求可分解为正常计时、时间设置和闹铃设置三大模块(2)正常计时模块可分解为周、时、分、秒等子模块(3)时间设置模块分别进行秒置数、分置数、时置数和周置数(4)闹铃设置模块分解为闹钟判定和闹铃时长设定3.设计结构图4.设计流程图否是否--Second1(秒计数6进制和10进制)Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity second1 isPort( clks,set:in std_logic;s1,s0:in std_logic_vector(3 downto 0);Secs,Secg: buffer std_logic_vector(3 downto 0);cout1:out std_logic);End second1;Architecture a of second1 isBeginProcess(clks,set)variable ss,sg: std_logic_vector(3 downto 0);--(ss:秒十位;sg秒个位) variable co: std_logic;BeginIf set='1' then ss:=s1; sg:=s0;Elsif clks'event and clks='1' thenif ss="0101" and sg="1001" then ss:="0000"; sg:="0000";co:='1'; elsif sg<"1001" then sg:=sg+1;co:='0';elsif sg="1001" then sg:="0000";ss:=ss+1;co:='0';end if;end if;cout1<=co;-- (进位信号)Secs<=ss;Secg<=sg;end process;End a;仿真波形图:--Min1(分计数器6进制和10进制alm实现整点报时)Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity min1 isPort(clkm,set:in std_logic;m1:in std_logic_vector(3 downto 0);m0:in std_logic_vector(3 downto 0);mins,ming:out std_logic_vector(3 downto 0);enmin,alarm: out std_logic);End;Architecture a of min1 isBeginProcess(clkm,set)variable ms,mg :std_logic_vector(3 downto 0);variable so,alm :std_logic;Beginif set='0' then ms:=m1;mg:=m0;Elsif clkm'event and clkm='1' thenif ms="0101" and mg="1001" then ms:="0000";mg:="0000"; so :='1'; alm:='1'; elsif mg<"1001" then mg:=mg+1; so :='0';alm:='0';elsif mg="1001" then mg:="0000";ms:=ms+1; so :='0';alm:='0';end if;end if;alarm<=alm;enmin<= so;mins<=ms;ming<=mg;End process;End a;仿真波形图:--Hour1(时计数器4进制与2进制)Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity hour1 isPort(clkh,set:in std_logic;h1,h0:in std_logic_vector(3 downto 0);hours,hourg:buffer std_logic_vector(3 downto 0);enhour: out std_logic);End;Architecture a of hour1 isBeginProcess(clkh,set)variable hs,hg :std_logic_vector(3 downto 0);variable ho:std_logic;BeginIf set='1' then hs:=h1; hg:=h0;Elsif clkh'event and clkh='1' thenif hs="0010"and hg="0011" then hs:="0000";hg:="0000"; ho :='1'; elsif hg<"1001" then hg:=hg+1; ho :='0';elsif hg="1001" then hg:="0000";hs:=hs+1; ho :='0';end if;end if;hours<=hs;hourg<=hg;enhour<=ho;End process;End a;仿真波形图:Library ieee; (星期计数器,7进制)Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity week isPort(clkd,set,reset:in std_logic;d1:in std_logic_vector(3 downto 0); -- ――置数端(星期)day:buffer std_logic_vector(3 downto 0)); -- ――星期输出端end;Architecture a of week isBeginProcess(clkd,reset,set,d1)BeginIf reset='0' then day<="0000"; -- ――对星期计时器清0 Elsif set='0' then day<=d1; -- ――对星期计时器置d1的数Elsif clkd'event and clkd='1' thenIf day=6 then day<="0000"; -- ――重复计数Else day<=day+1;End if;End if;End process;End;仿真波形图:--Second2(秒置数模块,6进制和10进制)Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity second2 isPort( clks1:in std_logic;Secs,Secg: out std_logic_vector(3 downto 0));End;Architecture a of second2 isBeginProcess(clks1)variable ss,sg: std_logic_vector(3 downto 0);--(ss:秒十位;sg秒个位) Beginif clks1'event and clks1='1' thenif ss="0101" and sg="1001" then ss:="0000"; sg:="0000";elsif sg<"1001" then sg:=sg+1;elsif sg="1001" then sg:="0000";ss:=ss+1;end if;end if;Secs<=ss;Secg<=sg;end process;End a;仿真波形图:--Min2(分置数模块,6进制和10进制)Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity min2 isPort(clkm1:in std_logic;mins,ming:buffer std_logic_vector(3 downto 0));End;Architecture a of min2 isBeginProcess(clkm1)variable ms,mg :std_logic_vector(3 downto 0);Beginif clkm1'event and clkm1='1' thenif ms="0101" and mg="1001" then ms:="0000";mg:="0000"; elsif mg<"1001" then mg:=mg+1;elsif mg="1001" then mg:="0000";ms:=ms+1;end if;end if;mins<=ms;ming<=mg;End process;End a;仿真波形图:--Hour2(时置数模块,4进制与2进制)Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity hour2 isPort(clkh1:in std_logic;hours,hourg:buffer std_logic_vector(3 downto 0)); End;Architecture a of hour2 isBeginProcess(clkh1)variable hs,hg :std_logic_vector(3 downto 0);Beginif clkh1'event and clkh1='1' thenif hs="0010"and hg="0011" then hs:="0000";hg:="0000"; elsif hg<"1001" then hg:=hg+1;elsif hg="1001" then hg:="0000";hs:=hs+1;end if;end if;hours<=hs;hourg<=hg;End process;End a;仿真波形图:Library ieee; (星期置数模块,7进制)Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity week2 isPort(clkd1:in std_logic;day:buffer std_logic_vector(3 downto 0)); -- ――星期输出端end;Architecture a of week2 isBeginProcess(clkd1)Beginif clkd1'event and clkd1='1' thenIf day=6 then day<="0000"; -- ――重复计数Else day<=day+1;End if;End if;End process;End;仿真波形图:library ieee; (闹钟设置模块)use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity nz isport(ml,mh:in std_logic_vector(3 downto 0);hl,hh:in std_logic_vector(3 downto 0);mlo,mho:in std_logic_vector(3 downto 0);hlo,hho:in std_logic_vector(3 downto 0);set:in std_logic;output:out std_logic);end nz;architecture behav of nz issignal opt:std_logic;beginprocess(set,ml,mh,hl,hh,mlo,mho,hlo,hho)beginif set='1' thenif(ml=mlo and mh=mho and hl=hlo and hh=hho)then opt<='1';else opt<='0';end if;end if;output<=opt;end process;end behav;library ieee; (闹钟响铃时长设置)use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity timeset isport( nz:in std_logic;sj:in integer range 0 to 1200;clk:in std_logic;ring:out std_logic);end timeset;architecture behav of timeset is signal count:integer range 0 to 1200; beginprocess(clk)variable co1:std_logic;beginif(clk'event and clk='1') thenif(nz='1') and (count/=sj) thencount<=count+1;co1:='1';else co1:='0';end if;end if;ring<=co1;end process;end behav;闹钟功能模块测试波形图:时间重置模块测试波形图。

基于VHDL的数字电子钟系统设计

基于VHDL的数字电子钟系统设计数字电子钟是一种用数字电路实现的时钟系统,在现代社会逐渐普及。

在这篇文档中,我们将会讨论使用VHDL(可编程硬件描述语言) 设计数字电子钟系统的过程及其原理。

第一步是需求分析。

我们需要决定所设计的数字电子钟系统需要具备哪些功能,例如显示小时、分钟、秒数、日期、星期、闹钟等功能。

同时,还需考虑设计的电子钟具备哪些功能是其他电子钟所没有的,以增强该款电子钟的市场竞争力。

第二步是架构设计。

经过需求分析后,我们需要设计电子钟系统所需的硬件结构。

常见的电子钟由振荡器、时钟、存储器、显示器和控制接口组成。

其中,振荡器用来处理系统时基;时钟用来计时,提供系统时间;存储器负责存储显示数据和助记代码;显示器用来显示时间和日期;而控制接口则提供交互方式,如按键、通讯口等。

第三步是模块设计。

使用VHDL 可以将架构设计分解成更小的模块,进行编写和测试。

这些模块可以包括时钟模块、计数器模块、闹钟模块、数据显示模块等。

其中,时钟模块需要使用振荡器生成时钟信号,计数器模块必须进行计时,生成秒数和毫秒数的输出信号;然后,使用数码管显示模块将这些输出信号转换成可读的时间、日期和闹钟信息;再添加按键输入模块,以便用户操作和控制该电子钟系统。

第四步是系统测试。

在VHDL 设计结束后,需要对数字电子钟系统进行实际测试。

首先,系统测试需要用到仿真软件对整个系统进行验证。

同时,需要将程序下载到FPGA 芯片上,并通过硬件测试验证设计的电子钟系统是否符合需求和规范。

综上所述,设计数字电子钟系统需要遵循一定的流程,包括需求分析、架构设计和模块设计,在这个过程中也需要注重各个模块之间的兼容性和整体性。

这篇文档给大家介绍了使用VHDL 搭建数字电子钟系统的方法,希望广大读者可以从中获得借鉴。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要本次设计是通过使用VHDL语言设计了一个综合的计时系统,能实现年、月、日、时、分、秒、星期的计数综合计时功能,同时将计时结果用15个七段数码管显示,并且可通过两个设置键对计时系统有关的参数进行调整。

综合计时电路可分为计年电路、计月电路、计日电路、计时电路、计分电路、计秒电路、计星期电路等7个子模块,这7个子模块都具有预置、计数和进位功能。

关键词: VHDL;计时系统AbstractUsing the VHDL language design timing system ,a comprehensive system to achieve the year , month , day , hour ,minute and second weeks of counting and timing functions such as integrated , while timing the results of 15 seven-segment digital display ,and can be set by two key system parameters on the timing adjustment. Timing circuit integrated circuit can be divided into the seconds ,scoring circuit ,timing circuit, namely, on the circuit, monthly circuit, namely, 7-week circuit sub-module, which has a preset 7 sub-module, counting ,and carry function .Key words: VHDL;Timing system目录摘要 (I)Abstract (II)1 前言 (1)1.1 计时系统研究背景 (1)1.2 设计要求 (1)1.3 设计方案与方案优点 (2)1.4 设计的可行性 (3)2 外围电路设计 (4)2.1 电源设计 (4)2.2 方波信号源设计 (5)2.2.1晶振电路 (5)2.2.2分频电路 (6)2.3 七段数码显示电路 (7)2.4 总体电路设计 (9)3 VHDL内部电路设计 (10)3.1 综合计时电路设计 (10)3.1.1 计秒电路设计 (10)3.1.2 计分电路设计 (12)3.1.3 计时电路设计 (12)3.1.4 计日电路设计 (13)3.1.5 计月电路 (15)3.1.6 计年电路设计 (15)3.1.7 计星期电路设计 (15)3.2 调整控制电路设计 (16)3.3 显示控制电路设计 (20)3.4 总体设计 (24)4 VHDL程序仿真 (25)4.1 COUNT60仿真 (25)4.2 COUNDAY仿真 (25)4.3 调整模块仿真 (26)4.3.1 SELECT模块仿真 (26)4.3.2 FUZHI模块仿真 (27)4.4 显示模块仿真 (28)4.5 总体设计 (28)5 总结 (30)致谢 (31)参考文献 (32)附件 (33)1前 言1.1 计时系统研究背景计时器是人们日常生活、学习、工作和进行科学生产、管理、研究必备的仪器,其历史是伴随着人类文明史而发展.从远古时代的日晷、滴漏进展到现代化的机械钟表、石英电子钟表、原子钟表的历程,都是计时器的不断发展过程,它们记录了人类社会的进化和工业文明的发展。

随着电子工业的发展,数字电子技术已经深入到了人们的生活,而且各种各样的电子产品也在日新月异地向着高精尖和节能发展。

由于电子产品的功能不断的增加,使用也越来越方便,有些产品已经成为了人们日常生活中不可缺少的必须品。

综合计时系统就是这其中的一样,在当今迅速发展的社会形势下,它的作用更加被体现出来。

当代电子科学技术不断发展,计时器的智能型和精确性越来越受到人们的重视,人们不再满足于手表的作用,于是,产生了万年历这种新的计时器,它可以同时显示年,月,日,时,分,秒,星期等,大大方便了人们的生活和生产。

而本设计,采用最先进的电子自动化技术即EDA 技术,设计出更精确,更实用的综合计时器。

1.2设计要求设计一个综合性的计时系统,要求能实现年、月、日、时、分、秒及星期的计数等综合计时功能,同时将计时结果通过15个七段数码管显示,并且可通过两个设置键,对计时系统的有关参数进行调整。

具体系统功能面板如图1-1所示。

图1-1 计时系统功能面板1.3 设计方案与方案优点传统的电路设计方法都是自底向上进行设计的,也就是首先确定可用的元器年月日星期模式调整年月日时分秒星期件,然后根据这些器件进行逻辑设计,完成各模块后进行连接,最后形成系统。

而EDA技术的设计方法则是自顶向下进行设计的,也就是采用可完全独立于目标芯片物理结构的硬件描述语言,在系统的基本功能或行为级上对设计的产品进行描述和定义,结合多层次的仿真技术[2],在确保设计的可行性与正确性的前提下,完成功能确认,然后利用EDA工具的逻辑综合功能,把功能描述转换成某一具体目标芯片的网表文件,输出给该器件厂商的布局布线配适器,进行逻辑映射及布局布线,再利用产生的仿真文件进行包括功能和时序的验证,以确保实际系统的性能。

本设计选用Altera公司的FLEX10K系列芯片,该芯片采用5V的工作模式,由Altera公司的MAXplus2开发系统提供软件支持,以硬件描述语言VHDL为系统逻辑描述的主要表达方式,设计了一个综合计时系统[7]。

该系统主要分为三个主要模块:(1)综合计时模块:计时模块又可分七个小模块,有计秒模块,计分模块,计时模块,计日模块,计月模块,计年模块,计星期模块,用于完成各种计时的功能[16]。

其中,计秒电路的输入时钟周期为1秒,计分电路的输入时钟为计秒电路的输出进位,如此类推下去,构成每个计时模块之间的联系。

而计日模块又略有不同,因为每个月的日数受年份,月份影响,所以要输入当前的年份月份来判断是否闰年,是否大月,才可以实现准确的计时。

(2)调整控制电路则用于调整计时系统的有关参数,通过两个按键来对系统的参数进行修改,在修改过程中,对应的修改计时模块通过相应的灯点亮来表示数据正待输入。

(3)显示控制电路用于完成计时结果的显示控制及显示译码等功能,然后通过15个七段数码管显示出来。

采用自顶向下的设计方法有如下优点[5]:(1)对设计的描述从上到下逐步由粗略到详细,符合常规的逻辑思维习惯;(2)由于高层设计同器件无关,可以完全独立于目标器件的结构,因此避免了传统设计方法中的再设计风险,缩短了产品的上市周期;(3)由于系统采用硬件描述语言进行设计,可以完全独立于目标期间的结构,因此设计易于在各种集成电路工艺或可编程器件之间移植;(4)适合多个设计者同时进行设计。

利用EDA技术,它可快速,经济地设计出高性能的综合计时系统,并且很容易实现,修改及完善[2]。

1.4设计的可行性计时系统最关键的是计时的精确性。

利用固定的震荡频率作为时钟信号输入,利用计数循环,实现时间的变化,而低位计时进位信号则作为高位计时的时钟输入。

而采用VHDL来设计,可将每个计时模块独立设计,再连接起来,保证了每个模块独立运行的准确性。

再通过设计频率发生电路产生高频率作为最低时钟信号,更保证了系统运行的精确性,在整个设计中主要是以高精度、低功耗为目的。

2 外围电路设计根据系统设计要求,本综合计时系统主要由外围电路和VHDL内部电路组成[10]。

外围电路由电源、方波信号源、显示电路组成;VHDL内部电路由综合计时电路、调整控制和显示控制电路组成。

图2-1 系统原理框图2.1电源设计稳压电源由电源变压器、整流电路、滤波电路和稳压电路四个部分组成[12],如图所示。

图2-2直流稳压电源原理图即输入交流电压先经过变压器降压,在通过整流电路,变为单相电压,在通过滤波电路变将近直流,最后通过稳压电路输出所需要的直流稳压电源[4]。

图2-3直流稳压电源电路图设输出电压为 U=+5V—15V ,输出电流为I=800mA,则集成稳压器可选用CW317,其输出电压范围为:U0=1.2—37V,最大输出电流Imax为1.5A[15]。

在图中,R1和Rw组成输出电压调节,输出电压U0≈1.25(1+ Rw/ R1),取R1=200Ω,可得Rw≈2.2KΩ。

所以Rw可选2.5KΩ的精密线绕电位器。

由于CW317的输入电压与输出电压差的最小值为3V,,输入电压与输出电压差的最大值为40V,故CW317的输入电压范围为:12V到43V,所以变压器可选择输入功率为20W的型号。

整流二极管选用IN4001,其反向击穿电压为大于50V,额定工作电流为1A。

滤波电容C取容量为4700uF,耐压为25V电容。

其它的,C1=0.01uF, C2=10 uF, C0=1 uF。

由于本系统需要用到12V的电压和5V的电压,调节Rw,使输出U1为12V,作为信号源的输入电压。

再选用滑动变阻器Rw2=100Ω为分压器,调节出U2为5V作为FLEX10K的输入电压。

2.2 方波信号源设计2.2.1晶振电路晶振是利用具有典雅电效应的石英晶体片制成,这种石英晶体片受到外加交变电场的作用时会产生机械振荡,当交变电场的频率与石英晶体的固有频率相同时,振动就会很强烈,这就是晶体振荡的特性反应[1]。

利用这一特性,就可以用晶振取代LC谐振回路、滤波器等。

晶体振荡器的特点是频率准确,电路结构简单,频率易调整。

在此次设计中将采用双晶振来实现系统时钟[12]。

石英4.096MHz晶体振荡电路如图2 -4所示,采用反相器等元件构成。

利用一个与非门自我反馈,使它工作在线性状态;然后利用石英晶体来控制振荡频率,电阻为反馈元件,电容C防止寄生振荡,在输出端得到较稳定的4.096MHz脉冲信号。

在本次设计中将频率为4.096MHz的晶振作为综合计时系统的时钟信号。

图2-4 晶体振荡电路2.2.2分频电路本次设计采用的是由CD4060集成电路来构成分频电路,CD4060由一振荡器和14级二进制串行计数器位组成,振荡器的结构可以是RC或晶振电路,CR为高电平时,计数器清零且振荡器使用无效[1]。

所有的计数器位均为主从触发器。

在CP1和CP的下降沿计数器以二进制进行计数。

在时钟脉冲线上使用斯密特触发器对时钟上升和下降时间无限制。

其管脚图如图2-5所示。

图2-5 CD4060管脚C1=33pF ,C2=7/25pF, 晶振为4. 096M,R1=3MΩ,CD4060的电源为12V。

图2-6 1HZ方波电路在本次设计中采用一片集成电路计数器CD4060作为分频器[7],如图所示,CD4060与其10,11引脚的外接电阻R1,晶振Y及电容C1,C2构成振荡回路。

相关文档
最新文档