본문 바로가기
Embedded SW/Embedded SW Introduction

12. MCU에서 Clock 과 오실레이터(Oscillator) 이란 무엇인가?

by 방구석 임베디드 2021. 7. 22.
반응형

MCU에서 Clock이라는 단어가 참 많이 나옵니다.
Clock은 MCU를 개발하는데 있어서, 가장 기초적이고 중요한 개념입니다.

그렇다면 Clock이라는 개념을 위키에서 먼저 찾아 보도록 할게요.

https://ko.wikipedia.org/wiki/%ED%81%B4%EB%9F%AD_%EC%8B%A0%ED%98%B8
클럭 신호
(영어: clock signal)는 논리상태 H(high,논리 1)와 L(low,논리 0)이 주기적으로 나타나는
 방형파(square wave) 신호를 말한다.

많은 경우 전자공학 디지털 회로에서 클럭 신호에 맞추어 신호의 처리를 하는 동기 처리를 위해 사용한다.
클럭은 순차회로(sequential circuit)의 플립플롭(flip-flop)에서 반드시 필요하다.
여러개의 플립플롭이 비동기 클럭(asynchronous clock)으로 동작하더라도 클럭입력(clock input)은 필요하다.
논리 회로가 커지면 여러 개의 클럭이 필요하므로 동기식(synchronous)와
비동기식(asynchronous)이 섞여 설계되어 동작한다. 
FPGA와 같은 큰 회로에서는 클럭 신호가 별도로 지정하는 경우도 있다.[1] 
별도의 클럭 입력이 결정되어 있고, 내부에서 클럭 네트워크를 통해 각 논리 모듈로 전용 신호선이 존재한다

위키에서 찾아보면 참 정확하면서도 어렵고 그렇습니다.

조금 쉽게 설명하도록 하겠습니다.

 

아래는 오실레이터입니다. 

이것이 Clock을 만들어 줍니다.

이 오실레이터를 아래 회로의 Y201 이라고 보시면 됩니다.

이 오실레이터는 MCU와 연결을 합니다.

그리고 MCU에게 Clock을 제공해 줍니다.

Clock을 제공한다는 뜻은 아래와 같은 파형을 MCU에게 전달한다는 것을 의미합니다.

MCU는 이것을 이산화 하여 1과 0으로 인식합니다.

위의 파형은 20MHz의 파형으로 생각하면

1초에 20000000 번의 Clock을 MCU는 받아드리게 됩니다.

여기서 MCU는 아래와 같은 사각파로 Clock을 받아드리게 되지요.

이유는 MCU는 아날로그값을 디지털값으로 변환하여 Low와 High로 인식하게 됩니다.

아래와 같이요!

MCU는 이 Clock을 가지고 무슨일을 하게 될까요?

1초에 20000000번이나 들어오는 Clock을 가지고 무슨일을 할수 있을까요?

 

1. MCU안의 CPU는 이 Clock을 이용하여 연산 동작을 수행합니다.

다시말해서 fetch, decode, excute 작업을 수행합니다. 코드를 수행한다는 의미도 될수 있겠네요.

1) fetch : 메모리에서 instruction을 가져옵니다.

2) decode : 메모리부터 획득한 Instruction을 해석해서 어떠한 동작을 해야할지를 분석합니다. 

3) excute : 해석된 Instruction을 실행합니다.

 

위의 화살표 표시에 맞추어 1) -> 2) -> 3) 동작이 수행되어 코드 한줄이 수행된다고 생각하시면 될것 같습니다.

(파이프라인 및 어셈코드 등 자세한 내용은 우선 생략합니다.)

 

만일 아래와 같이 Clock speed가 빠라진다면  instruction을 가져오고 해석해서 동작하는 speed가 빨라질 것입니다.

따라서 MCU에서는 최대한의 cpu clock 속도를 확보하는 것이 성능과 직결됩니다.

 

2. MCU안에 다양한 주변기기(peripheral)에게 Clock을 주어 주변기기가 동작을 수행할수 있게합니다.

MCU안에는 다양한 주변기기들이 들어있습니다.

예를 들어 Timer 모듈같은 경우에는

Clock을 전달받아 이것을 counting 하여, 우리가 원하는 시간(ex 1ms)에

다양한 event(ex 주기적인 interrupt)를 만들어 낼수 있습니다.

결국 Clock은 MCU안의 Cpu와 주변기기를 동작시키는 밥줄이라고 할수 있겠습니다.

 

그런데 20MHz로 CPU를 동작시키기에는 너무 느립니다.

보통 32비트 고급MCU의 경우에는 200MHz~300MHz까지 CPU Clock을 사용하도록 설계가 되어져 있습니다.

 

그런데 지금 오실레이터에서 생성되는 Clock은 20MHz밖에 되지 않습니다.

어떻게 20MHz를 200MHz로 뻥튀기 해줄수 있을까요?

 

이것을 위해서 PLL에 대한 내용이 추가로 필요합니다.

우선 오늘 포스팅은 여기서 마무리 할께요!

 

반응형

댓글