본문 바로가기
PLL과 M/N:D

흔히들 말하는 Clock은 PLL (Phase Locked Loop)라는 회로를 통해서 일정한 주파수를 Generation 해 줘요. 어떻게 해주느냐? 하면, 너무 길고 어려운 얘기라서 여기에서 무턱대고 말을 풀어낼 순 없고, 아~주~ PLL의 원리에 대해서 잘 설명한 Site가 있습니다. 아주 유명한 www.rfdh.com 이라는 곳에 접속하셔서, RF 기초강의실 안에 PLL (Phase Locked Loop)를 선택하시면 Hardware적인 원리가 아~주 자세하게 나와 있으니, 그걸 참고 하시면 좋을 것 같고요. 저는 이걸 어떻게 이용해 먹을까에 Focus를 맞추어야 할 것 같사옵니다. 
PLL이라는 건 기준 주파수인 TCXO를 통해서 원하는 주파수의 Clock을 Generation하는 거라고 보시면 되는데, 다른 건 제쳐 놓고 Hardware적으로 안정적으로 Fout을 100MHz 짜리를 만들어 내는데 필요한 회로는 아래와 같다고 보시면 되는 거죠.

10MHz짜리 TCXO는 우리 Target의 심장과 같이 벌떡벌떡 대는 10MHz짜리 Clock source고요, TCXO output을 PLL에 넣어 주시면 여러 가지 복잡한 과정을 거쳐서! Fout으로 100MHz짜리를 만들어 낸다고 보시면 됩니다요. VCO가 Voltage Controlled Oscillator로서, 우리가 원하는 주파수를 전압을 통해서 만들어 낸다고 보시면 되고요 - 뭐 예를 들면 전압이 올라가면 101MHz, 전압이 내려가면 99MHz 뭐 이런 식으로요 - VCO만 쓰자니 너무 주위환경에 대해서 변덕이 심해서 VCO output을 sampling해서 TCXO와 같은 Level로 낮춘 후, 과연 100MHz가 괜찮게 나오는가 TCXO와 다시 맞춰 보고 나서 (Phase Detector), 이게 100MHz가 아니네? 하면 이 차이를 펄스->전압 변환기를 이용해서 VCO의 input전압을 재조정 해 주는 뭐시기 그런 회로인 셈 인 거죠. 자, 이제 MCU 내부에 보면 on-chip PLL이라고 해서 이런 안정적인 주파수를 내는 Fixed Frequency Source가 몇 개쯤 준비되어 있는 게 요즘 세상입니다요.

보이시죠. 가운데, CPLL, HPLL, PPLL 요런 거. 요런 거가 위의 내용처럼 안정된 주파수를 TCXO를 통해서 전체 IP들에게 전달해 주는 주파수 원이 되는 거랍니다. 까만 건 Data Bus이고요 화살표 들이 Clock이라고 보시면 되어요. CPLL이나 HPLL, PPLL은 TCXO의 input을 받아서 clock을 만들어 내고 이것들은 회로 전역에 퍼져 나가죠. 꼭 혈관 보는 것 같아요.
 
그림에 보시면 /2, /4 뭐 이런 식의 나눗셈으로 되어 있지요? 이런걸 counter라고 해서 /2는 주파수를 반으로 쪼개고, /4는 주파수를 ¼ 해주는 건데요, 이건 어떻게 하는 걸까요? 이건 Clock을 Counting하는 거에요. 1/2는 2번에 한번 clock을 세어 주면서 output을 센 만큼 내어 주면 Clock이 반으로 줄어들고요, 1/4는 4번에 한번 세어주면 output 주파수가 1/4배 되는 거죠. 뭐 간단하지요. 이런 식으로 한가지 주파수를 가지고 여러 가지의 주파수를 만들어 내서 각 Peripheral에 맞는 주파수를 공급해서 사용하는 방식인 게지요.
 
