1、module cnt60(clrn,clk,q,j,cont); /秒和分计时input clrn,clk,j;output reg 7:0 q;output reg cont;always (posedge clkj or negedge clrn)beginif(clrn) q=0;else beginif(q=h59) q=0;else q=q+1;if(q3:0=ha) begin q3:0=0;q7:4=q7:4+1;endh59) cont=1;else cont=0;endmodule module cnt24(clrn,clk,q,j,cont); /小时计时h23) q=0;
2、h23) cont=1;2.2年月日模块module nyr2009(clrn,clk,jn,jy,jr,qn,qy,qr); /年月日模块 input clrn,clk,jn,jy,jr; output 15:0 qn; output 7:0 qy,qr; reg 15:0 qn; reg 7:0 qy,qr; reg clkn,clky;0 date; reg clkn1,clkn2,clkn3;initial begin clkn1=1;clkn2=1;clkn3=1;initial begin qn=h2000;qy=1;qr=1;end always (posedge (clkjr)
3、 or negedge clrn) / 日计时模块 begin if (clrn) qr=1; else begin if (qr=date) qr=1; else qr=qr+1; if (qr3:ha) begin qr3: qr7:4=qr7: if (qr=date) clky = 1; else clky = 0; endalways (posedge clkyjy or negedge clrn) /月计时模块 if (clrn) qy=1; if (qy=h12) qy=1; else qy=qy+1; if (qy3: qy3:qy7:4=qy7:h12) clkn = 1;
4、else clkn = 0;always case (qy) h01: date=h31;h02: if (qn%4=0)&(qn%100 != 0)|(qn%400=0) date=h29; else date=h28; endh03:h04:h30;h05:h06:h07:h08:h09:h10:h11:h12: default :date= endcasealways (posedge (clknjn) or negedge clrn ) /年计时模块 if (clrn) qn3: else begin if(qn3:0=9) qn3: else qn3:0=qn3:0+1; if (q
5、n3:0=9) clkn1=0; else clkn1=1;always (posedge clkn1 or negedge clrn ) if (clrn) qn7:4=0; else begin if(qn7:4=9) qn7: else qn7:4=qn7: if (qn7:4=9) clkn2=0; else clkn2=1;always (posedge clkn2 or negedge clrn ) if (clrn) qn11:8=0; else begin if(qn11:8=9) qn11: else qn11:8=qn11:8+1; if (qn11:8=9) clkn3=
6、0; else clkn3=1;always (posedge clkn3 or negedge clrn ) if (clrn) qn15:12=2; else if(qn15:12=9) qn15:12=0; else qn15:12=qn15:12+1; 2.3校时模块module mux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3);input k,j1,j2,j3;output reg jm,jf,js,jr,jy,jn;always if (k=0) jm,jf,js=j1,j2,j3; else jr,jy,jn=j1,j2,j3;2.4分频器模块同时给时分秒和
7、闹钟送入脉冲module FENP(clk,newclk);input clk;output reg newclk;reg24:0 cnter;always (posedge clk) if(cnter20000000) cnter=cnter+1; else cnter=0; if (cnter10000000) newclk=1;else newclk=0; endmodule2.5控制器模块显示年月日和显示时分秒直接的转换控制module contr(clk,k1,k2,k); input clk,k1,k2; output reg k; reg 3:0 qc; reg rc;alway
8、s (posedge clk) begin qc=qc+1; if (qc8) rc=0; else rc=1; case (k1,k2) 0:k=rc; /八秒显示年月日八秒显示时分秒的自由转换 1:k=0; /显示并且校准时分秒 2:k=1; /显示并且校准年月日 3:2.6闹钟模块module naozhong(qs,qf,led,zt);input zt;input7:0 qs,qf;output led;reg led;if (qs=h06&qf=h01) /6:01闹钟开始闪烁 led=1; else led=0; if(zt=1) led=0; / 在任意时刻都可以关掉闹钟2.7
9、数码管显示模块module mux_16(k,qm,qf,qs,qr,qy,qn,q); input k; input7:0 qm,qf,qs,qr,qy; input15:0 qn; output reg 31: begin if (k=0) begin q31:24=0; q23:0=qs,qf,qm; else q=qn,qy,qr;3调试过程 在调试过程中出现很多问题,在时分秒里加入分频器可以实现计时,但是闹钟就不能实现1秒钟闪烁一次的功能,当给闹钟加上一个分频器的时候,时分秒模块也不能自动计时。首先认识到必须只能有一个分频器,而且还能同时给两个提供脉冲。所以就删除了时分秒里的分频器,
10、在总的图中加入一个分频器,同时给两个提供脉冲,这样两个功能都可以同时实现。 4功能测试4.1 测试仪器与设备 电脑,EDA实训仪。4.2 性能指标测试 S0、S1控制手动切换和自动切换,当S0、S1都往上拨或都往下拨都是自动切换,SO上拨S1下拨是显示并可以校准时分秒的,反之是显示和校准年月日的。K8、K7、K6分别是校准年月日或时分秒的。K0是复位功能5 实训心得体会 通过这次EDA实训,把课堂上学习的知识又巩固了一遍,也更加熟悉了对quartusII软件的使用。这次我们小组选作数字日历这个题目,创新点在于闹钟模块,可以实现闹钟的功能。通过小组的分工合作,把大家的思路整合在一起,在一起分析程序的使用,互相学习,更加理解了程序的用法。EDA的功能很强大,去除了传统算法的复杂,是程序简单化,几个语句就可以实现想要的功能。在我们所做的日历中,分别用到计数,分频,选择器这些最基本的功能,然后加以改善和创新,实现了日历的功能。6.参考文献:江国强.EDA技术与应用(第三版).北京:电子工业出版社,2011附录附录1:仿真波形图1.分频器仿真波形图2.时分秒仿真波形图3.年月日仿真波形图4.闹钟仿真波形图附录2:程序清单:程序1程序2程序3程序4 /校时模块程序5 /分频器模块程序6 /控制器模块程序7 /闹钟模块程序8 /数码管显示模块
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2