2.时钟正常显示模块
正常显示模块分为时分秒三个子模块,分别对应一个模 24 计数器和两个模 60 计数器。
模 24 计数器和模 60 计数器设计都 BCD 码来表示时分秒的值,每个分为高位和低位,均
对应一个十进制的数。对模 24 计数器,每个脉冲信号来临时当低位小于 9 时加一;等于 9
时高位加一且低位置零;且高位小于 3,低位小于 9,超过时高低位均置零;当高位等于 2
时,低位只能到 3,同时复位 nCR 低电平时高低位均置零。同理可得模 60 计数器的设计。
根据这个思路,得到模 24 计数器源代码如下:
//counter24.v
module counter24(CntH,CntL,nCR,EN,CP);
input nCR,EN,CP;
output [3:0] CntH,CntL;//分别为高位和低位
reg [3:0] CntH,CntL;
always @(posedge CP or negedge nCR)
begin
if (~nCR) {CntH,CntL}<=8'h00;//复位键清零
else if(~EN) {CntH,CntL}<={CntH,CntL};//使能信号有效则暂停
else if((CntH>2)||(CntL>9)||((CntH==2)&&(CntL>=3)))
{CntH,CntL}<=8'b00;//出现计数错误全部清零
else if((CntH==2)&&(CntL<3))
CntL<=CntL+1;//超过 20 时计数方式
else if(CntL==9)
begin CntH<=CntH+1'b1;
CntL<=4'b0 ;//一般情况下计数方式
end
else
CntL<=CntL+1'b1;
end
模 60 计数器代码如下:
//counterM60.v
module counterM60(CntMH,CntML,nCR,EN,CP);
input CP,EN,nCR;
output [3:0] CntMH,CntML;
reg [3:0] CntMH=0,CntML=0;
always @(posedge CP or negedge nCR)
begin
if(~nCR)
评论0