基于VHDL语言的数字电子钟课程设计报告书.doc

上传人:知****量 文档编号:43228321 上传时间:2022-09-17 格式:DOC 页数:25 大小:309.50KB
返回 下载 相关 举报
基于VHDL语言的数字电子钟课程设计报告书.doc_第1页
第1页 / 共25页
基于VHDL语言的数字电子钟课程设计报告书.doc_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《基于VHDL语言的数字电子钟课程设计报告书.doc》由会员分享,可在线阅读,更多相关《基于VHDL语言的数字电子钟课程设计报告书.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、基于VHDL语言的简易电子钟设计摘要 VHDL是广泛应用的硬件描述语言,可以用在硬件设计流程的建模、综合和模拟等多个阶段。随着硬件设计规模的不断扩大,应用硬件描述语言进行描述的CPLD结构,成为设计专用集成电路和其他集成电路的主流。通过应用VHDL对数字时钟的设计,达到对VHDL的理解,同时对CPLD器件加深了解。该系统在开发软件Quartus 环境中设计完成,本文给出了设计该数字时钟系统的流程和方法,最后通过CPLD实现预定功能。关键词:电子钟;硬件描述语言;VHDL;Quartus ;CPLD目录引言1第一章设计任务与功能要求11.1设计课题容11.2功能要求说明1第二章系统设计方案22.

2、1电子钟工作原理22.2总体方案设计2第三章电子钟顶层设计23.1顶层设计分析23.2 顶层电路图3第四章各功能模块的设计44.1正常计时模块44.1.1分频模块设计44.1.2 60进制计数器设计54.1.3 24进制计数器设计54.2整点报时模块64.2.1整点报时设计思路与原理图64.2.2整点报时仿真波形74.3分时校对模块74.3.1分时校对设计思路与原理图74.3.2分时校对仿真波形74.4扫描输出模块84.4.1扫描输出设计思路与原理图84.4.2扫描输出仿真波形84.5译码显示模块94.5.1译码显示设计思路与原理图94.5.2译码显示仿真波形10第五章系统硬件实现分析105.

3、1 引脚分配105.2 系统硬件测试与分析11第六章结束语11参考文献11附录1顶层电路图12附录2程序代码1223 / 25引言数字时钟是一种用数字电路技术实现时、分、秒计时的装置,数字时钟走时精度高,稳定性好,使用方便,不需要经常调校,数字式时钟用秒脉冲发生器的精度稳定保证了数字钟的质量。电子设计自动化(EDA)技术发展越来越迅速,利用计算机辅助设计已成为发展趋势。VHDL语言具有强大的电路描述和建模能力,用VHDL开发的数字电路与开发平台以与硬件实现芯片无关,可移植性、可重用性好。VHDL语言能够在系统级、行为级、寄存器传输级、门级等各个层次对数字电路进行描述,并可以在不同层次进行不同级

4、别的仿真,能极大得保证设计的正确性和设计指标的实现。Quartus 设计软件提供了一个完整的、多平台的设计环境,它可以轻易满足特定设计项目的要求。第一章设计任务与功能要求1.1设计课题容1学习ALTERA公司的FPGA/CPLD的结构、特点和性能。2学习集成开发软件MAX+plus II/Quartus II的使用与设计过程。3熟悉EDA工具设计数字电路设计方法,掌握VHDL硬件描述语言设计方法。4根据给定题目设计数字电路,来加深对可编程逻辑器件的理解和掌握。1.2功能要求说明1在所选择器件完成简易时钟的设计,要求设计完成后芯片具有时、分、秒的计时;译码;输出七段码;最大计时23时59分59秒

5、;秒闪功能。2简易时钟要求具有对时功能,具体对时的实现方式自行决定,要求设计合理,以操作简单为原则(根具具体的工作进度,可以考虑增加整点报时等附加功能)。3在相应的器件平台上完成设计的输入、编译、综合或适配通过。第二章 系统设计方案2.1电子钟工作原理系统主要由振荡器、分频器、计数器、译码显示电路和校时电路组成。振荡器产生稳定的分频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60分向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照二十四进制计数。计数器的输出分别由译码器送显示器显示。计时出现误差时,可以用校时电路校时、校分。2.2总体方案设计数字电子钟

