1、秒模块是一个以 1HZ 的 clock 信号控制的 60 进制计数器,并同时产生分进位信号 tun。always (posedge clock) beginif(sec=59)当秒等于 59 时,如果处于计时模式时产生begin一个进位脉冲 tun, 否则 tun 信号暂停sec=0;if(at=0) tun=1; else tun=tun; endelse若秒不等于 59,同样如果处于计时模式begin就使 tun 信号清 0,否则 tun 信号暂停=sec+1; if(at=0)tun elseend分模块也是一个 60 进制计数器,并产生小时的进位信号 mod,但要受到两个控制信号的控制
2、一个是进位信号 tun,另一个是 t_min 的按建信号。当 at=0 时,赋值mt=tun当 at=1 时,赋值mt=(!tun&t_min)|(tun&!t_min) always(posedge mt)beginif(min=59)当 min=59 时,如果处于计时模式,begin则产生一进位信号 mod,否则 mod 暂停min if(at=0) modmod=mod;else当分不等于 59,同样,begin如果处于计时模式,则 mod 清 0,否则 mod 暂停=min+1; else mod时模块和分模块相似,是一个24 进制计数器,受mod 和 t_hou 信号控制,同理当 a
3、t=0 时,nt=mod当 at=1 时,nt=(!mod&t_hou)|(mod&t_hou)always(posedge nt) beginif(hou=23)hou=hou+1;这样就实现了计时模式时控制信号为进位信号,至此已实现时钟的功能,而显示时间的译码管是 4 位二进制数,须要两个译码管分别显示十位和个位,所以要求出秒、分、时的个位和十位,用以下程序就可实现。always(sec) beginsec1=sec%10; sec2=sec/10;end always(min)min1=min%10; min2=min/10;end always(hou)hou1=hou%10; hou
4、2=9999999)num=0;else num=num+1; if(num=9999999)clock=1;else clock=0;if(sec=59) begin/ 秒为 60 进制计数器if(at=0)/如果处于计时模式,每60 秒产生else/ 一个分进位信号,否则tun 信号暂停else begin if(at=0) tunend endassign mt=(at=0)?(!at&tun):t_min); always(posedge mt)if(min=59)/ 分钟为 60 进制计数器begin min/ 如果处于计时模式,每60 分产生一个else/ 时进位信号,否则mod
5、信号暂停elseassign nt=(at=0)?mod):t_hou); always(posedge nt)if(hou=23)/ 小时为 24 进制计数器secL3:0=sec%10; secG3:0=sec/10;minL3:0=min%10; minG3:0=min/10;houL3:0=hou%10; houG3:0=hou/10;always (secL) case(secL)4b0000:sec1=4b0000;b0001:b0001;b0010:b0010;b0011:b0011;b0100:b0100;b0101:b0101;b0110:b0110;b0111:b0111;b1000:b1000;b1001:b1001;endcase always (secG)case(secG)sec2=4endcase always (minL)case(minL)min1=4endcase always (minG)case(minG)min2=4endcasealways (houL) case(houL)hou1=4always (houG) case(houG)hou2=4hou2=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1