Verilog_Keypad(통신, FSM)

공이지·2024년 7월 22일

KeyPad

  • Top 코드
  • FSM을 설계하기전에 간단하게 KeyPad를 활용해 FSM을 설계하는 법을 익히고자합니다.

FSM장단점

  • FSM설계 이전의 KeyPad 설계
    상승엣지에서 col값을 읽어오면 row값은 하강엣지에서 읽어와야한다. 이 둘을 모두 같은 엣지에서 받으면 pdt가 존재하기 때문에 문제가 발생할 수 있다. 이를 방지하기 위해서 상승엣지에서 col값을 받고 row값은 하강엣지에서 받으면 pdt로 인한 문제를 해결할 수 있다.
  • col값을 처음엔 링카운터를 이용해서 8ms마다 col값을 Shift했습니다.

Pull Down 저항을 외부에서 브래드보드에 연결하지 않아도 보드 내부의 풀다운 저항을 연결시켜줄 수 있다.

FSM사용한 설계

링카운터로 col을 8ms마다 shift하여 col값을 on 시켯는데 이를 FSM으로 대체하여 정의

  • SL, CL 따로 always문으로 구현
  • 두개를 합쳐서 정의..

FSM상태천이도 작성후 재설계

  • SCAN이라는 상태는 col값이 8ms마다 shift하는 상황을 State로 표현을 했습니다. 그리고 버튼을 누르면 어떠한 SCAN상태여도 KEY_PROCESS로 상태가 넘어가고 SCAN은 다음 SCAN으로 이동하지 않고 그 SCAN state를 유지합니다. 그리고 key를 누르고 때면, 즉 KEY_PROCESS상태에서 빠져나오면 항상 SCAN0상태로 이동합니다.
  • 사진 처럼(노란색 clk_8msec_n,p) 엣지 디텍터의 상승엣지에서 state를 변경합니다. 이는 상승엣지에서 col값이 8ms마다 쉬프트되는 것을 링카운터 대신 FSM을 사용한 것이다. 그리고 하강엣지에서 키패드의 입력을 받았을때 어떤 버튼이 눌렸냐를(row 입력)파악하여 key_value에 값을 전달합니다. 이를 모두 상승엣지에서 이루어지게 하면 pdt 문제가 발생하여 오류가 발생할 수 있어서 서로 다른 엣지에서 동작하도록 합니다.
  • 원래 위 두번째 사진처럼 키패드의 버튼에 해당하는 값을 나타냅니다. 하지만 만약 계산기나 전화기 같이 동작하게하려면 패드에 해당하는 결과를 변경해줘야합니다. 이는 위 첫번째 사진의 노란색 값만 바꿔준다면 해결할 수 있습니다.
profile
화이팅..!

0개의 댓글