Thursday, September 27, 2018

FPGA PLL Test (Lattice, Altera)

얼마전에 FPGA를 공부해볼 요량으로 Lattice iCEstick(iCE40HX1K)을 구매했다. 테스트 첫날 FPGA가 MCU와는 전혀 딴판이라는 것을 알았고 동시에 상당히 흥미가 생겼다.

간단히 내장 LED등 제어해보다가 clock을 multiplication할 수 있다는 것을 알고 인터넷의 간단한 예제를 찾아 실행해 봤으나 허사였다. 나중에 알고보니 예제들이 대부분 simulation을 위한 것이었고(시뮬레이션과 합성의 차이를 모르는 때) after 키워드가 시뮬레이션 용이라는 것을 몰랐다. (내가 본 시뮬레이션 예제들은 참조신호를 복사해 지연시키고 xor하여 논리합으로 구현하는 것이었다.  이것이 간단히 구현되는 바람에 상당히 매력을 느낀상태였다.) 어쩐지 아무리 after를 줘봐도 신호차이가 발생하지 않더라.

나중에 PLL(Phase Locked Loop)을 사용하여 신호 주기를 변경할 수 있고, 이는 칩 업체마다 PLL 모듈을 제공한다는 것을 알았다.

iCE40 family도 PLL을 제공하며, 이중 HX1K는 1개를 제공(TQ144 혹은 CB132 패키지만)한다.  내가 이쪽에 문외한이라 최대한 인터넷에서 간단한 예제를 찾아봤으나 쉽게 찾을 수는 없었는데, 그중 가장 간단한 예제를 결국 찾아 실행되는것을 확인하였고, 이를 'iCE40 sysCLOCK PLL Design and Usage Guide' 문서의 설명대로 파라메타
를 일부 조정하여 아래와 같은 결과(96.15Mhz)를 얻었다. 나와 같은 초보자들에게 참고가 되길 바란다.



아래 테스트한 verilog hdl 코드를 올린다. 




PLL설정을 다시 이해하고 테스트 해보았다. 12Mhz의 클럭을 가지고 있는 Lattice ice40이 낼 수 있는 최대 클럭은 384Mhz 이다.



이와 유사하게 50Mhz 클럭을 가진 Altera Cyclone IV의 PLL을 이용하여 500Mhz 클럭을 만들어 보았다. 이것은 1GHz 이상의 더 빠른 클럭 생성이 가능하다.