티스토리 뷰
Verilog HDL를 주제로 한 열번째 포스팅에서는 요일계산모듈에 이어 D-Day 계산 모듈을 다루어 보겠습니다
지난 포스팅의 탑모듈의 회로도를 살펴보면, 중앙 하단에 Dday_calc라 정의해둔 모듈이 바로 D-Day계산 모듈입니다.
아래의 회로도는 D-Day계산 모듈의 내부 회로도 입니다.
Dday_calc모듈은 크게 두가지의 인풋과 한가지의 아웃풋이 필요합니다.
인풋 : 현재날짜, Dday로 설정할 날짜
아웃풋 : 현재날짜로부터 Dday로 설정한 날짜까지의 차일
이런식으로 구성될것같습니다.
그렇다면 먼저 인풋을 다루어보겠습니다.
현재날짜의 경우 날짜 카운팅 모듈인 Year Mon Day모듈의 아웃풋을 취하면 되겠지만 Dday로 설정할 날짜는
어떻게 받아들여야 할까... 고민을 많이 해보았습니다.
그러다 생각난것이 DeMux였습니다. 디먹스의 경우 나중에 탑모듈에서 각 모드마다의 스위치를 분배하여줄때도
탁월하였습니다. 먹스와 디먹스에 대한내용은 다음포스팅에서 더 다루어보고 이번포스팅에서는 어떠한 역할을
하는지 정도만 언급하겠습니다.
디먹스는 인풋으로 들어온 신호를 클럭을 기준으로 어떤 아웃풋으로 갈지 선택하여줍니다. 이는 마치 프로그래밍
에서의 case문과 비슷합니다.
이제 본론으로 돌아와 Dday로 타겟팅할 날짜를 인풋으로 취하는데 디먹스를 어떻게 써먹을까? 에 대하여
다루어보겠습니다.
방법은 간단합니다. 디바이스의 push버튼을 이용한 업 카운터 모듈을 3개 구현합니다.
3개의 업 카운터는 년, 월, 일을 타겟으로 MOD-100, MOD-12, MOD-31로 만든후
월과 일 카운테의 아웃풋값에 1을 더하여 1부터 날짜를 카운팅할수 있게 합니다.
0월과 0일은 없기 때문입니다.
그리고 이제 디먹스를 사용합니다.
만약 각각의 업카운터에 push버튼을 하나씩 만 사용한다고 하여도 3개를 소모하여야 합니다.
하지만 디먹스를 이용하여 기준이될 클럭값이 0이라면 push버튼이 Day up카운터에 배정이되고
1이라면 Month up카운터에, 2이라면 Year up카운터에배정된다면 우리는 하나의 버튼을 사용하지만
3개를 사용하는 것과 같은 효과를 볼수 있습니다.
마지막으로 아웃풋에 대하여 이야기 해보겠습니다.
이전까지의 과정에서 현재날짜와 기준날짜 두개의 인풋을 성공적으로 가져왔다면
중앙 우측의 Dday_Calc모듈을 통하여 두 날짜의 차일을 계산할수 있습니다.
Dday_Calc모듈에서 계산한 차일이 이모듈의 최종 아웃풋입니다.
'Language > Verilog HDL' 카테고리의 다른 글
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_제안(Day calc module) (0) | 2021.02.06 |
Verilog HDL - Digital Calendar_제안 (Year Mon Day module) (0) | 2021.02.03 |
Verilog HDL - Digital_clock(am/pm) (1) | 2021.02.03 |