저는 Verilog로 자동 판매기를 만들고 있습니다. FPGA 보드에는 코인 삽입 기의 역할을하는 버튼이 하나 있으며 버튼을 누를 때마다 사용자가 소비 할 수있는 총량에 '분기'가 추가되고 왼쪽 및 오른쪽 7 세그먼트 디스플레이에 총계가 표시됩니다.Verilog에서 버튼 클릭 수 유지
Ex. 첫 번째 버튼 푸시 : 25 센트 두 번째 버튼 푸시 : 50 센트 세 번째 버튼 푸시 : 75 센트 네 번째 버튼 푸시 : $ 1.00 (7 세그먼트 디스플레이에서 10). 네 번째 버튼을 누른 후에 증가하지 않습니다.
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 이렇게하면 어떨까요? '항상 @ (posedge 시계) \t 시작 \t 상태 = next_state; \t end ' – grimes88
글쎄, 저장된 상태는 본질적으로'totalChange'이므로, 저장해야 할 것이 있습니다. – JohanL