티스토리 뷰
Verilog HDL - Digital Calendar_보완(Day calc module)
ShinyOcean 2021. 2. 6. 17:20Verilog HDL를 주제로 한 열세번째 포스팅은 Day calc module에 대한 계산과정 디테일을 리뷰하고 보완설계를 완성해보겠습니다.
먼저 최종적인 인터페이스는 다음과 같습니다.
디바이스의 LED 7개를 사용하여 요일에 대한 정보를 표기할것입니다 좌측에서 부터 일,월,화,수,목,금,토 순입니다.
이번 포스팅에서는 계산과정에대한 디테일 리뷰를 설계도와 부연설명과 함께 진행하겠습니다.
먼저 최종 설계도를 첨부하겠습니다.
원리는 간단합니다 인터넷에 검색조금만하면 0년 1월 1일의 요일값을 알고 있기때문에 7로나눈
나머지값을 요일의 파라미터로 설정할수 있습니다.
Ex로 표기된 계산과정을 잘 살펴보겠습니다.
이 모듈은 년,월,일의 값을 인풋으로 받아 들입니다. 이를 date, month, year라 칭하여 cal_to_day모듈을 통하여
인풋을 취하면 모듈에서는 두가지 아웃풋을 도출하기위한 연산을 수행합니다.
1. plus_date : 1월부터 해당 월까지 더한 일값 + 일값, 이는 달을 말일마다 쪼개어서 파라미터 값을 지정하고
이를 순차대로 더합니다. 만약 4월 3일을 예로 들겠습니다 그럼 plus_date의 값은 1월부터 3월까지의 말일의 값을
더한 (31+28+31)을 먼저 구합니다,이때 윤년또한 고려합니다, 만약 윤년의 4월 3일을 구하라하면 (31+29+31)을 먼저
계산하겠죠, 다음은 해당월의 일값인 3을 더합니다. 그리하여 4월3일의 plus_date값은 31+28+31+3인 93이 되겠네요
2. plus_year : 처음에는 그냥 무식하게 년에 해당하는 일을 다 더하려고 했습니다.... 1년이라면 plus_year은 365, 2년이라면 365+365한 730, 이런식으로 말이죠 하지만 숫자계산이 너무커져서 디바이스와 프로그래밍에 무리가 가고 좋은 설계가 아니라는 판단이 되었습니다. 그렇다면 어떻게 해야할까요? 어짜피 우리는 차일이 아닌 요일의 타입을 구하는게 목적
입니다. 계산방법도 알고 있죠 나머지값에 case문을 사용하여 요일의 타입을 추출하는방식이죠 이걸 먼저 사용하는 것입니다. plus_year에서 고려할것은 윤년밖에 없습니다 일년은 365일 아니면 366일밖에 없으니까요 그럼 이를 먼저 7로 나누고 나머지값을 구해보니 1아니면 2가 되었습니다. 이 결과를 아웃풋으로 택했습니다.
계산된 두가지의 값을 더하여 mod-7연산을 진행하여 최종적인 요일의 타입을 구하는건 to_day_num 모듈의 역할입니다. 마지막으로 넘어온 요일별 숫자를 LED에 표현가능한 신호로 바꿔주는 역할은 day_printer 모듈이 수행하였습니다.
이로서 년월일의 값을입력하면 그에 알맞는 요일의 결과를 가져오는 모듈을 구현하는데 성공하였습니다.
'Language > Verilog HDL' 카테고리의 다른 글
Verilog HDL - Digital Calendar_보완(Final Top module) (0) | 2021.02.09 |
---|---|
Verilog HDL - Digital Calendar_보완(D-Day module) (0) | 2021.02.09 |
Verilog HDL - Digital Calendar_보완(Year Mon Day module) (0) | 2021.02.06 |
Verilog HDL - Digital Calendar_제안(Mux, Demux) (0) | 2021.02.06 |
Verilog HDL - Digital Calendar_제안(D-Day module) (0) | 2021.02.06 |