数字逻辑课程设计实验报告题目数字钟姓名桂大有班级网络工程103班学号*********指导教师陆勤完成日期2012年5月21日数字钟的设计1.数字钟的功能描述(1)计时和显示功能采用24小时计时并以十进制数字显示时、分、秒(时从00-23,分、秒从00-59)。
(2)校对动能当数字时钟走的有偏差时,应能够手动校时。
2.数字钟的设计思路根据功能要求,整个数字时钟分为计时和校时两大部分。
计时部分秒计时电路接收1Hz时基信号,进行60进制计数,计满后秒值归0,并产生1/60Hz时钟信号;分钟计时电路接受1/60Hz时钟信号,进行60进制计数,计满后分钟值归0,并产生1/3600Hz时钟信号,小时计时电路接收1/3600Hz时钟信号,进行24小时计数,计满后小时、分、秒皆归0,如此循环往复。
校时部分,采用两个瞬态按键配合实现,1号键产生单脉冲,控制数字钟在计时/校时/校分/校秒四种状态间切换,2号键通过控制计数使能端让时/分/秒计数器发生状态翻转以达到指定的数值。
3.系统功能模块介绍Ⅰ.模块一:数字钟总体原理电路。
其中包含:(1)分钟、秒计时电路(2)小时计时电路(3)计时/校时的切换Ⅱ.采用原理图和HDL混合设计方式实现数字钟①分钟、秒计时电路分钟、秒计时需要60进制计数,其电路图如下所示:该电路图用两片74160采用同步连接构成60进制计数器,通过译码电路识别稳态“59”,输出低电平使计数器置数为0。
整个技术循环为00—>01—>02—>…—>58—>59—>00—>…,共有60个稳定状态。
计数值采用BCD码形式,Q7~Q4表示分钟或秒的十位,Q3~Q0表示分钟或秒的各位。
EN输入端当正常计数状态时接收分钟计时电路的进位输出,,而在校时状态时接收校时脉冲用于控制小时值的翻转。
计满进位输出端CO用于触发高一级计数器的技术动作。
②小时计时电路(采用24时制,电路图如下所示)该电路用两片74160(一位十进制假发计数器)采用同步连接构成24进制计数器,通过译码电路识别暂态“24”,输出低电平使计数器清0。
整个计数循环为00—>01—>02—>…—>23—>00—>…,共24个状态。
计数值采用BCD码形式,Q7~Q4表示小时的十位,Q3~Q0表示小时的各位。
EN输入端当正常计数状态时接收分钟计时电路的进位输出,而在校时状态时接收校时脉冲用于控制小时值得翻转。
③计时/校时的切换由模块Count_control实现,其端口特征如图所示:其中,Func_sel输入端接收功能选择脉冲输入,维护内部一个模4计数器,以此控制数字钟在计时/校时/校分/校秒四种状态中切换;是Setn输入端接收校时脉冲,负脉冲有效,每收到1个校时脉冲,对应的计数单元(时单元或分单元或秒单元)计数值加1;Sec_co输入由秒计数单元的进位提供,Min_co输入由分计数单元的进位提供;Sec_en、Min_en、Hour_en提供三个计数单元所需要的使能信号。
计数单元功能选择及相应信号的定义如下表:当前功能Sec_en取值Min_en取值Hour_en取值内部模4计数器状态Q1Q000计数高电平秒单元进位分单元进位01调时低电平低电平校时脉冲10调分低电平小时脉冲低电平11调秒小时脉冲低电平低电平Ⅲ.模块二:扫描显示驱动。
Count_control模块的AHDL源码如下:subdesin count_control(func_sel:input;setn:input;sec_co,min_co:input;sec_en,min_en,hour_en:output;) ‘以上为模块的端口定义variableq[1..0]:dff; ‘定义由DFF构成的寄存器组beginq[].clk=func_sel; ‘设定计数器的时钟q[]=q[]+1; ‘加计数器if(q[]>3)then q[]=0; ‘构成模4循环end if;case q[] iswhen 0=>sec_en=vcc;min_en=sec_co;hour_en=min_co;when 1=>sec_en=gnd;min_en=gnd;hour_en=!setn;when 2=>sec_en=gnd;min_en=!setn;hour_en=gnd;when 3=>sec_en=!setn;min_en=gnd;hour_en=gnd;end case;end;其中,Select_disp根据模6计数器Counter6的输出将待显示的6位十进制结果分时送给七段译码器Deled以产生显示字形,Counter6的输出同时可以用来将显示结果在6个数码管上展开,只要时钟Clk_scan的频率合适,就可以看到完整的时分秒显示结果。
模块Counter6的AHDL源码如下:subdesign counter6(clk:input;q[2..0]:output;)variabless:machine of bits(q[2..0])with states(s0=0,s1=1,s2=2,s3=3,s4=4,s5=5);beginss.clk=clk;tabless=>ss;s5=>s4;s4=>s3;s3=>s2;s2=>s1;s1=>s0;s0=>s5;end table;end;模块select_disp的AHDL源码如下:subdesign select_disp(sel[2..0]:input;in0[3..0]:input;in1[3..0]:input;in2[3..0]:input;in3[3..0]:input;in4[3..0]:input;in5[3..0]:input;out[3..0]:output;)begincase sel[] iswhen 0=>out[]=in0[];when 1=>out[]=in1[];when 2=>out[]=in2[];when 3=>out[]=in3[];when 4=>out[]=in4[];when 5=>out[]=in5[];end case;end;模块deled(用来驱动共阴极接法的数码管)的AHDL源码如下:SUBDESIGN deled(num[3..0]:INPUT;a,b,c,d,e,f,g:OUTPUT;)BEGINTABLEnum[3..0]=>a,b,c,d,e,f,g;H"0" =>1,1,1,1,1,1,0;H"1" =>0,1,1,0,0,0,0;H"2" =>1,1,0,1,1,0,1;H"3" =>1,1,1,1,0,0,1;H"4" =>0,1,1,0,0,1,1;H"5" =>1,0,1,1,0,1,1;H"6" =>1,0,1,1,1,1,1;H"7" =>1,1,1,0,0,0,0;H"8" =>1,1,1,1,1,1,1;H"9" =>1,1,1,1,0,1,1;H"A" =>1,1,1,0,1,1,1;H"B" =>0,0,1,1,1,1,1;H"C" =>1,0,0,1,1,1,0;H"D" =>0,1,1,1,1,0,1;H"E" =>1,0,0,1,1,1,1;H"F" =>1,0,0,0,1,1,1;END TABLE;END;4.运行与调试分析软件仿真波形如下面截屏所示:5、心得体会通过这次数字逻辑课程设计,我学习到了很多。
第一,我对MAX+plus Ⅱ软件有了更深的了解,知道了一般逻辑电路的设计步骤;第二,通过查阅相关资料和书籍,学会了编写一些基本的AHDL代码;第三,通过课程设计,加深了对课本上知识的理解和领会,使得理论与实际相结合;第四,通过课程设计锻炼了我的动手能力,也提高了自主学习能力。
在这次课程设计中也遇到了很多的困难,比如有关AHDL代码的编写。
我是通过查阅课本和资料获得的。
还有就是在仿真的时候总是出现问题,最后请教同学才发现原来是自己把原理图上的一个输出端弄错了,最后终于仿真出来了,特别开心。
既然是动手实践就会遇到各种问题,就会面对重重困难,而不畏艰难,就是我们解决问题的方法。
在这里要感谢老师和同学在课程设计中给予我的无私帮助!!参考资料:①《数字逻辑》―中国科学技术大学出版社②《数字逻辑实验指导书》③《数字逻辑EDA设计与实践MAX+plusII与QuartusII双剑合璧》―国防工业出版社。