Processor
CPU는 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행 및 처리하는 가장 핵심적인 컴퓨터의 제어장치이다. CPU는 외부에서 정보를 입력받고, 기억하고, 컴퓨터 프로그램의 명령어를 해석하여 연산하고, 외부로 출력하는 일을 한다.
명령어 실행 과정
- PC로부터 명령어의 메모리 주소를 받아와 명령어를 fetch한 뒤 PC를 4bit 증가함
- 명령에 사용되는 레지스터를 읽음
- 작업을 수행함(ALU, load/store, branch등)
Datapath
Datapath는 데이터 처리, 레지스터 및 버스를 수행하는 ALU, Multiplier와 같은 기능장치들의 집합이다.
위의 그림에서 선이 합쳐지는 부분에서 어떤 신호를 전달할지 결정해야 하는데, 이는 Multiplexer와 Control Unit을 통해 해결할 수 있다.
MIPS에서 Datapath는 두 가지 요소로 구성되어있다.
- Combinational elements : 데이터를 처리하는 요소. input을 받으면 output을 제공한다.
- State(sequencial) elements : 상태를 저장하는 요소. 내부 저장소를 가진다.
Combinational elements와 State elements는 서로 데이터를 주고받으며 작동한다.
- Combinational elements는 State elements로부터 input을 받고 output을 전달한다.
- positive edge-triggered clocking methodology를 가정했을 때, rising edge에서 state가 업데이트 되고, 다음 rising edge가 오기 전까지 Combinational element가 작업을 수행하여 output을 전달한다.
- State element의 input이 2개인 경우, 매 클락마다 상태가 업데이트되지만, input이 3개인 경우 Write Control bit가 1인 경우에 클락이 돌아오면 상태가 업데이트 된다.
Single-Cycle Datapath
1번의 클락 사이클동안 1개의 명령이 수행되는 Datapath
Instruction fetch
메모리에서 명령을 불러오는 역할을 수행. Instruction Memory, Program Counter, Adder로 구성
- Instruction Memory(State element) : 명령의 주소가 들어오면 해당하는 명령을 제공한다.
- Program Counter(State element) : 클락 사이클마다 다음 명령의 주소로 업데이트된다.
- Adder(Combinational element) : 32bit input을 받아 덧셈을 수행한다.(PC + 4)
2개의 레지스터에서 값을 읽어오고 연산을 수행한 뒤 레지스터에 값을 저장하는 역할을 수행. Register와 ALU로 구성
- Register(State element) : 32개의 general purpose register를 저장. 2개의 read port와 1개의 write port로 구성
- Read : 레지스터 번호를 입력받아 해당하는 레지스터에 저장된 데이터를 제공
- Write : 데이터와 레지스터 번호를 입력받아 레지스터에 값을 저장. rising edge와 write signal(RegWrite)가 모두 1일때 write
- ALU(Combinational element) : 두 32bit 숫자에 대해 산술논리연산 수행
- 4bit ALU operation신호를 통해 연산의 종류를 결정
Load/Store instructions
레지스터에서 값을 읽어서 ALU를 통해 주소를 계산한 뒤 load/store 작업을 수행. Register, ALU, Sign Extention Unit, Data Momory로 구성
- Sign Extention Unit(Combinational element) : 16bit offset을 32bit sign-extended offeset으로 확장
- Data Memory(State element) : 메모리에 대해 load/store 작업을 수행
- Load : MemRead신호가 1일때 주어진 주소에 저장된 메모리를 제공
- Write : MemWrite신호가 1일때 주어진 주소에 입력받은 데이터를 저장
Branch instructions
레지스터에서 값을 읽어서 ALU를 통해 값을 비교한 뒤 이동할 주소를 계산하는 작업을 수행. Register, ALU, Adder, Sign Extension Unit, Shift Left 2 Unit으로 구성
- Shift Left 2 Unit : 주소계산을 위해 offset을 왼쪽으로 2칸 shift하는 작업을 수행(offset * 4)
Control Unit
- ALU Control Unit : ALU가 수행할 연산의 종류를 결정
- Load/Store instructions : add
- Branch instructions : subtract
- R-format instructions : funct code에 따라 다름
- Main Control Unit : instruction에 따라 수행할 작업을 결정(Register, Branch, Memory,ALU등의 동작을 제어)
- RegDst
- ALUSrc
- MemtoReg
- RegWrite
- MemRead
- MemWrite
- Branch
- ALUOp1
- ALUOp0