Hi there!

I am a student studying computer science.

컴퓨터 구조

컴퓨터 구조 6장 - Processor

만능성구 2020. 5. 12. 00:54
728x90

컴퓨터의 구성요소

컴퓨터에서 주요 구성요소로는 Processor(CPU), Datapath, Control unit, Memory, 입출력장치 등이 있다.

- Processor : 프로그래머가 High Level 언어로 프로그래밍을 하면 명령어를 분석해서 data 조작과 의사결정을 하는 논리회로이다. 프로세서의 종류는 CPU, Coprocessor, Micro Process들이 있고 컴퓨터의 장치가 해야하는 일을 총 지휘하는 CPU를 프로세서를 대신해서 부르곤 한다.

- CPU : Central Processing Unit으로 중앙처리장치라고 부린다. 컴퓨터의 모든 장치의 동작을 제어하고 명령을 실행하는 장치이다. Datapath, Control Unit으로 구성되어 있다.

- Datapath : 프로세서에 필요한 작업을 수행하는 하드웨어이다. PC(program counter), Registers file, ALU로 구성되어있다. PC의 이동에 따라 연산에 필요한 register들을 ALU로 보내서 ALU가 연산한다.

- Control : Processor의 작업을 위해 명령어를 분석하고 이에 따라 작동할 수 있도록 제어하는 부분이다.

- Memory : Program Code, Data들을 저장한다. Processor에서 MemoryControl 신호와 주소를 전달해서 Control에 따라서 해당주소에서 읽기,쓰기를 한다.

- 입출력장치 : 입력장치는 키보드, 마우스, 마이크 등이 있고 출력장치로는 스피커, 모니터 등이 있다. 입출력을 동시에하는 네트워크 어뎁터 등이 있다.

명령어 실행과정

1. Instruction Fetch(IF) : PC에 의해서 명령어를 가져오고 다음 명령을 준비한다.

2. Instruction Decode(ID) : opcode를 해석해서 명령어를 알아내고 사용하는 registers file에서 값을 읽고 쓸 수 있게 만든다.

3. ALU Execute(AE) : 산술연산, 메모리 주소, Branch명령어일 때 타겟 주소들을 계산한다.

4. Memory Access(MA) : Memory에 접근해서 data를 읽고 쓴다.

5. Register Write(RW) : ALUSW연산에서 처리한 값을 register에 쓴다.

Datapath

각 실행단계에서 진행 되는 전체 Datapath는 아래 그림과 같다.

명령에 따라 통과하는 부분이 달라지는데 그것은 Control 신호와 Control 신호를 받은 멀티플레서(Mux)의 입출력에 따라서 결정된다.

PC : 명령어를 인출할 위치의 주소를 가지고 있고 Mux에의해 선택되 값으로 갱신된다.

좌측 adder : PC4 증가 시킨다.

∙ Jump-Mux : 다음 PC주소가 Jump명령에 의해 변경되는지 선택한다.

∙ Instruction memory : PC의 주소에 해당하는 명령어를 인출한다.

∙ Registers : IF단계에서 받은 opcode,

Control신호, Mux에 따라 해당 opcode bit에서 register값을 읽는고 Data Memory에서 출력된 값을 register에 저장한다.

RegDist-Mux : 입력된 register중 쓰기

 register로 사용할 register를 선택한다.

Sign-extend : 입력받은 16bitdata32bit로 확장시킨다.

좌측 Sift left2 : Jump명령어일 때 주소 dataSift left 2해서 4배 증가시킨다.

우측 Sift left2 : Branch 명령어일 때 주소 data sift left 2해서 4배로 증가시킨다.

우측 adder : Branch 명령어일 때 주소 data4 증가시킨다.

∙ Branch-Mux : Branch 주소 또는 4 증가시킨 PC주소 중 선택한다.

∙ Jump-Mux : Jump 주소 또는 Branch-Mux의 출력 중 선택한다.

