Countbcd

Build a 4-digit BCD (binary-coded decimal) counter. Each decimal digit is encoded using 4 bits: q[3:0] is the ones digit, q[7:4] is the tens digit, etc. For digits [3:1], also output an enable signal indicating when each of the upper three digits should be incremented.

You may want to instantiate or modify some one-digit decade counters.

 

module top_module (
    input clk,
    input reset,   // Synchronous active-high reset
    output reg [3:1] ena,
    output reg [15:0] q);
    
    always@(posedge clk)
        if(reset)
            ena <= 3'd0;
        else begin
             if(q[3:0]==4'd8) begin
                 ena <= 3'b001;
                 if(q[7:4]==4'd9) begin
                     ena <= 3'b011;
                     if(q[11:8]==4'd9)
                         ena <= 3'b111;
                     else
                         ena <= 3'b011;
                 end
                 else
                     ena <= 3'd001;
             end
            else
                ena <= 3'd000;
        end
    
    always@(posedge clk)
        if(reset) begin
            q <= 16'd0;
        end
    else begin
         if(q[3:0]==4'd9) begin
                q[3:0] <= 4'd0;
        end
            else begin
                q[3:0] <= q[3:0] + 1'b1;
            end
        
        if(ena[1]) begin
            if(q[7:0] == 8'h99) begin
                q[7:4]<=4'd0;
            end
            else begin
                q[7:4] <= q[7:4] + 1'b1;
            end
        end
        
         if(ena[2]) begin
            if(q[11:0] == 12'h999)begin
                q[11:8] <= 4'd0;
            end
            else begin
                q[11:8] <= q[11:8] + 1'b1;
            end
        end
        
         if(ena[3]) begin
            if(q[15:0] == 16'h9999)begin
                q[15:12] <= 4'd0;
            end
            else
                q[15:12] <= q[15:12] + 1'b1;
        end
        
    end
    
     
endmodule
 

要将使能ena信号与计数q信号分开赋值,分别再两个always 模块中完成设计

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值