더 재미있는 방식의 Clock 구성이 있는데, 그런 건 어떤거냐면 M/N:D counter라는 건데요. PLL의 구성요소 안에 아예 이런 Counter를 넣어서 더욱 다양한 입맛의 여러 가지 주파수를 만들어 내는 테크닉인 거지요.

자, 보시지요. 원래 Fout을 1/M배 해서 TCXO와 비교 한다고 했으니, M을 크게 할 수록 VCO가 낼 수 있는 주파수의 크기는 커지겠지요! 오, 이렇게 해서 1/M divider (divider가 counter에요)를 쓰게 되면 VCO output을 더 큰 주파수로 낼 수 있게 되어 TCXO를 M배 했다고 봐야겠지요. 으후. 그리고, TCXO를 아예 1/N counter를 이용하면 VCO값이 1/N이 되겠지요. 결국에는 VCO 값을 M배 하고, 1/N배 한다고 하여 M/N Counter PLL이라고 부르고요,
예를 들어 보면, M=1000을 1/M divider에 넣으면 VCO는 10GHz를 낼 있게 되는 거죠. (N=1이라고 치고요) 그리고 N=10을 1/N Counter에 넣으면 - M=100일때 - TCXO는 1MHz가 되고요, VCO는 100MHz가 되는 거에요. 요호~ 뭐 이런 식으로 Fout을  N/M counter를 이용해서 뻥튀기 할 수도 있고 줄일 수 도 있는 거죠. N과 M은 정수이고요. 이걸 이용해서 Clock Source 자체를 M/N 할 수 있고요, 요 Fout 자체를 TCXO처럼 가져다 쓰는데 N과 M을 조절해서 다른 주파수를 만들어 낼 수도 있는 거구요. 참~ 자유롭죠. 이때, N과 M을 Software로 Control 가능하도록 Clk Controller를 가지고 있는 MCU들이 있어요. 이런 MCU들은 N과 M을 Register로 설정가능하고요. 이런 N과 M을 잘 조절해 주는 건 우리의 몫인 거에요.
요즘은 워낙 기본 Source도 여러 가지로 M/N Counter를 이용해서 output으로 내주고요, 그 중에 원하는 주파수를 고를 수 있도록 해주는 Clock Controller가 많이 유행을 해요. 이런걸 Source Selection이라고 부르기도 하니까, 요런 거 잘 찾아보시고 원하는 주파수가 있으면 잘 선택하셔서 쓰시길 바래요.
 
예를 들면, Clock Register중에서 Source를 아래와 같이 여러 가지 종류로 고를 수 있게 준비되어 있는 경우가 있고요. Source Selection한 후에도 M/N을 또 따로 할 수 있도록 준비되어 있는 친절한 경우도 있답니다. 아래 예에서 ADSP의 Source Clock을 CPLL의 output에 1/3배 clock을 넣어야 하는 경우에는 어떤 특정 Register의 ADSP_CLK_SRC_SEL bit인 [25:21] bit을 00110으로 설정해 주면 되겠지요.

Clock을 얘기하다 보니, 한가지 더 Clock에 대해서 확인 할 것이 있는데요, Duty라는 거에요. Duty라는 건 Clock이 주기성을 가지지만 실제 High인 구간이 꼭 Low인 구간과 같아야 한다는 법은 없는 거니까, 실제 High 구간을 얼마나 잡을 것이냐를 따로 설정이 가능한 거에요. 보통 Clock은 Duty가 50:50으로 균형 잡혀 있는 아름다운 모습일 경우가 많지만, Duty비가 큰 Pulse를 넣어야 제대로 동작하는 Device들도 있으니까, 잘 참고해서 사용하세요.

이런 M/N과 Duty 비까지 모두 Control가능한 Clock Controller를 M/N:D Counter라고 부른답니다.

친절한 임베디드 시스템 개발자 되기 강좌 글 전체 리스트 (링크) -



댓글





친절한 임베디드 개발자 되기 강좌 글 전체 리스트 (링크) -