past/CIE

  앞서 " 2010/06/07 - [▶ CIE/FPGA기반 디지털시스템] - 디지털 시계 만들기 (1) - 개요 "에서 설계하고자 하는 디지털 시계의 개략적인 기능에 대해 설명해 보았다. 알람 기능이 포함되어있지 않은 현재 상태에서 총 4개의 모듈(MasterSelect, DigitalClock, TimerLogic, SegmentDisplay)이 디지털 시계를 구성하고 있는 것을 확인 할 수 있었다.

  여기서는 디저털 시계를 구성하고 있는 MasterSelect 모듈이 잘 설계되어서 정상 동작을 하는지 확인하는 시뮬레이션을 수행해보려고 한다. Quartus 또는 MaxPlus를 써본 사람이라면 어렵지 않게 수행할 수 있다.

  Quartus에서 시뮬레이션은 기본적으로 Functional 모드와 Timing 모드로 수행가능하다. Timing using Fast Timing Model이란 모드도 있지만 사용해보지 않아서 설명하지 않기로 한다.(ㅡ_ㅡ;;) Timing 모드에서는 내부 소자들의 연결로 인해 발생할 수 있는 전파지연(Propagation delay)을 고려한 시뮬레이션을 수행한다. Functional 모드에서는 전파지연을 고려하지 않고, 입력에 대한 출력을 보여 줌으로써 올바른 기능을 하는지 확인 할 수 있다.

  현재 사용하고 있는 실습 보드에서는 24Mhz, 27Mhz, 50Mhz의 클락을 사용할 수 있게 되어 있으며, 외부 클락의 사용 또한 허용한다. 하지만 시뮬레이션의 편의를 위해 1Mhz 클락을 입력으로 하고 시뮬레이션하였다. 다음 그림은 시뮬레이션을 위해 Vector Waveform file을 만든 것이다.


< 시뮬레이션을 위한 Vector Waveform file의 생성>


  clk라고 이름 붙여진 clock1Mhz로 설정하고, resetactive-low로 설계하였으므로, 초기에 리셋을 한번 해주고 동작의 테스트를 수행하였다. sw0와 sw1은 임의의 값으로 설정하고, Simulation Tool을 이용하여 시뮬레이션을 수행한다.


< 시뮬레이션 결과 - Timing 모드로 시뮬레이션 >


< 시뮬레이션 결과 - Functional 모드로 시뮬레이션 >


  Timing 모드와 Functional 모드에서의 시뮬레이션을 비교해서 보여주고자 했지만, 화면을 축소해서 스크린샷을 찍다보니 제대로 표현이 되지 않았다.ㅡ_ㅡ;; 시뮬레이션의 전체적인 결과를 먼저 말하자면 아주 자~알 설계되었다는 것이다.ㅎㅎㅎ(책에 포함된 실습코드이니 당연하다ㅡ_ㅡ;;)

  sw0가 입력(High)될 때마다 그 rising edge에서 mode_out이 순차적으로 바뀌는 것을 확인하는 것으로 sw0에 대한 기능이 잘 설계되었음을 알 수 있다. sw1의 경우, rising edge에서 set_time_out을 약속된 값으로 순차적으로 변환시키고 있으므로, 이 또한 정상 동작함을 확인할 수 있다. sw0sw1비동기 신호이므로 클락과 무관하며, 그에 대한 동작임을 확인 할 수 있다.



※ 참고1. 실제 실습 보드에 코드를 download하여 테스트를 해보면, 순차적인 움직을 보이던 mode_out의 출력 또는 set_time_out의 출력이 비정상적으로 한단계 정도를 뛰어넘는 동작을 보여줄 때가 있다. 이는 sw0와 sw1를 DIP 스위치로 연결하였기 때문인것 같다. DIP 스위치를 ON 시킬 때 채터링(chattering) 현상이 발생할 수 있기 때문이다. (DIP 스위치의 채터링 현상은 어떤 메뉴얼을 읽다가 알게 된 것이다.)
 
※ 참고2. 현재 Quartus는 윈도우7에서도 정상동작한다. compilation은 물론 simulation 수행에도 문제가 없다. 하지만 USB-blaster를 이용한 하드웨어 연결이 되지않는다. Quartus 폴더에 있는 driver를 인식지 못하기 때문인데, 구글링해본 결과 현재 버전이 아닌 이전 버전(정확한 버전은 기억나지 않지만 제법 오래된)의 USB-blaster driver를 사용하여서 연결에 성공한 경우는 있다고 한다.ㅎㅎ
0 0