6、由振荡器、分频器、计数器、译码显示电路和校时电路组成。振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。计数器的输出分别经译码器送显示器显示。计时出现误差时,可以用校时电路校时、校分。1)时钟产生电路。将开发板上的时钟信号经过分频得到不同频率的时钟,分别作用于定时计数、LED扫描。2)控制逻辑电路。完成电子钟的系统逻辑控制,包括计时控制、时间校对、显示扫描的逻辑控制,可完成系统复位、调整时间的功能。3)计时电路。主要按照时钟模式完成计时功能。4)译码电路。根据计

7、时模块的状态输出值来确定对应位的数据,从而驱动显示电路。5)显示控制电路。主要执行选择所对应位的数据功能,显示正确的时间。为了节省6个七段显示器显示所需的电流消耗,本文利用视觉暂留原理来让七段显示器轮流来显示。第三章电子钟顶层设计3.1顶层设计分析对于电子钟的设计,这里将采用自顶向下的设计方法进行设计,因此首先需要进行电子钟的顶层设计。这里首先介绍电子钟的系统结构和模块划分,然后设计出顶层VHDL设计程序。根据前边所述的电子钟的设计要求、工作原理和设计方案,这里给出设计系统结构框图和外部管脚图分别如图3.1和图3.2所示。译码显示模块扫描输出模块正常计时模块电子钟系统整点报时模块分时校对模块图

8、3.1 系统结构框图图3.2 系统外部管脚图由电子钟的外部管脚图可知,系统的输入输出信号包括:(1)复位开关信号reset:输入信号;(2)外部输入的晶振信号clk_in:输入信号;(3)分/时调整信号setmin,sethour:输入信号;(4)报时触发信号speak:输出信号;(5)数码管输出选通信号sel5.0:输出信号;(6)LED七段数码管的输出信号led6.0,dp:输出信号。由图3.1知,系统划分了五个模块,划分的这五个模块,每个模块都包含若干个组件,因此首先建立一个程序包把所有的组件包含在一起,以便于主程序模块的调用,然后再对每个组件进行编程设计。3.2 顶层电路图顶层电路图见

9、附录1。第四章 各功能模块的设计4.1正常计时模块系统必须维持一个持续不断计数的时钟,从时间00:00:00到23:59:59不断循环。首先将50MHZ的系统输入脉冲分频5000000得到1HZ的基本秒输入,秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。这些功能的实现要用到三种组件:分频组件,60进制计时组件,24进制计时组件。4.1.1分频模块设计本设计采用CPLD芯片EP2C20,部晶振为50MHz,而数码管位扫描信号clk1=1000Hz,计时时钟信号clk=1Hz。所以要用分频模块来对输入时钟进行分频。下图4.1是生成的分频组件元

10、器件图形。接口:clks:时钟输入,输入信号50MHzclk:1Hz输出信号 clk1:扫描频率信号图4.1分频模块器件图在Quartus软件中进行仿真后,仿真时设置3000分频得到clk,500分频得到clk1。仿真时序图如图4.2。图4.2 分频模块仿真波形图由图4.2知,输入信号clks= 10ns,输出信号clk1= 5us,clk= 30us,证明分频是正确的。4.1.2 60进制计数器设计秒数的计数以1Hz的输入clk为触发信号,分数的计数以秒数的进位输出 enmin 作为触发。下图4.3是60进制计数器器件图形。接口: clk:1hz时钟信号clk1:校时时钟信号reset:复位

11、信号daout:输出十进制信号setmin,sethour:校分控制信号enmin,enhour:进位信号图4.3 60进制秒计数器器件图图4.3 60进制分计数器器件图在Quartus软件中进行仿真后,得到仿真时序图如图4.4。图4.4 60进制计数器仿真波形图由图4.4知,每来一个clk上升沿,计数器就加1,当计数器当到达第60个上升沿时,enmin=1,daout由59归零,仿真符合60进制计数器的要求。4.1.3 24进制计数器设计24进制计数器的结构和原理与60进制计数器相类似,只是将除以60改为除以24。个位数的进位归零在十进制为2时,必须在one等于3时进位,同时送出进位指针fu

