题Count clock

Create a set of counters suitable for use as a 12-hour clock (with am/pm indicator). Your counters are clocked by a fast-running clk, with a pulse on ena whenever your clock should increment (i.e., once per second).

reset resets the clock to 12:00 AM. pm is 0 for AM and 1 for PM. hh, mm, and ss are two BCD (Binary-Coded Decimal) digits each for hours (01-12), minutes (00-59), and seconds (00-59). Reset has higher priority than enable, and can occur even when not enabled.

一个1-12的两位的BCD计数器与0-5的一位计数器

module top_module(
    input clk,
    input reset,
    input ena,
    output pm,
    output [7:0] hh,
    output [7:0] mm,
    output [7:0] ss);
    wire ens,enm0,enm1,enh;
    decade s0(clk,reset,ena,ss[3:0]);
    assign ens=(ena&&ss[3:0]==9)?1'b1:1'b0;
    de6 s1(clk,reset,ens,ss[7:4]);
    assign enm0=(ena&&ss[3:0]==9&&ss[7:4]==5)?1'b1:1'b0;
    decade m0(clk,reset,enm0,mm[3:0]);
    assign enm1=(ena&&mm[3:0]==9&&ss[3:0]==9&&ss[7:4]==5)?1'b1:1'b0;
    de6 m1(clk,reset,enm1,mm[7:4]);
    assign enh=(ena&&mm[7:4]==5&&mm[3:0]==9&&ss[3:0]==9&&ss[7:4]==5)?1'b1:1'b0;
    de12 h(clk,reset,enh,hh[7:0]);
    
    always@(posedge clk)
       pm<=(hh[7:4]==1&&hh[3:0]==1&&mm[7:4]==5&&mm[3:0]==9&&ss[3:0]==9&&ss[7:4]==5&&~reset&&ena)?(~pm):(pm);
endmodule
module decade(input clk,
    input reset,
    input ena,
    output [3:0]q);
    always@(posedge clk)
        if(reset)
            q<=4'h0;
    else if(ena&&q==4'h9)
        q<=4'h0;
    else if(ena)
        q<=q+1;
endmodule
module de6(input clk,
    input reset,
    input ena,
    output [3:0]q);
    always@(posedge clk)
        if(reset)
            q<=4'h0;
    else if(ena&&q==4'h5)
        q<=4'h0;
    else if(ena)
        q<=q+1;
endmodule
module de12(input clk,
    input reset,
    input ena,
    output [7:0]q);
    always@(posedge clk)
        if(reset)
            q<=8'h12;
    else if(ena&&q==8'h12)
        q<=8'h1;
    else if(ena&&q==8'h9)
        q<=q+1+6;
    else if(ena)
        q<=q+1;
endmodule

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

being humble

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值