티스토리 뷰

CPU에 대해서 알아보기

CPU는 프로그램 메모리에 들어 있는 명령어를 순서대로 하나씩 호출해서 실행시킴으로써 데이터를 처리하고, 다른 장치들을 제어하는 역할을 합니다. 일반적으로 CPU는 레지스터부, 연산부, 그리고 제어부로 구성됩니다. 레지스터부를 설명드라자면, 레지스터는 데이터를 일시 보존하는 일과 데이터를 다른 곳으로 옮기는 일을 합니다. 하드웨어면에서 볼 때 레지스터는 플립플롭회로로 이루어져 있습니다. 하나의 플립플롭회로는 하나의 비트를 기억하는 회로이고, 이것이 8개 또는 16개 모여서 레지스터를 이룹니다. 일반적으로 Z80과 같은 폰노이만 방식의 마이크로컨트롤러에 있어서는 레지스터와 데 이터 메모리가 구분되어 있어서 자주 사용하는 것은 CPU 소속의 레지스터에, 그 밖의 것은 데이터 메모리(RAM)에 저장합니다. 그러나, 하바드 구조의 마이크로컨트롤러에서는 레지스터와 데이터 메모리를 구분함이 없이 레지스터 파일(register file)이라고 하는 통합된 공간에 레지스터와 데이터 메모리를 같이 배치해두고 "register to register"의 방식으로 일괄 통합 관리합니다. 이런 의미에서 하바드 구조의 마이크로프로세서에서 레지스터는 더 이상 CPU에 속하지 않고 데이터 메모리에 속한다고 해야 할 것입니다. 그래서 레지스터에 대해서는 데이터 메모리에서 다루고자 합니다. 연산부 ATmega128의 연산부는 ALU(arithmetic logical unit)를 중심으로 32개의 범용 레지스터와 2개의 T레지스터로 구성됩니다. T레지스터(temporary register)는 사용자가 직접 접근할 수 없는 일종의 버퍼입니다. 연산부에서 하는 일은 다음과 같습니다. 가산, 감산, 승산 등의 산술연산 AND, OR, EXOR, 로테이트, 시프트 등의 논리연산, 비트 연산입니다. ATmega128 CPU의 제어부는 프로그램 메모리에 들어 있는 일련의 명령어를 순서대로 하나씩 호출하여, 그 명령어의 뜻을 해독한 후, 그 뜻에 따라 ATmega128 내각 장치들을 동작시킴으로써 데이터를 명령어의 내용대로 처리하는 논리회로로서, 명령레지스터(instruction register), 명령해독기(instruction decoder), 그리고 제어신호기(control signal circuit)로 구성됩니다. 프로그램 메모리에 들어있는 명령어는 프로그램카운터가 지정하는 바에 따라 하나씩 명령레지스터에 호출되어 명령해독기에서 해독된 후, 제어신호기를 거침으로써 그 명령어를 실행시키는데 필요한 각종 제어신호로 바꿔집니다. 이 제어신호의 일부는 CPU 및 칩내의 여러 회로를 제어하고, 다른 일부는 외부 제어신호로서 밖으로 나가며, 나머지 일부는 명령해독기로 되돌아가서 다음 차례의 제어신호를 만듭니다. 이 관계를 좀 더 자세히 설명하고자 합니다. 마이크로컨트롤러의 기본 구조로서, Rd 레지스터의 내용에 Rr 레지스터의 내용을 가산하라는 ADD Rd, Rr라는 명령을 수행할 경우의 관계를 나타내고 있습니다. 프로그램 메모리 M에는 명령어들이 순서에 따라 연속적으로 들어 있습니다. 그리고 최초의 명령어가 들어 있는 주소만은 ORG 명령에 의해서 프로그램카운터 PC에 넣어져 있습니다. 프로그램을 실행시키면 한편으로는 다음과 같은 마이크로 동작(micro-operation)에 의해서 프로그램카운터가 지시하는 번지에 기억되어 있는 명령어가 명령레지스터 IR에 호출되고, 다른 한편으로는 프로그램카운터의 내용이 하나 증가하여 다음 차례의 명령어를 지시합니다. 명령어가 실행되는 나머지 사이클을 실행사이클(excute cycle)이라고 합니다. 이제 호출사이클에 의해서 명령레지스터에 들어온 ADD Rd, Rr라는 명령어가 실행될 때의 실행사이클을 보기로 합시다. 명령레지스터 IR에 들어온 ADD Rd, Rr라는 명령어는 한편으로는 해독기 및 제어신호기에서 이 명령어를 실행시키는 데 필요한 각종 신호를 만들고 한편으로는 다음과 같은 마이크로 동작으로 Rd의 내용을 T1에, Rr의 내용을 T2레지스터에 옮긴 후 Rd T1 + T2 의 연산을 합니다.

'정보통신 및 로봇제어시스템' 카테고리의 다른 글

프로그램 작성 순서  (0) 2021.06.27
프로그래밍 언어  (0) 2021.06.25
ATmega128의 내부 구성  (0) 2021.06.21
하바드 구조에 대해서  (0) 2021.06.16
ATmega128의 특징  (0) 2021.06.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함