按下按钮时如何将4位计数器增加1位

时间:2016-09-13 07:16:54

标签: verilog counter

我正在Nexys4 FPGA上编写一个秒表程序。我可以启动,停止和重置秒表,但是我在实现增量功能时遇到了麻烦。增量功能是一个按钮,按下时,将时钟增加1毫秒。因此,如果七段显示显示1:002并且按下增量按钮,则显示屏将显示1:003。这是我的柜台代码片段:

always @ (posedge (clk), posedge(rst))
begin 


if (rst == 1'b1)begin
        Dig0 <= 4'b0000;
        Dig1 <= 4'b0000;
        Dig2 <= 4'b0000;
        Dig3 <= 4'b0000;
    end 

//increment if inc
else if(state == 2'b11)// && Dig3 < 4'b1001)begin
begin
    Dig0 <= Dig0 + 4'b0001;
    state <= 2'b00;
end


//only continue if Cen is 01 & not inc
else if(Cen == 2'b01)begin  

    //add 1 to first digit up till 9
    Dig0 <= Dig0 + 1'b1;

    //reset if == 10    
        if(Dig0 > 4'b1001)begin
            Dig0 <= 4'b0000;

            //add 1 to second digit (when first resets) up till 9
            Dig1 <= Dig1 + 1'b1;
            end
            //reset if == 10
            if(Dig1 == 4'b1010)begin
                Dig1 <= 4'b0000;

                //add 1 to third digit (when second reset) up till 9
                Dig2 <= Dig2 + 1'b1;
                end
                //reset if == 10
                if(Dig2 == 4'b1010)begin
                    Dig2 <= 4'b0000;

                    //add 1 to fourth digit (when third reset) up till 9
                    Dig3 <= Dig3 + 1'b1;
                    end
                    //reset if == 10
                    if(Dig3 > 4'b1001)begin
                        Dig3 <= 4'b0000;

                    end         
    end 

Cen来自状态机,状态2'b11递增,2'b01计数,2'b00停止。我无法弄清楚如何让它增加一点。每当我点击增量时,就会永远计算。有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

如果没有状态机代码,我只能猜测问题。您还需要发布状态机代码以符合猜测。

但是,计数器继续增加的最可能原因是Cen也很高(2&#39; b01)而状态是2&#b;。

Cycle 1 ) - state == 2'b11 , Cen == 2'b01 
            Dig0 +1 , state = 0 

Cycle 2 )  - state = 0 , Cen == 2'b01 
              goes to else clause and the counter continues to increment 
              as long as Cen is 2'b01

您可能需要解决的问题也很少。

1)在增量部分(状态= 2&#39; b11),您仍然需要检查并递增所有4位数(Dig0-3),因为递增Dig0(超过9次)将导致翻转到下一个数字等等。

2)最好在单个always块中更新状态机变量。所以最好将语句state = 2'b0移到状态机中。

3)同样如评论中已经建议的那样,您可以使用单个计数器并对数字进行解码。