《数字钟设计课程设计.doc》由会员分享,可在线阅读,更多相关《数字钟设计课程设计.doc(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、东 北 石 油 大 学课 程 设 计课 程 硬件课程设计 题 目 数字钟设计 院 系 计算机和信息技术学院 专业班级 学生姓名 学生学号 指导教师 2009年 7 月 10 日2012年7月6日东北石油大学课程设计任务书课程 硬件课程设计题目 数字钟设计专业 计算机科学和技术 姓名 学号 主要内容、基本要求等一、主要内容:利用EL教学实验箱、微机和Quartus软件系统,使用VHDL语言输入方法设计数字钟。可以利用层次设计方法和VHDL语言,完成硬件设计设计和仿真。最后在EL教学实验箱中实现。二、基本要求:1.具有时,分,秒,计数显示功能,以24小时循环计时。 2.具有清零功能。三、扩展要求:
2、1.调节小时、分钟功能。 2.整点报时功能,整点报时的同时LED灯花样显示。四、参考文献:1 潘松,王国栋,VHDL实用教程M.成都:电子科技大学出版社,2000.(1)2 崔建明主编,电工电子EDA仿真技术 北京:高等教育出版社,20043 李衍编著,EDA技术入门和提高王行 西安:西安电子科技大学出版社,20054 侯继红, 李向东主编,EDA实用技术教程 北京:中国电力出版社,20045 沈明山编著,EDA技术及可编程器件应用实训 北京:科学出版社,2004 完成期限 1920周 指导教师 专业负责人 2012年 6月 10日摘 要本文介绍了利用EDA-V硬件系统和微机上的Quartus
3、7.2-II等软件系统。VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。本文设计
4、主要利用VHDL语言在EDA平台上设计一个电子数字钟,它的计时周期为24小时,显示满刻度为23时59分59秒,另外还具有校时功能和闹钟功能。总的程序由几个各具不同功能的单元模块程序拼接而成,其中包括分频程序模块、时分秒计数和设置程序模块、比较器程序模块、三输入数据选择器程序模块、译码显示程序模块和拼接程序模块。并且使用Quartus7.2-II软件进行电路波形仿真,下载到EDA实验箱进行验证。关键词: EDA(电子设计自动化);VHDL(硬件描述语言),数字钟。目录第1章 概 述11.1 EDA的概念11.2 EDA的工作平台2第2章 数字钟的系统分析42.1设计目的42.2功能说明42.3实
5、验原理42.4系统硬件4第3章 数字钟的底层电路设计63.1设计规划63.2设计说明63.3底层电路程序74.1设计说明144.2顶层文件程序14第5章 数字钟的测试和运行215.1数字钟的编译和仿真215.2数字钟的适配和测试24结 论25参考文献. 261 / 31第1章 概 述1.1 EDA的概念现在是一个知识爆炸的新时代。新产品、新技术层出不穷,电子技术的发展更是日新月异。可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将
6、会带来很大的损失。因此我们需要一个定时系统来提醒这些忙碌的人。数字化的钟表给人们带来了极大的方便。近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。EDA代表了当今电子设计技术的最新发展方向,它的基本特征是:设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(HDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件,这样的设计方法被称为高层次的电子设计方法。1.1
7、.1EDA技术及应用电子设计技术的核心就是EDA技术,EDA是指以计算机为工作平台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计。EDA技术已有30年的发展历程,大致可分为三个阶段。70年代为计算机辅助设计(CAD)阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作。80年代为计算机辅助工程(CAE)阶段。和CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。CAE的主要功能是:原理图输
8、人,逻辑仿真,电路分析,自动布局布线,PCB后分析。90年代为电子系统设计自动化(EDA)阶段3。EDA技术发展迅猛,逐渐在教学、科研、产品设计和制造等各方面都发挥着巨大的作用。在教学方面:几乎所有理工科(特别是电子信息)类的高校都开设了EDA课程。主要是让学生了解EDA的基本原理和基本概念、鳞握用佃L描述系统逻辑的方法、使用扔A工具进行电子电路课程的模拟仿真实验并在作毕业设计时从事简单电子系统的设计,为今后工作打下基础。具有代表性的是全国每两年举办一次大学生电子设计竞赛活动。在科研方面:主要利用电路仿真工具(EWB或PSPICE、VLOL等)进行电路设计和仿真;利用虚拟仪器进行产品调试;将O
9、)LI)FPGA器件的开发应用到仪器设备中。例如在CDMA无线通信系统中,所有移动手机和无线基站都工作在相同的频谱,为区别不同的呼叫,每个手机有一个唯一的码序列,CDMA基站必须能判别这些不同观点的码序列才能分辨出不同的传呼进程;这一判别是通过匹配滤波器的输出显示在输人数据流中探调到特定的码序列;FPGA能提供良好的滤波器设计,而且能完成DSP高级数据处理功能,因而FPGA在现代通信领域方面获得广泛应用4。在产品设计和制造方面:从高性能的微处理器、数字信号处理器一直到彩电、音响和电子玩具电路等,EDA技术不单是应用于前期的计算机模拟仿真、产品调试,而且也在批量制作、电子设备的研制和生产、电路板
10、的焊接等有重要作用。可以说电子EDA技术已经成为电子工业领域不可缺少的技术支持。本设计主要研究基于FPGA的数字钟,要求时间以24小时为一个周期,显示时、分、秒。采用1HZ的基准信号产生1S的基准时间,秒的个位加到10就向秒的十位进一,秒的十位加到6就向分的个位进一,分的个位加到10就向分的十位进一,分的十位加到6就向时进一。该时钟具有清零功能,可以对时、分及秒进行清零,为了保证计时的稳定及准确须由晶体振荡器提供时间基准信号。该系统是基于FPGA的设计,采用VHDL进行系统功能描述,采用自顶向下的设计方法,用QUARTUS软件进行仿真测试。1.2 EDA的工作平台1.2.1 EDA硬件工作平台
11、1.计算机。2.EDA实验开发系统:EDA-V。1.2.2 EDA 的软件工作平台PLD(Programmable Logic Device)是一种由用户根据需要而自行构造逻辑功能的数字集成电路。目前主要有两大类型:CPLD(Complex PLD)和FPGA(Field Programmable Gate Array)。它们的基本设计方法是借助于EDA软件,用原理图、状态机、布尔表达式、硬件描述语言等方法,生成相应的目标文件,最后用编程器或下载电缆,由目标器件实现。生产PLD的厂家很多,但最有代表性的PLD家为Altera、Xilinx和Lattice 公司。第2章 数字钟的系统分析2.1设
12、计目的1)掌握VHDL语言的基本运用2)掌握MAX+plusII的简单操作并会使用EDA实验箱3)掌握一个基本EDA实验的操作2.2功能说明1)有时、分、秒计数显示功能,小时为24进制,分钟和秒为60进制2)设置复位、清零等功能3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间4)设置调试模式和计时两个模式,分别实现计时和调时功能,通过设置任意 时间实现闹铃功能2.3实验原理在同一EPLD芯片EPF10K10上集成了如下电路模块:1时钟计数:秒60进制BCD码计数;分60进制BCDD码计数;时24进制BCDD码计数;同时整个计数器有清零,调分,调时功能。在接近整数时间能提供报时信
13、号。2具有驱动8位八段共阴扫描数码管的片选驱动信号输出和八段字形译码输出。编码和扫描可参照“实验四”。3扬生器在整点时有报时驱动信号产生。4. LED灯按个人口味在整点时有花样显示信号产生。2.4系统硬件1主芯片EPF10K10LC84-4。28个LED灯。3扬声器。48位八段扫描共阴级数码显示管。5三个按键开关(清零,调小时,调分钟)。 第3章 数字钟的底层电路设计3.1设计规划该数字钟可以实现3个功能:计时功能、整点报时功能和重置时间功能,因此有3个子模块:计时、报时(alarm1)、重置时间(setmin1、sethour1)。其中计时模块有3部分构成:秒计时器(second1)、分计时
14、器(minute1)、时计时器(hour1)。1. 秒计数模块:秒计数,在频率为1HZ的时钟下以60次为循环计数,并产生进位信号影 响分计数。 2. 分计数模块:分计数,在秒进位信号为高电平时,计数一次,同样以60次为一个循环计数,同时产生分进位信号影响时计数。3. 时计数模块:时计数,在分进位信号为高电平时,计数一次,以24次为一个循环计数。4. 时间显示模块:通过选中不同的数码管,同时进行一定频率的扫描显示时,分,秒。5. 时间设置模块:设置调试使能端,可以调时,分。基本功能是在使能端为高电平时,可以使时和分循环计数;6. 整点报时模块:在秒计数到50秒时,同时分计数到59分开始,丰鸣器产
15、生每个2秒的鸣叫(500HZ),到整点是产生750HZ的鸣叫。7. 闹钟模块:在设定闹钟闹铃时间后,当闹钟使能端有效时,可在闹铃时间闹铃,并有彩灯显示。3.2设计说明首先分析数字时钟,得出进位法则大体相同,故所得时分秒进位方式语法基本相同,因此可以将时分秒定义成六位输出端口,即分别将时分秒定义为3个component,分别给予设计。3.3底层电路程序3.3.1 秒计时器(VHDL语言编译)其代码如下:(VHDL语言):LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY second IS
16、PORT(clk, reset,setmin : INSTD_LOGIC;enmin : OUTSTD_LOGIC;daout: out std_logic_vector (6 downto 0);END entity second;ARCHITECTURE fun OF second ISSIGNAL count: STD_LOGIC_VECTOR( 6 downto 0);BEGIN daout = count; process ( clk , reset , setmin) begin - enmin=k; if (reset=0) then count = 0000000; elsif
17、 (setmin=0) then enmin = clk; elsif (clk event and clk=1) then if (count(3 downto 0)=1001) then if (count 16#60#) then if (count=1011001) then enmin=1; count=0000000; ELSE count=count+7; end if; else count=0000000; end if; elsif (count 16#60#) then count = count+1; enmin=0 after 100 ns; else count=0
18、000000; end if; end if; end process;END fun;秒计时器实际上是一个60进制的计数器,它从时钟脉冲接受脉冲信号,每当一个脉冲信号来时,秒就自动加1,所以,输入的时钟信号应该是的频率应该是1hz,当秒计满60时,发出一个脉冲信号给分组件,再将本身清零。这样,每计满60s,分钟就加1,正好按着正常的时间规律计时。3.3.2分计时器(VHDL语言编译)其代码(VHDL语言)如下:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY minute ISPOR
19、T(clk, clk1,reset,sethour : INSTD_LOGIC;enhour : OUTSTD_LOGIC;daout: out std_logic_vector (6 downto 0);END entity minute;ARCHITECTURE fun OF minute ISSIGNAL count: STD_LOGIC_VECTOR( 6 downto 0);BEGIN daout = count; process ( clk,reset,sethour) begin if (reset=0) then count = 0000000; elsif (sethour=
20、0) then enhour = clk1; elsif (clk event and clk=1) then if (count(3 downto 0)=1001) then if (count 16#60#) then if (count=1011001) then enhour=1; count=0000000; ELSE count=count+7; end if; else count=0000000; end if; elsif(count 16#60#) then count = count + 1; enhour=0 after 100 ns; else count=00000
21、00; end if; end if; end process;END fun;分计时器也是一个60进制的计数器,它从秒计时器的脉冲输出端接受脉冲信号。每当一个脉冲信号来时,分就自动加1,当分计满60时,发出一个脉冲信号给时组件,再将本身清零。这样,每计满60MIN,小时就加1,正好按着正常的时间规律计时。该模块还能对分进行数字调整,并可以将其全部清零。3.3.3时计时器(VHDL语言)代码如下: LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY hour ISPORT(clk,res
22、et: INSTD_LOGIC;daout: out std_logic_vector (5 downto 0);END entity hour;ARCHITECTURE fun OF hour ISSIGNAL count: STD_LOGIC_VECTOR( 5 downto 0);BEGIN daout = count; process ( clk,reset) begin if (reset=0) then count = 000000; elsif (clk event and clk=1) then if (count(3 downto 0)=1001) then if (coun
23、t 16#24#) then count=count + 7; else count=000000; end if; elsif(count 16#24#) then count = count + 1; else count=000000; end if; end if; end process;END fun;时计时器是一个24进制的计数器,它从分组件的脉冲信号输出端接受脉冲信号,每当一个脉冲信号来时,时就自动加1,并且输出个信号给时组件,直到计满24,再将本身清零。该组件还能对时进行数字调整,并可以将其全部清零。3.3.4时间显示Deled(VHDL语言)代码如下:LIBRARY iee
24、e;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY deled ISPORT(num: INstd_logic_vector( 3 downto 0); led: OUT std_logic_vector(6 downto 0);END deled;ARCHITECTURE fun OF deled ISBEGIN led = 1111110 when num= 0000 else 0110000 when num= 0001 else 1101101 when num= 0010 else 1111001
25、when num= 0011 else 0110011 when num= 0100 else 1011011 when num= 0101 else 1011111 when num= 0110 else 1110000 when num= 0111 else 1111111 when num= 1000 else 1111011 when num= 1001 else 1110111 when num= 1010 else 0011111 when num= 1011 else 1001110 when num= 1100 else 0111101 when num= 1101 else
26、1001111 when num= 1110 else 1000111 when num= 1111 ;END fun;Deled模块是一个简单的电路,它的功能将时、分、秒三个组件中所计的数编码后,能对应在七段数码管山显示成数字形式。3.3.5报时模块alert(VHDL语言)代码如下:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY alert ISPORT(clk : INSTD_LOGIC;dain : INSTD_LOGIC_VECTOR(6 DOWNTO 0);speak:
27、OUTSTD_LOGIC;lamp : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END alert ;ARCHITECTURE fun OF alert ISsignal count : std_logic_vector( 1 downto 0);signal count1: std_logic_vector( 1 downto 0);BEGINspeaker:process (clk)begin speak =10) then count1=00;elsecount1 = count1 + 1;end if; end if;end if;end process sp
28、eaker;lamper:process(clk)beginif (rising_edge(clk)then if (count = 10) thenif (count =00) thenlamp = 001 ;elsif (count = 01) thenlamp = 010 ;elsif(count=10) then lamp = 100 ;end if;count = count + 1;else count = 00;end if; end if; end process lamper;END fun ;报时模块也是个简单的程序,它的功能是:当每满一个小时时,有该组件输出一个脉冲信号给
29、试验箱上的喇叭,喇叭会相应其信号,能持续发出一段蜂鸣声,从而达到报时的目的。3.3.6译码模块seltime(VHDL语言)代码如下:LIBRARY ieee;use ieee.std_logic_1164.alluse ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;ENTITY seltime ISPORT(clk1, reset: INSTD_LOGIC;sec,min : INSTD_LOGIC_VECTOR(6 downto 0);hour : in std_logic_vector (5 downto 0);daou
30、t: OUTSTD_LOGIC_vector (3 downto 0);sel : out std_logic_vector ( 2 downto 0);END seltime;ARCHITECTURE fun OF seltime ISSIGNAL count: STD_LOGIC_vector ( 2 downto 0);BEGIN sel = count; process ( clk1,reset) begin if (reset =0) then count = 101) then count = 000; else count daout daout(3) = 0; daout(2
31、downto 0) daout daout(3) = 0; daout(2 downto 0) daout daout(3 downto 2) = 00; daout(1 downto 0) = hour(5 downto 4); end case;end process;第4章 数字钟的顶层文件设计4.1设计说明建立数字钟的顶层文件就是将已经设计好的各个功能组件组合调用,连成一个整体,使整个系统按照设计要求在实际中工作起来。4.2顶层文件程序代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.al
32、l;entity szz isport(clk:in std_logic; clk1:in std_logic; md1:in std_logic; md2:in std_logic_vector(1 downto 0); speak:out std_logic; dout:out std_logic_vector(6 downto 0); selout:out std_logic_vector(2 downto 0);end szz;architecture one of szz issignal sel:std_logic_vector(2 downto 0);signal hou1:st
33、d_logic_vector(3 downto 0);signal hou2:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);signal seth1:std_logic_vector(3 downto 0);signal seth2:std_logic_vector(3 downto 0);signal setm1:std_logic_vector(3 downto 0);signal setm2:std_logic_v
34、ector(3 downto 0);signal sec1:std_logic_vector(3 downto 0);signal sec2:std_logic_vector(3 downto 0);signal h1:std_logic_vector(3 downto 0);signal h2:std_logic_vector(3 downto 0);signal m1:std_logic_vector(3 downto 0);signal m2:std_logic_vector(3 downto 0);signal s1:std_logic_vector(3 downto 0);signa
35、l s2:std_logic_vector(3 downto 0);-begin-模6计数choice:process(clk1)beginif clk1event and clk1=1 thenif sel=101 thensel=000;elsesel=sel+1;end if;end if;end process choice;-小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif (hou1=0010 and hou2=0011)and(min1=0101 and
36、min2=1001) and (sec1=0101 and sec2=1001) thenhou1=0000;elsif hou1=0010and hou2=0011and md1=0 and md2=01 then-当时间为23点且处于校时状态时hou1=0000;elsif (hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001)or (hou2=1001and md1=0 and md2=01) thenhou1=hou1+1;end if;end if;end process h110;-小时个位h220:
37、process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginif clkevent and clk=1 thenif (hou1=0010 and hou2=0011)and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou2=0000;elsif hou2=1001and(min1=0101 and min2=1001) and (sec1=0101 and sec2=1001) thenhou2=0000;elsif (hou2=1001and md1=0 and md2=01)or (hou1=0010and hou2=0011) thenhou2=0000;-md=1;elsif (min1=0101 and min2=1001) and (sec1=0101 and sec2=1001)or (md1=0 and md2=01) thenhou2=hou2+1;-speak=clk;end if;end if;end process h220;-分钟十位m110:process(clk,min2,sec1,sec2,md1,md2)beginif clkevent and clk=1 thenif (min
限制150内