마이컴의 구성
마이컴의 구성
마이컴은 I/O, CPU, ROM, RAM, 주변회로의 부품으로 구성되어 있습니다.
이러한 부품의 조합을 통해, "어떠한 입력을 받아, 규정된 처리를 실행하고, 그에 따라 어떠한 신호를 출력”하는 마이컴의 동작을 구현합니다.
그럼, 부품 각각의 역할에 대해 설명하겠습니다.
I/O : 어떠한 입력을 받고, 어떠한 신호를 출력하는 부분
CPU : 규정된 처리를 실행하는 부분
ROM : 처리의 내용을 결정하는 소프트웨어가 격납되어 있는 부분
RAM : 처리 결과 등, 일시적으로 데이터가 격납되는 부분
주변회로 : 마이컴의 기능을 풍부하게 하는 회로군
<예> 전기포트에서 마이컴의 동작
그럼, 버튼 입력을 통해 히터를 가열하여 물을 끓이는 전기포트를 예로 들어 마이컴 내부가 어떻게 동작하는지 확인해 보겠습니다.
I/O란?
I/O (Input / Output)는 외부에 접속된 부품으로부터 신호를 입력받거나, 외부에 접속된 부품으로 신호를 출력합니다.
예를 들어 전기포트의 경우 버튼이 입력되면 히터를 가열하여 물을 끓입니다. 전기포트에서는 『버튼 입력을 받는 동작』, 『전기포트 내부 온도계의 신호를 수신하는 동작』, 『히터에 제어 신호를 출력하는 동작』이 I/O의 역할입니다.
만약 I/O가 없다면, 버튼이나 전기포트 내부 온도계의 신호 수신, 히터로의 제어 신호 출력이 불가능해집니다.
이와 같이, I/O는 마이컴에 있어서 입구와 출구에 해당하는 매우 중요한 부분입니다.
CPU란?
CPU는 중앙 연산 처리 장치 (Central Processing Unit)라고 하며, 마이컴에서 사령탑의 역할을 합니다. 예를 들어 전기포트의 마이컴에서는 버튼이 입력되면, 히터로 가열 지시 및 물의 온도 상승에 따라 히터 정지 지시를 내리는 부분이 CPU입니다.
전기포트에서 물의 온도를 90℃로 높이고자 하는 경우,
『버튼이 입력되면, 히터를 가열하여 물을 끓임』
『전기포트 내부 온도계의 온도가 90℃에 도달하면 히터를 정지』와 같이
미리 처리를 규정해 놓습니다.
이에 따라, 전기포트에 물을 넣고 버튼을 입력하면, 물을 90℃로 가열시킬 수 있습니다.
여기에서 미리 규정해 놓은 처리를 프로그램이라고 합니다. 이러한 프로그램에는 예정된 계획이라는 의미가 있습니다. 따라서, CPU는 사령탑으로서 예정된 계획대로 처리를 실행해 나갑니다.
CPU가 실행하는 처리 (명령)
CPU에 대해 더 구체적으로 알아보겠습니다.
『전기포트 내부의 온도가 90℃에 도달하면 히터를 정지』시키는 처리를 크게 분류하면 아래의 3가지 동작으로 분류할 수 있습니다
1. 수초 간격으로 전기포트 내부의 온도 센서 출력을 수신
2. 취득한 전기포트 내부의 온도와 임계치 90℃를 비교
3. 온도가 임계치 90℃ 이상인 경우 히터를 정지
이러한 동작은 더 자세하게 분류할 수 있으며, 최소 단위까지 분류하면 CPU가 실행하는 처리 (명령)가 됩니다. 구체적으로 설명하자면, 상기 예의 『2』 및 『3』의 『비교』와 『히터 정지』 처리는 CPU에 대한 비교 명령과 분기 명령에 해당합니다. 이것을 마이컴의 언어인 어셈블리 언어와 같이 기술하면 아래와 같이 나타낼 수 있습니다.
・CMP 전기포트 내부 온도, 90℃ (전기포트 내부 온도와 90℃를 비교)
・BGE 히터 정지 (전기포트 내부 온도 ≧ 90℃가 성립하면 히터 정지로 분기)
마이컴에 따라 다르지만, 비교 명령은 CMP (=compare : 비교)와 같이 어셈블리 언어의 명령어 대부분은 동작을 이미지화한 기호가 사용됩니다. 기타 명령어로는 전송 명령 MOV (move), 기억 명령 ST (store), 분기 명령 B (branch) 등이 있습니다. 참고로 C 언어와 같이 위의 명령어들을 기술하면 아래와 같이 나타낼 수 있습니다.
if (전기포트 내부 온도 >= 90℃){
히터 정지 ();
}
CPU는 이러한 명령을 실행해 나갑니다.
CPU에 의한 명령의 실행
CPU의 동작에 대해 더 자세하게 알아보겠습니다.
CPU의 내부는 프로그램 카운터, 명령 디코더, 연산 회로로 구성됩니다.
프로그램 카운터는 다음에 실행할 명령의 위치 (어드레스)를 보존하는 부분입니다.
명령 디코더는 명령을 CPU가 처리할 수 있는 신호로 변환하는 부분입니다.
연산 회로는 명령을 처리하는 부분입니다.
하기 그림의 예를 설명하면,
①프로그램 카운터에 의해 비교 명령 CMP가 격납된 어드레스가 지정됩니다.
②프로그램 카운터에서 지정된 명령을 판독하여 디코더에 입력합니다.
③판독한 명령을 디코더에서 CPU가 처리할 수 있는 신호로 변환하여, 연산 회로에 입력합니다.
여기에서 프로그램 카운터는 자동적으로 카운트되어 다음 위치 (어드레스)가 지정됩니다.
단순한 분기 명령 B를 사용하는 경우에는 프로그램 카운터에 분기 어드레스가 지정됩니다.
④연산 회로에서 명령에 따라 처리합니다. 연산 회로에서는 각 명령에 따라 가산, 감산을 실행합니다. 예를 들어 비교 명령 CMP는 감산하여 어느쪽이 큰지 확인합니다.
⑤비교 결과를 사용하는 특수한 조건 분기 명령의 사용하는 경우, 처리 후 프로그램 카운터에 분기 어드레스가 지정되는 경우가 있습니다.
여기에서, ②는 인출 (Fetch), ③은 해독 (Decode), ④는 실행 (Execute)으로 표현됩니다.
이와 같이 CPU에 대한 명령의 조합을 준비함으로써, CPU가 순서대로 하나씩 명령을 처리하여 동작을 구현합니다.
CPU가 명령을 실행하는 시간
CPU의 능력을 나타내는 파라미터 중 하나로 명령을 처리하는데 소요되는 시간이 있습니다. 그럼, CPU가 비교 명령 CMP를 실행하기 위한 시간에 대해 알아보겠습니다.
마이컴에 따라 다르지만, 느린 경우라도 100μsec 정도의 속도로 명령을 실행합니다. 고속 마이컴의 경우 수십nsec로 실행할 수 있는 제품도 있습니다. 이렇게 명령을 실행하는 속도를 결정하는 것이 클록 (Clock)입니다.
클록이란 명령을 실행하는 시간을 결정하는 신호로, 단위는 주파수 [Hz]로 나타냅니다.
클록이 빠르면 명령을 빨리 실행할 수 있습니다. CPU는 이러한 클록에 따라 명령을 순서대로 실행해 나갑니다.
ROM이란?
ROM (Read Only Memory)은 읽기만 가능한 메모리입니다. 기본적으로는 내용을 재기록할 수 없는 메모리입니다.
전기포트를 예로 들어 설명하면, 아래와 같은 프로그램이 격납된 위치입니다.
『버튼이 입력되면, 히터를 가열하여 물을 끓인다.』
『전기포트 내부 온도계의 온도가 90℃에 도달하면 히터를 정지시킨다.』
따라서, 프로그램 메모리라고도 합니다.
ROM의 내용은 전원 기동 시부터 읽혀지고, 전원을 재기동하는 경우에도 유지됩니다.
따라서, 전자기기의 전원을 재기동하더라도 전기포트 등의 전자기기는 매번 동일한 동작을 하는 것입니다.
참고로, 현재 ROM의 주류는 ROM의 내용을 지우고 다시 기록할 수 있는 플래시 메모리입니다. 이에 따라 마이컴의 자유도가 향상되어 전자기기의 개발 기간 단축 및 비용 절감이 가능해졌습니다.
CPU와 명령과 ROM의 관계
CPU는 최소 처리 단위인 명령을 하나씩 처리합니다. 명령에는 전송 명령 MOV, 기억 명령 ST, 비교 명령 CMP 등이 있습니다.
ROM에는 이러한 명령이 하나씩 격납됩니다.
그럼, 앞서 설명한 전기포트의 경우를 다시 한번 생각해 보겠습니다.
『전기포트 내부의 온도가 90℃에 도달하면 히터를 정지』시키는 처리를 크게 분류하면, 아래의 3가지 동작으로 분류할 수 있습니다
1. 수초 간격으로 전기포트 내부의 온도 센서 출력을 수신
2. 취득한 전기포트 내부의 온도와 임계치 90℃를 비교
3. 온도가 임계치 90℃ 이상인 경우 히터를 정지
여기에서 『2』 및 『3』의 처리를 어셈블리 언어로 기재하면 하기와 같이 표현할 수 있습니다.
・CMP 전기포트 내부 온도 90℃ (전기포트 내부 온도와 90℃를 비교)
・BGE 히터 정지 (전기포트 내부 온도 ≧ 90℃인 경우 히터 정지로 분기)
ROM에는 이러한 명령이 보존되고, CPU는 이러한 명령을 순서대로 하나씩 처리해 나갑니다.
RAM이란?
RAM (Random Access Memory)은 읽기와 쓰기가 가능한 메모리로, 데이터가 일시적으로 격납되므로 데이터 메모리라고도 합니다.
전기포트의 경우 가열 온도의 설정이나 전기포트 내부의 온도 센서 측정 결과, 히터 등의 현재 상태가 보존됩니다.
실제로 앞서 설명한 전송 명령 MOV, 기억 명령 ST와 같은 단순한 처리만 실행할 경우, RAM은 필요하지 않습니다. 그러나, 마이컴을 사용하여 실제의 전자기기를 개발하는 경우 복잡한 처리가 필요하기 때문에 RAM은 반드시 필요합니다.
RAM의 처리
전기포트에서 RAM의 처리에 대해 설명하겠습니다.
예를 들어 온도 설정이 가능한 전기포트의 기능이 아래와 같다고 가정하겠습니다.
①가열 기능
・가열 정지 상태에서 가열 버튼이 입력되면 가열을 시작한다.
・전기포트 내부 온도가 설정 온도 (목표 온도)에 도달하면 가열을 정지한다.
・가열 중에 가열 버튼이 입력되면 가열을 정지한다.
②온도 설정 기능
・100℃, 90℃, 75℃의 3단계로 온도를 설정할 수 있다.
・온도 설정 버튼이 입력될 때마다 100℃ ⇒ 90℃ ⇒ 75℃ ⇒ 100℃ ⇒ 90℃로 설정 온도가 전환된다.
이러한 기능을 구현하기 위해서도 RAM이 필요합니다.
●가열 기능
가열 기능은 가열 정지 상태에서 가열 버튼이 입력되면 가열을 시작하기 때문에, 가열 중인 상태나 가열 정지 상태를 알 수 있어야 합니다. 따라서, 가열 ON / OFF 상태를 데이터로 보존할 필요가 있습니다.
본 예에서는 가열 ON / OFF 상태를 RAM에 보존하고, 데이터명을 HeaterStatus라고 가정하겠습니다.
CPU는 가열 버튼이 입력되면 RAM에서 HeaterStatus를 읽어, 현재의 상태를 파악하고, HeaterStatus를 다시 기록하는 동작을 합니다.
여기에서 HeaterStatus가 OFF인 경우, 가열 버튼이 입력되면 히터에 전류를 흘려 HeaterStatus를 ON으로 전환합니다. 반대로 HeaterStatus가 ON인 경우, 가열 버튼이 입력되면 히터의 전류를 멈추어 HeaterStatus를 OFF로 전환합니다.
만약, RAM과 같이 변경 가능한 영역이 없다면 현재의 상태를 보존할 수 없습니다.
●온도 설정
온도 설정에 있어서도, 설정 온도가 3종류이므로 어떤 온도로 설정했는지를 기억할 수 있어야 합니다. 또한, 온도 설정 버튼을 한번 입력할 때마다 설정 온도가 전환되고, 버튼이 세번 입력되면 다시 원래 상태로 돌아가야 합니다. 따라서, 버튼을 입력한 횟수와 그 횟수에 해당하는 온도를 목표 온도 데이터로서 RAM에 보존해두면 온도 설정 기능을 구현할 수 있습니다.
이와 같이 데이터를 지우고 다시 기록할 수 있는 RAM이 있으면, 한층 더 복잡한 처리가 가능해집니다.
주변회로란?
주변회로 (Peripheral)는 마이컴 안에 탑재된 마이컴의 기능을 풍부하게 하는 회로군입니다. 전기포트의 동작을 예로 들어 구체적으로 알아보겠습니다.
『전기포트 내부 온도가 90℃에 도달하면 히터를 정지』시키는 전기포트의 처리는 아래의 3가지 동작으로 분류할 수 있습니다
1. 수초 간격으로 전기포트 내부의 온도 센서 출력을 수신
2. 취득한 전기포트 내부의 온도와 임계치 90℃를 비교
3. 온도가 임계치 90℃ 이상인 경우 히터를 정지
예를 들어 『1』의 『수초 간격으로 전기포트 내부의 온도 센서 출력을 수신』하는 처리에 있어서 수초의 측정을 위해서는 타이머라는 시간을 계측하는 주변회로가 필요합니다.
또한, 온도 센서 출력을 수신하기 위해서는 A/D 컨버터 (아날로그 - 디지털 변환기)가 필요합니다. 따라서, 타이머나 A/D 컨버터와 같은 주변회로가 실장된 마이컴의 경우, 『1』의 동작을 구현할 수 있습니다. 이와 같이 마이컴 내부에 주변회로를 탑재함으로써 CPU나 ROM, RAM만으로는 구현할 수 없는 기능을 풍부하게 구현할 수 있습니다.