2016년 10월 9일 일요일

PLL이 뭐지?

디버깅을 하다 보면 PLL 레지스터를 설정한다는 말은 자주 나옵니다. CPU Frequency변경할 때 쓰이는 걸로 봐서는 Clock을 변경하는 용도로 쓰이는 것이라는 건 알겠는데, 정확히 무엇일까요?

먼저 PLL은 영어로 Phase Locked Loop군요. Phase를 잡아주는 Loop? 아, 이 단어만 가지고는 이해하기 힘드네요. 일단, 잘 정리해놓은 사이트가 있어서, 여기를 참조해봅니다.

참조: http://egloos.zum.com/recipes/v/5139503

저는 SW 엔지니어니까 너무 깊이 이론까지 들어가고 싶지는 않구요. 하여간에 정리하면,

- Clock을 다른 Frequency로 변경할때 VCO(Voltage Controlled Oscillator)라는 놈을 쓰면 전압에 따라서 가변적으로 Frequency를 변경할 수 있습니다.
- 그런데 문제는 이렇게 Frequency를 변경할때 정확하게 원하는 Frequency를 얻기가 힘든데, 이 출력을 체크해서 원하는 Frequency가 되도록 VCO에 들어가는 전압을 재조정해줍니다.

결국 PLL은 특정 클럭을 이용해서 내가 원하는 Frequency를 안정적으로 만들어내주는 회로입니다. 그러니까 CPU Frequency를 포함한 다양한 Clock 변경에 사용할 수 밖에 없겠네요..

아 잠깐,

실제로 디버깅을 하다보면, PLL 관련 문제는 Settling Time에 관련된 경우가 많은데요. 생각해보면 "Frequency를 변경한다" 는 동작은 한 순간에 되는 것이 아닙니다. 실제로는 PLL을 통해서 출력되는 주파수를 보정하는 시간이 필요하고 이를 Settling Time이라고 부릅니다. 물론 이 Settling Time중에는 원하는 주파수가 보장이 되지는 않을 것이고, 안정적인 동작을 위해서는 Settling Time만큼은 기다려야 하겠죠. 사실 Clock변경 주변에서 일어나는 많은 문제들은 이 기다리는 시간을 늘리는 것만으로 해결되는 경우가 많답니다.

댓글 없음:

댓글 쓰기