我正在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