私はVerilogで自動販売機を作成しています。 FPGAボードには、コインインサータとして機能するボタンが1つあります。ボタンを押すたびに、ユーザが使用できる合計金額に「四分の一」が追加され、左右の7セグメントディスプレイに合計が表示されます。Verilogでボタンのクリック数を維持する
Ex。 第1ボタン押し:25セント 第2ボタン押し:50セント 第3ボタン押し:75セント 第4ボタン押し:$ 1.00(7セグメント表示では10)。 4回目のボタンを押すとインクリメントされません。
input quarterIn,
output reg [4:0] state,
output reg [4:0] next_state,
output reg totalChange,
output reg [7:0] RSSD,
output reg [7:0] LSSD
);
/***coin implementation***/
parameter
c0 = 0,
c1 = 1,
c2 = 2,
c3 = 3,
c4 = 4;
always @(posedge clock) begin state = next_state; end
always @ (quarterIn or totalChange)
begin
case(totalChange)
0: begin if(quarterIn == 1) totalChange = 1; state = c1; end
1: begin if(quarterIn == 1) totalChange = 2; state = c2; end
2: begin if(quarterIn == 1) totalChange = 3; state = c3; end
3: begin if(quarterIn == 1) totalChange = 4; state = c4; end
4: begin if(quarterIn == 1) totalChange = 4; state = c4; end
endcase
end
私は、ボタンのクリック数を維持するためにどのように立ち往生しています。私は7セグメント表示の最初の値を見ることができますが、合計コインを増やす方法は不明です。私は自分自身で研究しようとすることからこれに関する情報を見つけることができませんでした。
州を登録する必要があります。これには、フリップフロップ、すなわち「posedge clk」で通常更新されるコードが必要です。 – JohanL
@JohanLなんてこんな感じですか? '常に@(ポーズクロック) \t begin \t state = next_state; \t end ' – grimes88
まあ、保存された状態は本質的に 'totalChange'なので、保存する必要があります。 – JohanL