728x90

 0. [verilog] - 디지털 시계


이전에 배운 내용을 통해 디지털 시계를 구현해보았습니다.

기능은 총 10가지로 시계, 시계 조절, 스톱워치, 타이머, 달력, 달력 조절, 알람, 피아노, 세계 시간, 잠금 화면을 구현해보았습니다.


시계, 시계 조절, 알람, 세계 시간은 시, 분, 초의 데이터를 활용하고, 데이터를 변경하는 파트는 오직 시계 조절에서만 가능합니다.


스톱워치는 독립적인 데이터를 활용하며 독자적인 분, 초, ms의 데이터를 활용하고 변경합니다.


피아노는 스위치 입력에 따라 piezo에 출력이 발생하도록 하고, 데이터는 3bit의 저장공간만을 활용하고, 현재 어떤 음을 출력해야하는지를 출력 파트에 넘겨주는 역할을 합니다.


달력, 달력 조절은 날짜 데이터를 독립적으로 활용하고, 날이 변경되는 부분은 시계의 시, 분, 초가 정각을 지나가는 때에 일이 변경되도록 하였습니다.


 1. 풀이


크게 3가지 파트로 분리하여 구현을 하였습니다.

1. 입력 처리 파트

시계에서 입력은 sw, bus_sw, clk으로 주어지는데, 초반 부분에 입력을 처리하는 부분을 각각 always문으로 나누어 처리를 해주었습니다.

sw는 one shot trigger 방식으로 데이터를 받아 입력이 들어오면 INPUT_SW[12:0] 배열에 1을 저장하도록 하였습니다.

clk은 시간에 따라 CNT 변수를 변화시키는데 활용되었고, bus_sw는 입력 처리를 따로 구현하지 않았습니다.


2. 내부 데이터 처리 파트

내부 데이터를 처리하며 주의해야 하는 부분이 있는데, 데이터 변화는 오직 하나의 always 문에서 모두 이루어져야 하는 것 입니다.

저는 그래서 중요한 데이터는 always문을 분리하여 변경을 하는 형식으로 구현하였습니다.


3. 출력 처리 파트

외부 출력 데이터는 총 3가지 입니다.

piezo, led, text lcd

이 3가지 출력을 reg 형 변수에 담아 출력을 전달하는데 총 10가지 기능에 맞게 10가지 출력의 형태를 미리 준비하고, STATE가 변화하면 연결하는 출력을 변경해주는 방식으로 구현해주었습니다.



 2. 소스코드


https://github.com/kyun1016/verilog/blob/master/zip/lab_10%20(2).zip



 3. 참고




질문이나 지적 있으시면 댓글로 남겨주세요~

도움 되셨으면 하트 꾹!


+ Recent posts