12、ll=1,1小时后将指针归零。下图4.5是生成的24进制计数器器件图形。接口: clk:分的进位信号reset:复位信号daout:输出十进制的小时数图4.5 24进制计数器器件图在Quartus软件中进行仿真后,得到仿真时序图如图4.6。图4.6 24进制计数器仿真波形由上图4.6知,每来一个clk上升沿,计数器就加1,当计数器当到达第24个上升沿时,daout由59归零,仿真符合24进制计数器的要求。4.2整点报时模块4.2.1整点报时设计思路与原理图当计数时间在59分59秒时,报时模块输出报时控制信号。输出speak=clk1=1000Hz驱动蜂鸣器报时。下图4.7是生成的整点报时器件图

13、形。接口:clk1:驱动信号reset:复位信号dainm,dains:输入秒数、分数speak:输出信号图4.7整点报时器件图4.2.2整点报时仿真波形在Quartus软件中进行仿真后,得到仿真时序图如图4.8。图4.8整点报时仿真波形由上图4.8知,当dainm、dains都为0时,speak输出为clk1,仿真符合整点报时的要求。4.3分时校对模块4.3.1分时校对设计思路与原理图当电子钟正常计时,校对信号setmin,sethour都为1。当需要分校对时,setmin=0,秒信号送入分计数器时钟信号,进行时校对,sethour=0,秒信号送入时计数器时钟信号。通过setmin,seth

14、our能够很方便的校对成功。下图4.9是生成的分时校对器件图形。接口: clk:1hz时钟信号 reset:复位信号 setmin:校分控制信号 enmin:进位信号图4.9校分器件图4.3.2分时校对仿真波形在Quartus软件中进行仿真后,得到仿真时序图如图4.10。图4.10校分仿真波形由上图4.10知,当校分控制信号为setmin = 0时,分的时钟信号enmin = clk,实现分钟快速计数校对到正确时间。仿真结果符合设计要求。校时仿真波形与校分基本类似。4.4扫描输出模块4.4.1扫描输出设计思路与原理图为了节省IC的输出引脚与耗电量,可以将6组数字输出作为多路输出;另外使用八合一

15、型七段显示器与视觉暂留效应可降低显示耗电量。首先将6个数值通过扫描模块分时选通七段数码管,依次将秒、分、时的数据扫描输出。下面图4.11是生成的扫描输出器件图形。接口: clk1:扫描信号 reset:复位信号sec,min,hour:输入信号sel:选通信号daout:输出信号 dp:小数点信号图4.1扫描输出器件图形4.4.2扫描输出仿真波形在Quartus软件中进行仿真后,得到仿真时序图如图4.12。图4.12扫描输出器件仿真波形由上图4.12知,每来一个clk上升沿,daout就输出一位,当6个上升沿后,已依次将秒、分、时输出。下一个上升沿重新分时扫描输出。仿真可实现扫描输出。4.5译

16、码显示模块4.5.1译码显示设计思路与原理图译码为编码的逆过程。它将编码时赋予代码的含义“翻译”过来。实现译码的逻辑电路为七段数码管。共阳极数码管输出与输入有唯一的对应关系。输入输出关系如下表41。表41 输入输出关系表输入输出字型D C B Aa b c d e f g 0 0 0 00 0 0 0 0 0 100 0 0 11 0 0 1 1 1 110 0 1 00 0 1 0 0 1 020 0 1 10 0 0 0 1 1 030 1 0 01 0 0 1 1 0 040 1 0 10 1 0 0 1 0 050 1 1 00 1 0 0 0 0 060 1 1 10 0 0 1 1

17、 1 171 0 0 0 0 0 0 0 0 0 081 0 0 10 0 0 0 1 0 09译码即把给定的代码进行翻译,本设计即是将时、分、秒计数器输出的四位二进制数代码翻译为相应的十进制数,并通过数码管显示。下图4.13是生成的译码显示器件图形。接口: num:09输入信号led:七段数码管显示值图4.13译码显示器件图形4.5.2译码显示仿真波形在Quartus软件中进行仿真后,得到仿真时序图如图4.14。图4.14译码显示器件仿真波形由上图4.14知,输入的是0到9的二进制表示形式,输出的是七段显示译码,本设计的七段显示器是共阳极的,所以,如输入时6的二进制0110,输出是01000

