본문 바로가기

Contact English

【논리설계】 11강. CPU

 

11강. CPU(central processing unit)

 

추천글 : 【논리설계】 논리설계 목차


1. 중앙처리장치 [본문]

2. 주요 레지스터의 종류 및 기능 [본문]

3. 메이저 스테이트의 정의 [본문]

4. 인출 단계 [본문]

5. 간접 단계 [본문]

6. 실행 단계 [본문]

7. 인터럽트 단계 [본문]


 

1. 중앙처리장치(CPU, central processing unit) [목차]

⑴ 제어장치(CU, Control Unit)

① 주기억장치에서 읽어들인 명령어를 해독하여 해당 장치에게 제어 신소를 보내 동작을 지시하는 장치

② PC, IR, 제어신호 발생기(부호기), 명령어 해독기, 번지 해독기 등으로 구성  

⑵ CPU(central processing unit)

① 정의 : 프로그램 명령어를 실행하는 일을 담당

② 제어장치, 연산장치, 레지스터, 버스로 구성됨

구성 1. 연산장치(ALU, Arithmetic & Logical Unit)

○ 제어장치의 명령에 따라 산술연산, 논리연산, 관계연산, 이동연산 등을 수행하는 장치

○ 가산기, 누산기(AC), 보수기, 데이터 레지스터, 오버플로 검출기, 시프트 레지스터 등으로 구성

○ 이진 연산의 결과는 누산기에 저장됨

구성 2. 레지스터(register)

구성 3. 버스(bus)

⑶ MPU(microprocessing unit) : 마이크로프로세서(microprocessor)라고도 함

① 정의 : CPU를 단일 IC 칩에 집적한 반도체 소자. RAM은 포함돼 있지 않음

② 예시 : Intel과 Zilog에서 만든 게 대표적

○ 4-bit : 4004. 1971년 인텔에서 최초로 개발됨. 주로 초기 계산기에 활용됨

○ 8-bit : 8008, (8008→)8080  

○ 8-bit 성능향상 : (8080→)8085, (8080→)Z80  

○ 16-bit : (8085→)8086, (8086→)8088, (Z80→)Z8000

○ 16-bit 성능향상 : (8088→)80188, (8086→)80186, (80186→)80286

○ 32-bit : (80286→)80386, (80386→)80486, (80486→)80586, (Z8000→)Z80000

⑷ MCU(microcontroller unit) : 마이크로컨트롤러(microcontroller) 또는 단일칩 마이크로컴퓨터(single chip microcomputer)로 불림

① 정의 : CPU의 기능과 일정한 용량의 RAM 또는 ROM, 입출력 제어 회로 등을 단일의 칩에 내장한 것

② 예시

○ Atmel AVR (8-bit MCU) : 128 KB flash memory, 4 KB RAM, 4KB EEPROM, 16MHz CPU clock

○ Zilog Z8 family

○ Arduino

 

 

2. 주요 레지스터의 종류 및 기능 [목차]

⑴ PC(Program Counter) : 주기억장치 상에 있는, 다음 번에 실행할 명령어의 번지 저장

⑵ IR(Instruction Register) : 현재 실행 중인 명령의 내용 저장

⑶ AC(Accumulator) : 연산된 결과를 일시적으로 저장, 연산의 중심

⑷ Status(Flag) Register : 오버플로(Full)·언더플로(Empty), 자리올림·계산상태, 인터럽트 저장

⑸ MAR(Memory Address Register) : 주/보조 기억장치를입하는 데이터의 번지를 기억

⑹ MBR(Memory Buffer Register) : 주/보조 기억장치를 출입하는 데이터를 잠시 기억

⑺ Base Register : 명령이 시작되는 번지를 기억

⑻ Index Register : 주소의 변경, 서브루틴 연결 및 반복 연산 횟수 카운팅, 프로그래머가 내용 변경 가능

⑼ Data Register : 연산에 사용될 데이터를 저장

⑽ Shift Register : 저장된 값을 왼쪽 또는 오른쪽으로 1 bit씩 자리 이동시킴

⑾ Major State Register : CPU의 Major State를 저장

 

 

3. 메이저 스테이트의 정의 [목차]

⑴ 현재 CPU가 무엇을 하고 있는가를 나타내는 상태

⑵ 인출(Fetch), 간접(Indirect), 실행(Execute), 인터럽트(Interrupt) 등 4가지 상태가 존재

⑶ 사이클 제어 : F(front) 레지스터와 R(rear) 레지스터가 결정

① Fetch : (F, R) = (0, 0), C0로 표시

② Indirect : (F, R) = (0, 1), C1으로 표시

③ Execute : (F, R) = (1, 0), C2로 표시

④ Interrupt : (F, R) = (1, 1), C3로 표시

 

 

4. 인출(Fetch) 단계 [목차]

⑴ 3 cycle Instruction 동작 순서

 

