在verilog中0-999计数器

时间:2015-12-18 19:04:47

标签: verilog counter

我想用3个显示器(abc)创建一个0-999计数器,显示三个显示器中的那些,数十和数百。

我写了这个程序但是9到10之间有一个不合适的值,那就是' A'。我会很高兴任何人都可以帮我修理它。

module counter(clk,reset,a,b,c);
    input clk,reset;
    output [3:0] a,b,c;
    reg[3:0] a,b,c;
    initial begin
        a=0;
        b=0;
        c=0;
    end
    always@(posedge clk)
        if(reset) begin 
            a<=0;
            b<=0;
            c<=0;
        end
        else if(c>9) begin
            c<=0;
            b<=b+1;
        end
        else if(b>9) begin
            c<=0;
            b<=0;
            a<=a+1;
        end
        else if(a>9) begin
            a<=0;
            b<=0;
            c<=0;
        end
    else
        c<=c+1;
    endmodule

2 个答案:

答案 0 :(得分:0)

您的代码的设置方式是cba必须在翻转发生前从0到10进行计数。如果您考虑触发当前条件如何重置计数器,您会注意到计数值必须超过9,即在计数器重置之前的一个周期达到10,从而获得一些字符的额外周期(在此case十六进制10,这是A;如工具所述)。但是,在修复代码时,您需要小心触发翻转事件,因为将所有条件转换为小于8将无效。

答案 1 :(得分:0)

尝试更改所有&gt; to&gt; =所以在适当的时间发生翻转。