18、00,对应十六进制是20。仿真证明程序是可行的。第五章系统硬件实现分析5.1 引脚分配当各个模块仿真结束之后,就分配管脚,分配管脚如图5.1。图5.1分配管脚图分配完管脚之后,再编译一次,编译通过之后,就可以下载到CPLD上了。5.2 系统硬件测试与分析将setmin、sethour、reset均接高电平,接通电源,数码管能正常显示数字,6个数码管分别显示时、分、秒,扫描显示电路设计正确。将校分按键开关setmin按下接低电平,分会秒计,则“分”校时电路能正确校时,同理,校时一样,说明校对电路设计正确。当分计数到59分59秒时下个时钟信号过来扬声器就会响,则整点报时电路设计正确。将reset接

19、低电平,数字钟准确清零。通过对电路各个功能进行综合测试,本电子钟钟各项功能指标均达到设计要求,则本设计取得圆满成功。第六章结束语本设计是用VHDL语言编写编译建模设计成的。由于初学VHDL语言,设计初期遇到了很多困难,在经过一段时间的查阅资料以与老师的指导和同学之间的相互讨论后完成了设计,但程序即使编译成功仿真还是遇到了很多困难,比如不知道该如何进行模块例化调用。在经过一次次试验和修改后仿真终于正确,仿真无误后就根据元件引脚进行元器件之间的连线。通过本次课程设计,让我对数字电子钟有了更深刻的理解,也对用VHDL语言设计实验有了更好的了解。进一步掌握了有关数字钟的工作原理与相关设计知识。特别是对

20、其各工作模块的功能有了更深一步的了解。实验过程中熟悉了对Quartus 软件的操作与应用,提高了个人独立分析问题与解决问题的能力,掌握了VHDL硬件描述语言设计方法,也深刻体会到了VHDL在功能设计中所具有的优越性。参考文献1康华光 主编,电子技术基础-数字部分,高等教育,1998。2亚民等 主编,可编程逻辑器件开发软件Quartus,国防工业,20063谭会生等 主编,EDA技术与应用,电子科技大学,20014潘松等 主编,EDA技术实用教程,科学,20065雷伏容 主编,VHDL电路设计,清华大学,2006附录1顶层电路图附录2程序代码-电子钟顶层VHDL设计程序library ieee;

