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ビット増やす方法を理解できません。増分を押すたびに永遠にカウントされます。何か案は?ステート・マシン・コードなし
おかげ
1つのカウンタを持ち、それをディスプレイの数字にデコードする方が簡単でしょうか?また、コードインデントを並べ替えることで、バグを読んで見つけやすくなります。 – Morgan
Morganが言ったように、インデントを修正してください。 – Moberg