1、基于VHDLl勺数字钟设计作者:日期:安徽工业经济职业技术学院毕业论文(设计)题 目: 基于VHDL的数字钟设计系另I:电子信息技术系专业:电子信息工程技术学号: 2 012 5 4 427学生姓名:王肿指导教师:王俊职 称:二0一四年五月月十三日【摘要】20世纪90年代,国际上电子和计算机技术较为先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、 工具等方面进行了彻底的变革,取得了 巨大成功。在电子技术设计领域,可编程逻辑器件(如 CPLD、FPGA)的应用, 已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。EDA技术在电子系统设计领域越来越普及,本设计主要利用 V
2、HDL语言在EDA平台上设计一个电子数字钟,【关键词】数字钟 EDA VHDL语言目录 . . . . . . . . . . . . . . . . . . . . 关键词:1绪论 . .31 设计目的 I_I . . . . . . . . . . . . . . . . . .42 .设计内. . . . . . . . . . . . . . . . . .43.43 .1数字钟的基本工作原理43.2 数 字 钟 设 计 的 电 路 原 理 图 6.4 单 元 模 块 的 设计 .64.1 秒 计 数 器 的 模块.64.2分 计 数 器 的 模块 84.3 时计数器的模块 . 1 0
3、4.4 整点报时器模块 .124.5 调时调分模块.134.6 .6LE D 显 示 译 码 器 模块.154.7 .仿真结17.结语 .I . . . . . . . . . . . . . . . .17考文 . . . . . . . . . . . . . . .1 8绪论E D A是电子设计自动化(El c c t ronic De s ign Au t omati o n)的缩写,是9 0年代初从CAD(计算机辅助设备),CAM (计算机辅助制造),CAT (计算机辅 助测试)和CAE (计算机辅助工程)的概念发展而来的。EDA技术是以计算机 为工具,根据硬件描述语言 HDL完成的
4、设计文件,自动的完成逻辑编译,化简, 分割,综合及优化,布局布线,仿真以及对特定目标芯片的适配编译和编程下载等 工作,这种将设计实体内外部分的概念是V HDL系统设计的基本点。应用V HD L进行工程设计的优点是多方面的。具优点是:与其它硬件描述语言相比,VHD L具有更强的行为描述能力,从而解决了他成为系统设计领域最佳的硬件描述语 言,强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规 模电子系统的重要保证;VHDL丰富的仿真语句和库函数,使得在任何大系统的 设计早期就能查验设计系统的功能和可行性,及时可对设计进行。它的计时周期为24小时,显示满刻度为24时59分5 9秒,另
5、外还具有校时功能和闹钟功能。总的程序由几个各具不同功能的单元模块程序拼接而成其中包括分频程序模块、时分秒计数和设置程序模块、比较器程序模块、三输入数据选择器程序模块、译码显示程序模块和拼接程序模块。并且使用QU ARTUS I I软件进行电路波形仿真,下载到 EDA实验箱进行验 证。1 .设计目的1)熟练地运用数字系统的设计方法进行数字系统设计;2)能进行较复杂的数字系统设计;3)按要求设计一个数字钟。2 .设计内容1)要求显示秒、分、时,显示格式如下:图显示格式2)可清零、可调时,具有整点报时功能3 .设计原理3.1数字钟的基本工作原理:数字钟以其显示时间的直观性、走时准确性作为一种计时工具
6、,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。数字钟的基本原理方框图:字钟实现原理框图1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分 一一60进制计数,即从0到59循环计数时钟一一2 4进制计数,即从0到2 3循环计 数,并且在数码管上显示数值。2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键 4进行任意的调整,因 为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数 一次。3)清零功能:res et为复位键,低电平时实现清零功能,高电平时正常计
7、数。可以根据我们自己任意时间的复位4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。产生“滴答.滴答”的报警声音。5) LED灯在时钟显示时有花样显示信号产生。即根据进位情况,L E D不停的闪烁,从而产生“花样”信号。根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数 器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采 用自顶向下的设计方法,子模块利用 VHDL语言设计,顶层文件用原理图的设 计方法。显示:小时采用数字时钟控制单元时调整分调整 使能端信号 CLK信号时显示分显示 秒显示 24进制60进制 60进制 LED显示 整点报时 花 样显示24进制,而
8、分钟均是采用6进制和10进制的组合。3 . 2数字钟设计的电路原理图24进制数字钟的电路图4 .单元模块的设计4.1 .秒计数器模块LIBRARY ieee;use ieee.st d_logi c _1 164 .all;use ieee . s td_ log i c _ uns i g ned.al 1 ;ENTITY second I SPORT(clk, r e set , s etmin:IN STD_ LOGIC;enmi n:OUT STD_LOGI C;dao ut: out s t d_ 1 o g i c_v e ctor(6 downto 0);END entit y
9、second;ARCHITEC TURE fun OF s eco nd ISSIGNAL cou n t:STD_LOGIC_V ECTOR (6 downto 0);S I GN A L enm i n_1,enm i n_2: S T D_LOG IC;enmin_ 1 为59秒时的进位信号B EG I N daout=count;-enmin_2由c 1 k调制后的手动调分脉冲信号用enmin_2 = (se tmin and clk); s e t m i n 为手动调分控制信号,高电平有效enmin=(enm i n_1 o r enmi n_2);enmin 为向分进位信号pro
10、 c e ss(clk, res et,setm in)beg inif( r e s et= 0 ) th en coun t=000 0 00 0 ;若 r eset 为 0,则异步清-否则,若clk上升沿到e 1 s if (clk e ven t and c lk= 1 ) then-若个位计时恰好到if(co u nt (3 downto 0) = 100 1 ) th e n“1001” 即 9if (count16#60#) then又若 count 小于 16#60#,即60Hif( c o unt=1011001)the n-又若已到59De nmin _ 1 =1;coun
11、t =0000000则置进位为1及c ount复0else co unt=c ount+ 7 ;-未到59D,则加7,而+7=+1+6,则作“加6校正”en d if;e lse若co unt不小于16# 6 0 # (即coun t等于或大于16#60#)count=000O 00 0;count 复 0e nd if;end if ( count1 6 #6 0 #)elsif( c ount16#60 #)then若个位计数未到“ 10 01”则转此句再判cou n t =cou nt+1;若 coun t16#6 0 #则 count 加 1enm i n 1 = 7 0/afte r
12、100 ns;-则没有发生进位elseen d if;end if;end process ;end fun编译过程:仿真图如下:4.2 .分计数器模块LIBRARY i eee ;use ieee .s t d_log i c _11 6 4. a ll;use iee e .std_l o g i c .unsigned . al 1 ;ENT I TY min ute ISPORT(clk, cl k 1 ,re s et , se thou r : IN STD_LOG I C;en hour: O UT STD_LOGIC;d aou t: o ut st d _ 1 o g i c
13、 _vector(6 d o w nto 0);END 6ntit y minute;ARCHITECTURE fun OF minute ISSIGNAL count: STD_LOGIC_VE CT OR(6 dow nto0);SIGNAL enh ou r_ 1,enhour_2: STD_LOGIC;BEGINd ao ut= c o unt;6nho u r_2=( s etho u r an d cl k 1);enhour =(enh o ur_ 1 or enhour _2);pro c e ss ( elk ,reset,sethour)beginif (re s et=0
14、)t h encou n t =0 0 0 0 0 0 0;若 re se t=0,则异步清零e 1 sif(c 1 k,even t and clk=1,) t hen否则,若 c lk 上升沿到i f (count(3 downto 0) =100 1)then若个位计时恰好到“ 1001 ”即9if(c o u n t16# 6 0#) t h en-又若 coun t 小于 16#60#,即601 f( c ou nt=1 0 11001 ) then又若已到 5 9Den ho ur_ 1=1;则置进位为 1count=0 0 0 00 0 0 ;co unt 旻 0E LSEc o
15、 u n t= c o u nt+ 7 ;-若 count 未到 5 9 D,则加 7,即作“加6校正”end if;使前面的16#60#的个位*专变为84 21BCD的容量elseco u n t=0000 0 0 0 ;count复0(有此句,则对无效状态电路可自启动)end if;e lsi f ( c o u nt16 # 6 0#) thenco un t = c ount+ 1 ;若 co unt 1 6#60#则 c o unt加 1enhouj 1=0a f ter 100 ns;没有发生进位elsecou n t = 00000 0 0;-否则,若 count 不小于 16#
16、60 #coun t复0en d if;en d if;end proce s s ;END fun ;编译过程:仿真图如下:4. 3.时计数器模块LI B R ARY i e ee;use ieee .std_log i c_l 1 64 . all;use ieee.std _ 1 og i c_ u ns i gned. all;ENT ITY hou r I SPORT(cl k, reset: IN STD_LOG I C;daou t: out s t d _logic_ v ector(5 d o wnt o 0);END en t i t y hour;ARC HIT ECTU
17、RE fun OF hour IS SIGNAL co unt:STD_LOG IC_VECTOR(5 do wn t o 0 );BEG I Ndao ut=count;process(c lk, r ese t)beg i nif (re set=/ 0)th e n coun t =0000 0 0;若 re s e t=0,则异步清零e lsif(clk / e ven t and cl k = 1 ) t h en-否则,若 clk 上升沿到i f (co unt(3 downto 0) = 1001H1001 即 9i f ( count=16#23# ) thencoun t =
18、 c o u nt+ 7 ;e lsecount=0 0 0000;en d if;elsi f (co u nt16#23#) t hencount=co unt+ 1;e ls eco unt = 00 0 000;)then-若个位计时恰好到23进制若到23D则复0-若未到23D,则c ount进1否则清零end if;end if;end p r oce ss ;END fun;编译过程:仿真图如下:4. 4.整点报时器模块LI B RARY ieee;use ieee. std_logic_1164.al 1 ;use i e e e.std_log ic_u nsign ed. a
19、l 1 ;ENTITY alert I SPORT(clk:I N STD _L OGIC;d a i n:IN ST D_LOG I C_VECTOR (6 DO WNTO 0 );s pe ak:OUT STD _ LOGIC;lamp:OUT STD_L OGIC_VECTO R (2 DOWNTO 0 );END alert;ARCHITE CT URE fun OF alert ISsignal coun:st d_logic_ve c t or (1 d ownto 0);s i gnal count1:std_ log i c_v ector (1 do wnto 0);BEG
20、I Nspea k e r :p r ocess (clk)begi nsp eak = 1 0 ) t henc oun t 1=0 0 ;co u nt1为三进制加法计数器elsecount1= coun 11 +1;end if;endif;end if;en d proce s s speak er;lampe r :process(c lk)be gi nif(risin g _ edge ( c 1 k) t h enif(c o un= 10) t henif (cou n = 0 0 )thenlamp= 001;循环点亮三只灯elsif(coun= 01 ) t h e nl
21、amp= 0 1 0;elsi f (cou n= 10) th e nl a mp= 100;end if;co u n=coun +1;el s ecoun= 0 0 ;e nd if;end i f;en d process 1amper;END f u n;编译过程:仿真图如下:4 .5.调时调分模块LIBRARY i eee;use i eee. s t d_ 1 ogijl 164. all;use ie ee.s t d _ logic_un s i g ned.all;usei e ee.std _logi c _ a r i th.al 1 ;ENT I T Y seltim
22、e I SPORT(c lk1, r eset:IN STD_LOGIC ;se c ,min: IN STD_LOGIC_VECT O R (6 downto 0);hour,: in st d _l o gi c _v e c t or(5 downto 0);daout:OUT STD_LOGIC_v ector( 3 downto 0);dp: OUT std_LOGIC;se 1 :out std_log i c_v ecto r (2 downto 0);END s e lt i m e ;ARCH ITECTURE funOF seltime ISSIGNAL count: S
23、TD_LOGIC_ve c tor(2 down t o 0);B EGIN sel = co unt;proc ess(clk1, res e t)b e ginif ( r e set = 0 )thenco u n t = 1 0 1 )th e ncou nt =000;elseco unt d aou t = sec(3 do w n to 0); d pd a out ( 3) =0;daout(2 downto 0 ) =sec(6dow n to4); d pd a out=mi n (3 down t o 0);dpdaout(3 )= 0 ;daou t (2 downto
24、 0) = min (6 down t o 4); dpdaou t=hour( 3 downt o 0) ;dp daout(3 downto 2)=00;daout (1 d o wn t o 0)=h our (5 d ownt o4); d p =/ 0;e nd cas e;end p ro c es s;end fun;编译过程:仿真图如下:4.6. LED显示译码器模块LI B R ARY i e ee;use ieee.std_logic_11 64. a 1 l;use i e ee. std_ 1 o gic_u n si g ned.a ll;ENT I TY d e 1
25、 ed I SPORT (num:IN s td_ logic_ve c to r (3 downto 0);led:OUT std_log i c_v e ctor (6 dow n t o 0);end d eled;ARCHITECTURE fun OF deled ISBEGIN1 ed = 11111 1 0when num = 0000else0 110000wh e n n um=0001else1101101w hen n um=00 1 0else1 1 110 0 1 when n u m = 0011el s e011 0 01 1 when num= 0100e 1 s
26、e10 110 1 1when num=0101e 1 se10 1 1111 wh e n n u m= 0 11 0 e Ise11 1 0000when n um=0111el s e1111111 when num= 10 0 0e 1 se1 1 1101 Twhe n num = 1 00 1 e 1 s e“1 11011 Twhen n um = 1010 else“0011111w hen n um= 1011el se100 1 11 0 w h en num = 1 100 e Ise0111101 when num= 1 10 1 else1 0 0 1 1 11 w
27、h en num =1110 else10 0 01 1 1when num =1111;END fun;编译过程:仿真图如下:5 .仿真结果下图是最后仿真的结果,但是总是无法选中芯片,都是00 0,得不到正确的结果。可能的原因是FP GA的时钟输出为20MHZ,经过分频器得到1KHZ和1 HZ的频率需要多次的计数,由于计数值太大无法得到正确的仿真结果。数 字 钟 仿MEM6 .结语本次试验的数字时钟能只够显示时间,其它功能如闹铃、调时、分、秒都能 在此基础上进一步的实现,由于时间有限只能调试到这里。经过努力,简易电子时钟的设计基本上算是完成了,在整个设计中,我最大的体会就是:难!我们在 本次
28、的课程设计中,发现了很多问题,同时做起来也很难不顺手,看着简单的电路, 要动手把它设计出来实非易事,主要原因是我们没有经常动手设计电路,这就要 求我们在以后的学习中,应该注意到这一点,更重要的是我们要学会把从书本上学 到的知识和实际电路联系起来,这不论对我们以后的学习还是就业,都会起到很大的促进和帮助,我相信,通过这次的课程设计,在下一阶段的学习中我们会更 加努力,力争把这门课学好学精。同时通过本次课程设计,巩固了我们以前学过的专业知识,通过这次的程序设计,使我们对数字系统结构也有了更进一步的了 解与认识,同时对数据库软件E D A技术,VHD L语言等系列知识都有了一定的了解与认识。使用E
29、DA技术开发页面的能力也有了提高,也使我们把理论与实 践从正真意义上结合了起来,考验了我们的动手能力,查阅相关资料的能力,还有 组织材料的能力。通过此次实践,我们从中可以找出自己知识的不足与欠缺,以 使我们在日后的学习中得以改进与提高。经过本次设计使我们对所学习到的知识得以进一步实践,这将对我们走出校园走向社会走向工作岗位奠定坚实的基 础。最后感谢老师对我们的指导,以及同学们对我的帮助,使得实验能够顺利完成!参考文献1潘松,黄继业.VH DL设计初步 J .EDA技术实用教材,20 09,5-29: 7 0-82.2 华成英,童诗白.集成运算放大电路J.模拟电子基础,20 06, 5-4: 185 187.3阎石.时序逻辑电路 M.北京:高等教育出版社,200 8.4李建东,郭梯云,邹国扬.移动通信.第四版. M.西安:西安电子科技大学出版社,20 0 6.5沈明山编著,EDA技术及可编程器件应用实训 北京:科学出版社6崔建明主编,电工电子EDA仿真技术 北京:高等教育出版社,2004