2016-09-13 4 views
0

Nexys4 FPGAでストップウォッチプログラムを作成しています。ストップウォッチを開始、停止、リセットすることはできますが、増分機能の実装には問題があります。インクリメント機能はボタンで、押すとクロックが1ミリ秒増加します。したがって、7つのセグメント表示が1:002を表示し、インクリメントボタンを押すと、ディスプレイに1:003が表示されます。ここではカウンターのための私のコードの抜粋です:CENは状態2'b11がインクリメントされ、ステートマシンから来ているボタンを押したときに4ビットカウンタを1ビットインクリメントする方法

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 

、2'b01はカウントされ、2'b00はストップです。私はそれをちょうど1ビット増やす方法を理解できません。増分を押すたびに永遠にカウントされます。何か案は?ステート・マシン・コードなし

おかげ

+2

1つのカウンタを持ち、それをディスプレイの数字にデコードする方が簡単でしょうか?また、コードインデントを並べ替えることで、バグを読んで見つけやすくなります。 – Morgan

+0

Morganが言ったように、インデントを修正してください。 – Moberg

答えて

0

だけ私が唯一の問題についての推測を行うことができます。推測に合うようにステートマシンのコードも投稿する必要があります。

しかし、カウンターがインクリメントを続ける可能性が最も高い理由は、Cenが2'b11であるのに対し、Cenも2'b11であることです。

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)インクリメントセクション(state = 2'b11)でDig0を増やす(さらに9回)と、次の4つの数字(Dig0-3)を確認してインクリメントする必要があります数字など。

2)1つのalwaysブロック内のステートマシン変数を更新する方が良い。ステートメントマシンstate = 2'b0をステートマシンに移動する方がよいでしょう。

3)また、このコメントで既に提案されているように、単一のカウンタを持ち、数字のためにデコードすることもできます。

関連する問題