C0t0 : MAR <- PC // 명령어의 주소를 저장한 PC의 값을 MAR에 전송
C0t1 : MBR <- Mem[MAR] // 주기억장치에서 MAR이 지정하는 위치의 값을 MBR에 전송
       PC <- PC + 1 // 다음에 실행할 명령의 위치를 지정
                    // 제어 메모리의 번지 결정 (1) : 제어 주소 레지스터(CAR)
C0t2 : IR <- MBR[op] // 명령어를 해독해 명령어의 op-code를 IR에 전송
       I <- MBR[I] // I는 간접주소와 직접주소를 구분하는 mode bit
C0t3 : F <- 1 or R <- 1 // I가 0이면 Execute, 1이면 Indirect

 

⑵ 1 cycle Instruction 동작 순서(예 : JUMP)

① 반복문은 JUMP와 Index Register를 연동하는 부 프로그램

 

/* 제어 메모리의 번지 결정 (2) : IR 지정 무조건 분기 */
C0t0 : MAR <- PC 
C0t1 : MBR <- Mem[MAR]
C0t1 : PC <- PC + 1 
C0t1 : PC <- PC + 1 
C0t2 : IR <- MBR[op]
C0t2 : I <- MBR[I] 
C0t3 : PC <- MBR[AD] // 다시 Fetch 단계로 이동

 

 

5. 간접(Indirect) 단계 [목차]

 

C1t0 : MAR <- MBR[AD] // 명령어에 저장된 진짜 주소를 MAR에 전송
C1t1 : MBR <- Mem[MAR] // 주기억장치에서 MAR이 지정하는 위치의 값을 MBR에 전송
C1t2 : NO OPERATION
C1t3 : F <- 1, R <- 0 // Execute 단계로 이동

 

 

6. 실행(Execute) 단계 [목차]

⑴ 주요 명령 : AND, ADD, LDA(Load to AC), STA(Store AC), ISZ, BSA

⑵ Micro Operation(예 : ADD)

 

C2t0 : MAR <- MBR[AD] // 현재 MBR에는 Fetch 단계에서 읽어 온 명령어가 들어 있다.
C2t1 : MBR <- Mem[MAR] 
C2t2 : AC <- AC + MBR // AC는 실질적인 연산이 이루어지는 모듈
C2t3 : F <- 0 또는 R <- 1

 

⑶ Micro Operation(예 : BSA, Branch and Save Return Address)

① 복귀 주소를 저장하고 부 프로그램을 호출(Call)하는 명령

 

/* 제어 메모리의 번지 결정 (3) : 서브 루틴의 호출과 복귀 */
C2t0 : MAR <- MBR[AD]
       MBR[AD] <- PC // 이때 PC의 값은 복귀 주소임
       PC <- MBR[AD] // 부 프로그램이 시작되기 바로 전 주소를 PC에 전송
C2t1 : Mem[MAR] <- MBR[AD] // 복귀 주소를 주기억장치에 저장
C2t2 : PC <- PC + 1 // 부 프로그램의 시작
C2t3 : F <- 0 or R <- 1

 

⑷ Micro Operation(예 : ISZ, Increment and Skip if Zero)

① 부 프로그램으로부터 복귀(Return)하는 명령

 

/* 제어 메모리의 번지 결정 (3) : 서브 루틴의 호출과 복귀 */
C2t0 : MAR <- MBR[AD] // MBR에 있는 명령어의 번지 부분을 MAR에 전송
C2t1 : MBR <- Mem[MAR] // 주기억장치에서 MAR이 지정하는 위치의 값을 MBR에 전송
C2t2 : MBR <- MBR + 1
C2t3 : Mem[MAR] <- MBR 
       IF(MBR=0) THEN PC <- PC + 1 // 음수에서 시작한 그 값이 0이면 현재 명령을 건너 띄어 다음 명령으로 이동

 

 

7. 인터럽트(Interrupt) 단계 [목차]

⑴ '하드웨어로 실현되는 서브루틴(부 프로그램)의 호출'이라고도 함

⑵ 인터럽트의 우선순위 : 정전 > 기계고장 > 외부신호 > 입·출력 > 프로그램 오류 > SVC (Supervisor Call)

 

/* 제어 메모리의 번지 결정 (4) : Status Register과 인터럽트 */
C3t0 : MBR[AD] <- PC // MBR에 복귀 주소 저장
       PC <- 0
C3t1 : MAR <- PC // 0번지를 MAR에 전송하여 0번지 메모리에 접근하도록 함 
       PC <- PC + 1 // 인터럽트 처리 루틴(1번지-) 실행 (일종의 부 프로그램)
C3t2 : Mem[MAR] <- MBR // 다음에 실행할 명령의 주소를 0번지로 저장, 인터럽트 처리 → 0번지로 복귀 → 원 주소로 복귀
       IEN <- 0 // 다른 인터럽트가 발생되지 않게 IEN에 0을 전송
C3t3 : F <- 0, R <- 0 // Fetch 단계로 이동

 

입력: 2017.08.05 09:12