我正在verilog中創建自動售貨機。 FPGA板上有一個按鈕用作硬幣插入器,每次按下按鈕時,它將爲用戶可花費的總金額增加一個「四分之一」,並將總數顯示在左側和右側七段顯示器上。在Verilog中保持按鈕點擊數
例。 第一個按鈕推動:25美分 第二個按鈕推動:50美分 第三個按鈕推動:75美分 第四個按鈕推動:$ 1.00(七段顯示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
我被陷在如何保持按鍵的點擊次數。我可以看到七段顯示器上的第一個值,但我不確定如何增加總硬幣。我無法從自己的研究中找到任何有關這方面的信息。
各州必須保存在登記冊中。這需要觸發器,即通常在「posedge clk」上更新的代碼。 – JohanL
@JohanL所以這樣的事情? 'always @(posedge clock) \t begin \t state = next_state; \t end' – grimes88
那麼,你的存儲狀態基本上是'totalChange',所以這就是需要存儲的內容。 – JohanL