一、设计要求1、设计一个能显示1/10秒、秒、分、时的12小时数字钟。2、熟练掌握各种计数器的使用。能用计数器构成十进制、六十进制、十二进制等所需进制的计数器。能用低位的进位输出构成高位的计数脉冲。3、“时显示”部分应注意12点后显示1点。4、注意各部分的关系,由低位到高位逐级设计、调试。5、时钟显示使用数码管显示。二、系统方案论证与模块划分1、计数器模块计数器模块中,1/10秒采用带进位的10进制功能模块,秒和分采用带进位的60进制功能模块,小时采用不带进位的12进制功能模块。计数器模块均用VerilogHDL语言编写,实现计数逻辑功能。(1)十进制计数器设计程序如下:modulessecond(q,rco,clk,reset);inputclk,reset;output[3:0]q;outputrco;regrco;reg[3:0]q;always@(posedgeclkornegedgereset)beginif(~reset)q=4'b0000;elseif(q==4'b1001)beginq=4'b0000;rco=1;endelsebeginq=q+1'b1;rco=0;endendendmodule经编译、仿真、下载,满足要求。然后通过CreateDefaultSymbol,生成符号体如下:(2)六十进制计数器设计程序如下:modulesecond(qh,ql,rco,clk,reset);output[3:0]qh;output[3:0]ql;outputrco;reg[3:0]qh;reg[3:0]ql;regrco;inputclk,reset;always@(posedgeclkornegedgereset)beginif(~reset){qh,ql}=0;elsebeginif({qh,ql}==8'h59)begin{qh,ql}=0;rco=1;endelsebeginif(ql==9)beginql=0;qh=qh+1;endelsebeginql=ql+1;rco=0;endendendendendmodule经编译、仿真、下载,满足要求。然后通过CreateDefaultSymbol,生成符号体如下:同理,分计时模块生成符号体如下:(3)十二进制计数器设计程序如下:modulehour(qh,ql,clk,reset);output[3:0]qh;output[3:0]ql;reg[3:0]qh;reg[3:0]ql;inputclk,reset;always@(posedgeclkornegedgereset)beginif(!reset){qh,ql}=0;elsebeginif({qh,ql}==8'h12){qh,ql}=1;elsebeginif(ql==9)beginql=0;qh=qh+1;endelseql=ql+1;endendendendmodule经编译、仿真、下载,满足要求。然后通过CreateDefaultSymbol,生成符号体如下:2、数码管显示模块数码管显示模块利用VerilogHDL语言编写实现,把四个计数器输出的时、分、秒、1/10秒从左至右依次显示在留个数码管上。程序如下:modulesel(in1,in2,in3,in4,in5,in6,in7,in8,clk,ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g);inputclk;input[3:0]in1,in2,in3,in4,in5,in6,in7,in8;outputms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;regms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;reg[3:0]temp,flag;always@(posedgeclk)begin{ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8}=8'b00000000;flag=flag+1;case(flag)0:begintemp=in1;ms1=1;end1:begintemp=in2;ms2=1;end2:begintemp=in3;ms3=1;end3:begintemp=in4;ms4=1;end4:begintemp=in5;ms5=1;end5:begintemp=in6;ms6=1;end6:begintemp=in7;ms7=1;end7:begintemp=in8;ms8=1;endendcasecase(temp)4'd0:{a,b,c,d,e,f,g}=7'b1111110;4'd1:{a,b,c,d,e,f,g}=7'b0110000;4'd2:{a,b,c,d,e,f,g}=7'b1101101;4'd3:{a,b,c,d,e,f,g}=7'b1111001;4'd4:{a,b,c,d,e,f,g}=7'b0110011;4'd5:{a,b,c,d,e,f,g}=7'b1011011;4'd6:{a,b,c,d,e,f,g}=7'b1011111;4'd7:{a,b,c,d,e,f,g}=7'b1110000;4'd8:{a,b,c,d,e,f,g}=7'b1111111;4'd9:{a,b,c,d,e,f,g}=7'b1111011;4'hA:{a,b,c,d,e,f,g}=7'b1110111;4'hB:{a,b,c,d,e,f,g}=7'b0011111;4'hC:{a,b,c,d,e,f,g}=7'b1001110;4'hD:{a,b,c,d,e,f,g}=7'b0111101;4'hE:{a,b,c,d,e,f,g}=7'b1001111;4'hF:{a,b,c,d,e,f,g}=7'b1000111;default:{a,b,c,d,e,f,g}=7'b1111110;endcaseendendmodule经编译、仿真、下载,满足要求。然后通过CreateDefaultSymbol,生成符号体如下:三、系统单元电路设计及工作原理数字钟是计数器的综合应用,数字钟由十分之一秒、秒钟、分钟、时钟组成,十分之一秒由十进制计数器组成,秒钟由六十进制计数器构成,分钟由六十进制计数器,时钟由十二进制计数器构成。该数字钟程序的底层文件主要有十进制计数器模块、六十进制计数器模块和十二进制模块,对各模块进行封装,供顶层文件调用,各模块有VHDL文本设计及原理图设计。输入端clk是连续脉冲,reset是低电平系统复位,rco是进位端,输出端是十分之一秒位、秒钟个位、秒钟十位、分钟个位、分钟十位、时钟个位、时钟十位,最后由数码管显示各位的值,由于没有条件实现硬件功能,数码管未在电路图中显示。1、原理框图十分之一秒秒钟分钟小时2、电路原理图四、设计电路的仿真波形图1、十分之一秒模块仿真十进制计数器六十进制计数器十二进制计数器六十进制计数器进位进位进位2、秒模块仿真3、分钟模块仿真4、小时模块仿真5、时钟仿真五、对自行设计的产品总结与评价从题目分析、确定方案,到开始使用VerilogHDL语言编写程序、设计原理图再到最后进行波形仿真,我们按照要求完成了数字钟的设计。从最后的波形结果我们可以得出结论:本设计是正确可行的,完成了数字钟基本功能的设计。本小组设计的数字钟由四个计数器组成:一个10进制计数器代表1/10秒,两个60进制计数器分别代表秒和分钟,一个12进制计数器代表小时,共有三个进位端,用于实现低位向高位的进位。具有两个输入端,分别是:时钟脉冲信号和复位端,七个输出端,分别是:1/10秒、秒的个位和十位、分的个位和十位和小时的个位和十位。设计清晰简洁,实用性强。然而,很遗憾的是,由于实验室硬件的限制,我们无法进行数字钟的硬件测试,无法看到真实的数字钟效果。六、实习心得与体会在两周EDA实习课程学习的时间里,我们在QuartusⅡ软件上使用VerilogHDL语言设计了一个数字钟并进行了仿真测试,受益匪浅,我们对EDA这门课程有了更系统的认识并对数字电路的基础理论知识进行了复习巩固。以前学的知识在这次实习中得到了应用,使我们更深入地理解了理论联系实际的重要性。在本次实习过程中,我们也曾遇到过很多问题,通过不断地修改方案直到最终成功得到仿真结果,当然,如果单靠我一个人的力量,是很难按时解决的,因此,我十分感谢老师的点拨和同学们的帮助,使我们顺利并按时完成了任务。本次实习让我们强化了EDA的专业知识,能够熟练地掌握了软件的使用和VerilogHDL程序语言的应用,同时,还培养了我们团队写作的精神和与人沟通的能力。通过这次数字钟的设计,我更加体会到了EDA技术的优势,作为计算机辅助设计软件,将电路设计与仿真简单化,不仅可以很好地锻炼学生的综合设计开发能力和动手能力,激发学生的学习兴趣,还能够有效地节约资源、缩短产品研发的周期,因此,电子设计全自动化必然是行业未来发展的趋势。七、参考文献[1]李国丽,朱维勇,栾铭.EDA与数字系统设计[M].北京:机械工业出版社,2004.1.[2]康华光.电子技术基础数字部分(第五版)[M].高等教育出版社2006[3]阎石.数字电子技术基础[M].北京:高等教育出版社,1998.12.[4]金孟树.基于EDA技术的现代数字系统设计[J].温州职业技术学院学报,2002(3)[5]潘松,黄继业,潘明.EDA技术实用教程VerilogHDL版(第五版).科学出版社,2013