21、use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity e_clock is port(clk_in:in std_logic;-晶振时钟信号 reset:in std_logic;-复位信号 setmin,sethour:in std_logic;-校对控制 speak:out std_logic;-报时输出 dp:out std_logic;-小数点输出 sel:out std_logic_vector(5 downto 0);-分时选通 led:out

22、std_logic_vector(6 downto 0);-译码显示end e_clock;architecture structure of e_clock is component div_clk-分频模块声明部分 port(clks:in std_logic; clk:out std_logic; clk1:out std_logic); end component; component second-秒模块声明部分 port(clk,reset,setmin:in std_logic; enmin:out std_logic; daout:out std_logic_vector(7

23、downto 0); end component; component minute-分模块声明部分 port(clk,reset,clk1,sethour:in std_logic; enhour:out std_logic; daout:out std_logic_vector(7 downto 0); end component; component hour-时模块声明部分 port(clk,reset:in std_logic; daout:out std_logic_vector(7 downto 0); end component; component alarm-报时模块声明部

24、分 port(clk1,reset:in std_logic; dainm:in std_logic_vector(7 downto 0); dains:in std_logic_vector(7 downto 0); speak:out std_logic); end component; component seltime-扫描输出模块声明部分 port(clk1,reset:in std_logic; sec,min,hour:in std_logic_vector(7 downto 0); dp:out std_logic; sel:out std_logic_vector(5 dow

25、nto 0); daout:out std_logic_vector(3 downto 0); end component; component deled-译码显示声明部分 port(num: in std_logic_vector(3 downto 0); led: out std_logic_vector(6 downto 0); end component;signal clk,clk1:std_logic;signal enmin,enhour:std_logic;signal sec :std_logic_vector(7 downto 0);signal min :std_log

26、ic_vector(7 downto 0);signal hor:std_logic_vector(7 downto 0);signal daout:std_logic_vector(3 downto 0);begin u0:div_clk port map(clk_in,clk,clk1); u1:second port map(clk,reset,setmin,enmin,sec); u2:minute port map(enmin,reset,clk,sethour,enhour,min); u3:hour port map(enhour,reset,hor); u4:alarm por

27、t map(clk1,reset,min,sec,speak); u5:seltime port map(clk1,reset,sec,min,hor,dp,sel,daout); u6:deled port map(daout,led);end structure;-分频模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div_clk isport(clks:in std_logic;-晶振时钟信号 clk:out std_logic;-1Hz基准时钟信号 clk1:out st

28、d_logic);-1000Hz扫描频率信号end div_clk;architecture behave of div_clk issignal temp0: integer range 0 to 49999999;signal temp1: integer range 0 to 49999; begin process(clks) begin if(clksevent and clks=1)thenif(temp0=49999999)then temp0=0;else temp0=24999999 then clk=1; else clk=0;end if; end if; end pro

29、cess; process(clks) begin if(clksevent and clks=1)thenif(temp1=49999)then temp1=0;else temp1=24999 then clk1=1; else clk1=0;end if; end if; end process;end behave;-秒计数模块(second.vhd)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second is port(clk,reset,setmin:in std_

30、logic; enmin:out std_logic;-分钟时钟端 daout:out std_logic_vector(7 downto 0);-数据输出end second;architecture art of second is signal count:std_logic_vector(7 downto 0); signal enmin_1,enmin_2:std_logic; begin daout=count; enmin_2=(not setmin and clk);-setmin=0,选通校分时钟CLK enmin=(enmin_1 or enmin_2); process(

31、clk,reset) begin if(reset=0)then count=00000000; enmin_1=0; elsif(clkevent and clk=1)then if(count(3 downto 0)=1001)then if(count16#60#)then if(count=01011001)then enmin_1=1;count=00000000; else count=count+7;-个位向十位进1 end if; else count=00000000; end if; elsif(count16#60#)then count=count+1; enmin_1

32、=0; else count=00000000;enmin_1=0; end if; end if; end process; end art;-分计数模块(minute.vhd)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute is port(clk,reset,clk1,sethour:in std_logic; enhour:out std_logic;-送小时时钟端 daout:out std_logic_vector(7 downto 0);-数据输出end m

33、inute;architecture rtl of minute is signal count:std_logic_vector(7 downto 0); signal enhour_1,enhour_2:std_logic; begin daout=count; enhour_2=(not sethour and clk1);-sethour=0,选通校时时钟CLK1 enhour=(enhour_1 or enhour_2); process(clk,reset,sethour) begin if(reset=0)then count=00000000; enhour_1=0; elsi

34、f(clkevent and clk=1)then if count(3 downto 0)=1001then if(count16#60#)then if count=01011001then enhour_1=1;count=00000000; else count=count+7;-个位向十位进1 enhour_1=0; end if; else count=00000000; end if; elsif(count16#60#)then count=count+1; enhour_1=0 after 100 ns; else count=00000000;enhour_1=0; end

35、 if; end if; end process; end rtl;-小时计数模块(hour.vhd)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour is port(clk,reset:in std_logic; daout:out std_logic_vector(7 downto 0);-数据输出end hour;architecture rtl of hour is signal count:std_logic_vector(7 downto 0); begin da

36、out=count; process(clk,reset) begin if(reset=0)then count=00000000; elsif(clkevent and clk=1)then if count(3 downto 0)=1001then if(count16#23#)then count=count+7;-个位向十位进1 else count=00000000; end if; elsif(count16#23#)then count=count+1; else count=00000000; end if; end if; end process; end rtl;-报时模

37、块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alarm is port(clk1,reset:in std_logic; dainm:in std_logic_vector(7 downto 0); dains:in std_logic_vector(7 downto 0); speak:out std_logic);end alarm;architecture art of alarm is signal s_speak: std_logic;begin process(cl

38、k1,reset) begin if(reset=0)then s_speak=0; elsif(dainm=00000000)then if(dains=00000000)then s_speak=clk1; else s_speak=0; end if; else s_speak=0; end if; end process; speak=s_speak;end art;-时间扫描模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;en

39、tity seltime is port(clk1,reset:in std_logic; sec,min,hour:in std_logic_vector(7 downto 0); dp:out std_logic; sel:out std_logic_vector(5 downto 0);-分时选通 daout:out std_logic_vector(3 downto 0);-分时扫描输出end seltime;architecture art of seltime is signal count:std_logic_vector(2 downto 0); begin process(clk1,reset) begin if(reset=0)then count=101)then count=000; else count

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