1 마이크로프로세서의 원리 마이크로컨트롤러 AVR ATmega128
학습목표 마이크로프로세서와 마이크로컨트롤러의 차이를 알 수 있다. 마이크로프로세서에서 프로그램이 수행되기 위한 명령어 형식과 명령어 실행 절차를 알 수 있다. 프로그램을 수행하려면 어떤 종류의 명령어가 필요한지 알 수 있다. 현대 컴퓨터의 기본 모델인 저장형 프로그램 컴퓨터의 한계점과 그 한계를 완화하려는 방법을 알 수 있다. CISC와 상대되는 RISC의 발전 계기와 RISC형 마이크로프로세서의 특징을 알 수 있다.
목 차 1. 마이크로프로세서, 마이크로컨트롤러, 마이크로컴퓨터 2. 고급 언어와 저급 언어 3. 프로그램 실행 원리 4. 명령어 셋 5. 저장형 프로그램 컴퓨터 6. RISC와 CISC 3
Section 01 마이크로프로세서, 마이크로컨트롤러, 마이크로컴퓨터 마이크로(micro)와 프로세서(processor)가 결합된 용어 ‘매우 작은’(micro)이라는 의미와 ‘처리기’(processor) 크기가 매우 작고, 뛰어난 계산 능력을 가진 장치 IC 집적기술, 컴퓨터 구조기술, 시스템 프로그래밍 기술을 함께 묶어 단일 칩으로 집적화한 반도체 소자 재료, 수학적 개념, 전자 집약기술, 사회적 요구를 수렴한 다양한 마이크로프로세서가 사용되고 있으며, 앞으로도 꾸준한 연구를 통해 더욱 향상된 마이크로프로세서가 등장 프로그램을 신속하게 실행하기 위한 목적으로, 내부 구조를 최적화
Section 01 마이크로프로세서, 마이크로컨트롤러, 마이크로컴퓨터 마이크로(micro)와 컨트롤러(controller)가 결합된 용어 ‘매우 작은’(micro)이라는 의미와 ‘제어기’(controller)라는 의미 마이크로프로세서의 연산 처리 기능에 제어 기능 추가 프로그램을 실행하면서 장치를 효과적으로 제어하기 위한 목적으로, 내부 구조를 최적화 값싼 장난감에서부터 산업용 장치에 이르기까지 넓은 범주를 대상 포함 기능 사례 외부 디지털 전압에 대한 입출력 기능 메모리 기능(플래시 메모리, SRAM, EEPROM 등) 타이머 기능, PWM(Pulse Width Modulation) 펄스 생성 기능 입력신호 캡처 기능, A/D(Analog Digital) 변환 기능 통신 기능 등
Section 01 마이크로프로세서, 마이크로컨트롤러, 마이크로컴퓨터 마이크로(micro)’와 ‘컴퓨터(computer)’가 결합된 용어 ‘매우 작은(micro)’ 컴퓨터 시스템 마이크로컴퓨터는 상대적으로 대형 슈퍼컴퓨터와 대비 (사례) 데스크톱 컴퓨터, 휴대용 노트북, 간단한 제어용 컴퓨터, PMP, 스마트폰 등
Section 02 고급 언어와 저급 언어 번역기의 필요성 컴퓨터에 내장된 마이크로프로세서는 2진(0 또는 1)값을 갖는 명령어가 차례대로 실행되면서 작업을 처리 프로그램 작업을 처리하기 위해 명령어를 차례로 배열한 것 원시프로그램 : 사람이 작성한 프로그램(고급 언어로 보통 작성) 번역기(Translator) 원시프로그램을 저급 언어(Low level language)인 2진 명령어로 변환 컴퓨터가 인식할 수 있는 기계어(Machine language)의 실행프로그램(Executable Program)으로 변환 기계어 : 마이크로프로세서 내부의 실행 동작을 명령어 단위로 표현 명령어를 이해하면 마이크로프로세서 내부 구조를 쉽게 이해
Section 02 고급 언어와 저급 언어 기계어와 어셈블리어 기계어(Machine Language) 특정 비트에, 특정 의미가 있는 2진값을 설정하는 명령어를 나열 어셈블리어(Assembly Language) 기계어를 사람이 연상하기 쉬운 니모닉(Mnemonic)과 연산 대상이라는 영문 단어로 바꿔 표현 어셈블러(Assembler) 어셈블리어로 작성된 원시프로그램을 기계어로 변환시키는 번역기
Section 02 고급 언어와 저급 언어 원시프로그램에서 실행 파일 생성 컴파일(Compile), 컴파일러 고급언어로 작성된 원시프로그램을 기계어 목적 파일로 번역하는 과정 컴파일러 : 컴파일을 수행하는 번역기 어셈블(Assemble), 어셈블러 어셈블리어로 작성된 원시프로그램을 기계어 목적 파일로 번역하는 과정 어셈블러 : 어셈블을 수행하는 번역기 링크(Link), 링커 여러 개의 목적 파일을 연결하여 통합된 실행 파일로 만드는 과정 링커 : 링크를 전담하는 프로그램 라이브러리 공통으로 자주 사용하는 기능은 표준화된 이름과 매개 변수가 있는 함수로 작성한 후, 컴파일하여 목적 파일을 생성 컴파일된 목적 파일을 모아놓은 파일을 ‘라이브러리 파일’이라 함 (예시) sin, cos, tan, printf 등과 같이 자주 사용하는 함수
Section 02 고급 언어와 저급 언어 실행 파일이 생성되는 과정 로딩 원시프로그램 목적 파일 로딩 실행 파일이 중앙 처리 장치(CPU, Central Processing Unit)에서 실행되려면, 주 메모리에 탑재되는 과정 필요 로더 : 로딩을 전담하는 프로그램
Section 03 프로그램 실행 원리 특수 레지스터, 범용 레지스터, CPU 외부의 메모리 사이에 ALU(Arithmetic Logic Unit)를 통한 연산을 통해 명령어 실행
Section 03 프로그램 실행 원리 특수 레지스터와 범용 레지스터 범용 레지스터 CPU 연산을 빠르게 처리하기 위해 ALU와 직접 연결 연산 대상이 되는 오퍼랜드 값을 가짐 특수 레지스터 명령어를 실행할 때 필요한 범용 데이터가 아닌 특수한 데이터를 처리하기 위한 레지스터 프로그램 카운터, 명령어 레지스터, 상태 레지스터, 메모리 주소 레지스터, 메모리 버퍼 레지스터 등 프로그램 카운터(PC, Program Counter) 인출할 명령어가 있는 메모리의 주소를 갖는 특수 레지스터 프로그램 메모리에서 한 개의 명령어 인출이 끝나면, 그 명령어의 크기가 더해진 값으로 자동 변경되어 다음 명령어 인출을 위한 주소를 가짐
Section 03 프로그램 실행 원리 명령어 레지스터(IR, Instruction Counter) 프로그램 메모리에서 인출된 명령어를 기억하고 있는 특수 레지스터 인출된 명령어에는 특정 비트에 연산 동작(opcode), 연산 대상(operand), 연산 결과(result) 어드레싱 모드 등의 정보를 설정 상태 레지스터(Status Register) 명령어를 실행한 후의 연산 결과 정보를 기록 기록된 상태 레지스터의 각 비트는 연속되는 다음 명령어 실행에 영향을 미침 (예시) brcs .+6 명령은 cpi 명령 실행 후, 상태 레지스터의 캐리 비트 값이 1이면, 현재의 프로그램 카운터보다 6바이트 후의 분기된 곳을 실행
Section 03 프로그램 실행 원리 명령어 실행 메모리 주소 레지스터(MAR)와 메모리 버퍼 레지스터(MBR) 데이터 인출/기록 과정에서 데이터 또는 주소를 임시로 저장하기 위한 특수 레지스터 명령어 실행 ❶ 명령어 인출 단계 프로그램 메모리에 있는 명령어를 인출(Fetch)하여, 명령어 레지스터(IR)에 넣는 단계 명령어는 연산 동작(opcode), 연산 대상(operand), 연산 결과(result)를 지칭하는 비트 정보로 구성 ❷ 명령어 분석 단계 명령어 레지스터(IR) 정보를 디코딩하여 레지스터 파일, 버스 라인 등에 필요한 신호를 생성
Section 03 프로그램 실행 원리 ❸ 오퍼랜드 인출 단계 디코딩 결과에 따라 연산에 사용될 오퍼랜드(operand) 위치가 결정 오퍼랜드가 메모리에 있는 경우, 메모리로부터 인출하여 CPU 내부의 레지스터로 옮기는 단계 메모리로부터 CPU 내부로 옮기기 위해서는 부가의 클록이 요구되고 명령어 실행 시간이 길어짐 오퍼랜드가 명령어에 포함되어 있거나 레지스터에 있는 경우, 이 단계는 생략 ❹ 연산 실행 및 결과 생성 단계 명령어 레지스터의 연산 동작(opcode)에 따라 오퍼랜드 값 등을 사용하여 산술 또는 논리연산 조합 논리 회로로 구성된 ALU에서 오퍼랜드를 사용하여 연산 결과는 어큐뮤레이터(Accumulator) 또는 범용 레지스터로 기록 ❺ 결과 기록 단계 명령어를 디코딩한 결과 연산된 결과를 저장하는 위치가 메모리이면, 이 단계가 수행
Section 03 프로그램 실행 원리 명령어 인출-실행 사이클 프로그램은 명령어가 메모리에서 인출(Fetch)되어 실행(Execution)되는 사이클이 반복되면서 수행 RISC 구조로 실행 단계를 단축할 수 있음 오퍼랜드 인출 단계를, 별도의 명령어 load 결과 기록 단계를, 별도의 명령어 store 단순해지는 인출-실행 사이클
Section 04 명령어 셋 3주소, 2주소, 1주소, 0주소 마이크로프로세서 명령어에 포함되는 비트 필드(bit field) 형식 명령코드 : 명령어로 실행되어야 할 연산 동작을 표시 오퍼랜드 : 연산에 필요한 데이터 표시 연산 결과 : 명령코드, 오퍼랜드로 얻은 연산 결과 값을 저장할 위치 표시 명령어에 포함되는 주소방식에 따라 CPU 내부 구조가 달라짐 3주소 마이크로프로세서 명령어 명령어에 3개의 오퍼랜드 주소가 포함 (예) ADD a, b, c
Section 04 명령어 셋 2주소 마이크로프로세서 명령어 명령어에 2개의 오퍼랜드 주소가 포함 (예) ADD a, b 1주소 마이크로프로세서 명령어 특수 레지스터 어큐뮤레이터(AC, Accumulator)를 묵시적으로 이용하여 연산 수행 (예) ADD a 0주소 마이크로프로세서 명령어 오퍼랜드용 주소를 따로 두지 않음 스택(stack)에 있는 연산 대상의 데이터를 사용 (예) ADD
Section 04 명령어 셋 어드레싱 모드 연산을 위한 오퍼랜드를 지칭하는 방법 즉시 주소방식 명령어에 연산 대상이 되는 데이터 값을 갖고 있음 직접 주소방식 명령어에 포함된 주소는 주 메모리의 연산 대상 데이터에 대한 주소 간접 주소방식 명령어에 기록된 주소는 오퍼랜드를 인출할 수 있는 주소
Section 04 명령어 셋 레지스터 직접 주소방식 명령어에 포함된 주소는 레지스터 파일 중 하나를 지칭하는 주소 레지스터 간접 주소방식 명령어에 포함된 주소는 레지스터 파일의 레지스터 지칭 레지스터 값은 주 메모리의 주소, 연산 대상 오퍼랜드는 이 주소로부터 인출
Section 04 명령어 셋 변위 주소방식 명령어에 두 개의 주소 필드 포함 하나는 베이스(또는 인덱스) 레지스터, 다른 하나는 변위(displacement) 배열 또는 메모리의 특정 위치를 베이스(또는 인덱스) 레지스터를 기준으로, 변위 차를 갖는 메모리의 오퍼랜드 주소로 계산 상대 주소방식 변위 주소방식과 유사하지만, 베이스 레지스터로 프로그램 카운터 사용
Section 04 명령어 셋 명령코드 동작 명령코드 필드의 주요 동작은 연산, 데이터 이동, 프로그램 흐름제어 연산 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 산술연산 OR, AND, XOR, 좌로 비트천이, 우로 비트천이, 보수 변환 등의 논리연산 데이터 이동 레지스터-레지스터, 레지스터-메모리, 메모리-메모리 데이터 이동 명령 프로그램 흐름제어 프로그램의 흐름을 바꾸는 분기 명령으로, 프로그램 카운터(PC) 값이 변경되면, 명령어 인출 위치가 바뀌고 프로그램 흐름이 달라짐
Section 05 저장형 프로그램 컴퓨터 저장형 프로그램 컴퓨터 폰 노이만 아키텍처(von Neumann architecture)로 설계된 컴퓨터 모델을 ‘저장형 프로그램(Stored Program) 컴퓨터’라 함 메모리에 명령어와 데이터를 저장하고 읽기와 쓰기 동작을 반복하면서 원하는 연산을 수행 제어 신호는 명령어 인출-실행 사이클(Fetch-execution cycle) 과정에 필요한 데이터 흐름과 연산 제어
Section 05 저장형 프로그램 컴퓨터 저장형 프로그램 컴퓨터의 한계 반도체와 컴퓨터 기술 발전 메모리 용량 증가 CPU 속도도 향상 CPU와 메모리 사이의 병목 현상(Bottle-neck) CPU 구조 기술이 발달할수록, 처리되는 데이터가 많아질수록, 메모리와 CPU 사이에 더 많은 데이터 왕래가 필요함 단일 CPU의 저장형 프로그램 컴퓨터는 정해진 연결선만을 통해, 명령어와 데이터를 메모리로부터 전송 CPU와 메모리 사이의 한정된 데이터 전송 속도 CPU 연산 능력이 향상되어도, 병목 현상으로 향상된 연산 능력에 대한 제약 한계를 연장하기 위해 메모리 계층을 이용하거나 병렬 처리 컴퓨팅
Section 05 저장형 프로그램 컴퓨터 메모리 계층의 주요한 2가지 기능 메모리의 병목 현상과 메모리 속도, 속도 대비 가격을 고려하여 메모리를 계층적으로 배치 지역성 원리(Principle of locality)에 따라 곧 처리될 프로그램과 데이터 일부를 CPU 근처의 속도가 빠른 메모리에 놓고 처리 지역성(locality)에 의해 참조되는 데이터 영역은 특정 부위에 확률적으로 집중 자주 참조되는 데이터를 빠른 캐시에 놓고 사용 [ 메모리 계층(Memory Hierarchy) ]
Section 05 저장형 프로그램 컴퓨터 가상 메모리 (Virtual Memory) 실행될 프로그램 또는 데이터는 디스크 메모리에 두었다가 실행이 시작되면 주 메모리(Main memory)로 이동 모든 프로그램과 데이터를 이동시키지 않고, 사용되는 일부만을 이동하여 사용 프로그램 또는 데이터가 더 요구되는 상황이 발생하면 추가로 이동하여 사용 가상 메모리로 확장된 메모리 공간은 운영체제(Operation System)가 관리
Section 05 저장형 프로그램 컴퓨터 논리 주소를 물리 주소로(하드웨어적으로) 빠르게 변환하여 사용 CPU는 논리 주소로 프로그램 또는 데이터에 접근 MMU에서는 논리 주소를 주 메모리에 적재된 물리 주소로 TLB(Translation Lookaside Block)라는 테이블을 이용하여 빠르게 변환 TLB에서 요구하는 데이터가 주 메모리에 적재되어 있지 않으면, 페이지 펄트(Page Fault)가 발생하고, 디스크 메모리에서 주 메모리로 옮겨짐(운영체제의 페이지 단위) [ MMU를 이용한 메모리 계층 ]
Section 06 RISC와 CISC RISC RISC(Reduced Instruction Set Computer)는 기존의 컴퓨터 구조를 CISC(Complex Instruction Set Computer)로 규정하고, 이와 상대되는 개념 명령어 셋을 줄임으로써 CPU 하드웨어 구조를 CISC와 비교하여 간단히 만들 수 있다는 취지에서 시작 파이프라인 기법(Pipelining)을 이용하여, 한 사이클에 한 명령어 실행 최상의 경우 평균 한 사이클마다 한 개의 명령어가 실행 i+2 클록 스냅샷 : 명령어 i+2는 명령어 인출 단계를, 명령어 i+1은 명령 판독 단계를, 명령어 i는 연산 단계를,명령어 i-1은 결과 저장 단계를 수행
Section 06 RISC와 CISC 고정된 짧은 길이의 명령어 CPU 시스템 버스 크기와 같게 명령어의 크기를 고정해서 단일 클록에 명령어를 명령어 레지스터로 인출 단순한 어드레싱 모드 사용 복잡한 어드레싱 모드의 사용은 일관적인 명령어 길이를 보장할 수 없음 단순한 어드레싱 모드의 사용으로 오퍼랜드 인출 절차를 통일 load와 store 메모리 참조 명령에 단순한 어드레싱 모드를 사용하면, CPU 내부 하드웨어 복잡도를 줄이고, 명령어의 길이를 동일하게 유지할 수 있음 간단한 연산 동작의 적은 명령어 셋 명령어에서 간단한 산술과 논리 연산 동작을 사용하여, 연산 단계에서 짧은 시간에 수행 구현되는 명령어 개수가 적으면, 각 명령어의 기능을 만족하기 위한 하드웨어 복잡도를 줄일 수 있음
Section 06 RISC와 CISC 데이터 종속 보장을 위한 nop 명령 삽입 기능 파이프라인 구조에서 load 명령의 결과 저장 단계가 끝나야 r1에 주소 100의 오퍼랜드 값이 이동 연속된 add 명령어의 연산 단계에서는 직전 명령의 결과가 데이터로 갱신되지 않았기 때문에 연산을 계속할 수 없음 컴파일러는 문제 해결을 위해 nop 명령을 삽입하여, r1에 값이 갱신될 때까지 시간 지연
Section 06 RISC와 CISC 선인출(Pre-fetch)과 예측 실행 branch 명령은 파이프라인의 최종 단계까지 실행되어야만, 다음 명령어의 위치를 확인할 수 있음 다음에 실행될 명령어 위치가 늦게 결정되어도, 연속된 명령어가 결정될 것으로 예측하여 선인출하여 실행 연속된 명령어로 분기 위치가 결정되면, 수행된 파이프라인 단계만큼 시간을 절약한 효과가 있음 RISC형 마이크로프로세서에 적합한 컴파일러 RISC형 마이크로프로세서는 짧은 명령어 길이, 파이프라인 구조, 간단한 어드레싱 모드, 데이터 종속 보장을 위한 nop 명령어 삽입 등의 특징을 고려한 컴파일러 설계가 필요함
Section 06 RISC와 CISC CISC CISC는 RISC와 상대되는 단어로, RISC 개념이 만들어지면서 CISC 용어가 생성 가변 길이의 명령어 형식 명령어의 길이가 김 다양한 어드레싱 모드를 사용 복잡한 연산 동작을 수행할 수 있는 다양한 명령어로 구성 현대에는 마이크로프로세서가 고성능화되면서, RISC와 CISC의 구별이 점점 모호해지고 있음
IT CookBook, 마이크로컨트롤러 AVR ATmega128 Thank You IT CookBook, 마이크로컨트롤러 AVR ATmega128