ALUSrc-Mux : Control 신호에 따라서 입력받은 data 중 연산에 사용되는 data를 선택해서 출력한다.

ALU : 전달 받은 data 들을 Control 신호에 따라 연산해서 출력한다.

Data memory : memory에 접근해서 입력받은 주소에 데이터를 쓰거나 register에 입력할 data를 출력한다.

MemotoReg-Mux : register에 쓸 data를 선택한다.

각 단계가 진행되는 과정에서 clock signal에 따라 register 읽기, 쓰기, 연산이 이루어지는데 Enalbe/Disalbe되어있는지에 따라 미리 입력된 값이 신호를 받고 조금 지나서 이동한다.

주요 명령어별 진행

- ADD : PC주소의 Instruction memory에서 명령을 인출하고 PC4 증가시킨다. 32bit opcode[25-21]bitRead register1, [20-16]bitRead register2로 읽고 [15-11]bitWrite register로 입력할 준비를 한다. AluRead data를 전달해서 연산한 결과를 registers file에 저장한다.

- SLTI : PC주소의 Instruction memory에서 명령을 인출하고 PC4 증가시킨다. registers file에서 32bit opcode[25-21]bitWrite register로 준비하고 [20-16]bitRead register1으로 값을 읽는다. [15-10]bitSign-extention한 다음 ALU에서 연산할 준비를 한다. Immediate값과 Read dataalu에서 비교연산한다. 참이면 Write register1을 거짓이면 0을 저장한다.

- SW : PC주소의 Instruction memory에서 명령을 인출하고 PC4 증가시킨다. [25-21]bitRead register1, [20-15]bitRead regitser2로 읽는다. Immediate값을 Sign-extention해서 ALU에서 연산할 준비를 한다. Read data1Immediate값을 ALU에 입력해서 저장할 Memory 주소를 연산한다. Read data2ALU에서 연산된 dataData memory에 입력해서 해당 주소에 값을 저장한다.

- LW : PC주소의 Instruction memory에서 명령을 인출하고 PC4 증가시킨다. [25-21]bitRead register1으로 읽고 [20-15]bitWrite regitser로 읽는다. Immediate값을 Sign-extention해서 ALU에서 연산할 준비를 한다. Read data1Immediate값을 ALU에 입력해서 가져올 Memory 주소를 연산한다. ALU에서 연산된 주소를 Data memory에 전달하여 해당 Memory 주소에 있는 data를 출력한다. 출력된 dataregisters fileWrite register에 저장한다.

Control

Control 신호는 RegDst, Jump, Branch, MemRead, MemtoReg, ALUOP, MemWrite, ALUSrc, RegWrite가 있다. 명령의 opcode [31-26]bit를 통해서 각 Control이 정해진다.

RegDst : Mux에 연결되어 opcodert[20-15], rd[25-21] Write register로 사용할 register number를 선택한다.

Jump : Mux와 연결되어 Branch-Mux에 출력된 값과 [25-0]에 해당하는 값이 shif-left24배된 pc값 중 선택한다.

Branch : Mux와 연결되어 4 증가된 PC주소와 [15-0]bitShift-left 24배된 주소값 중 선택한다.

MemRead : Data memory와 연결되어 데이터를 읽을지 여부를 결정한다.

MemtoReg : Mux와 연결되어 Data memory에서 출력된 값을 register에 쓸지 여부를 결정한다.

ALUOp : ALU control과 연결되어 R-type명령어의 경우 명령어를 결정한다.

MemWrite : Data memory에 연결되어 Memory에서 data 읽기 여부를 결정한다.

ALUSrc : Mux와 연결되어 Read register의 값과 Immediate값 중 선택해서 ALU에 입력한다.

RegWrite : registers file에 연결되어 register에 값을 쓸지 여부를 결정한다.


Control의 입출력 값은 다음과 같다.

728x90