[Computer Architecture] Processor

impala·2023년 2월 2일
0
post-thumbnail

Processor

CPU는 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행 및 처리하는 가장 핵심적인 컴퓨터의 제어장치이다. CPU는 외부에서 정보를 입력받고, 기억하고, 컴퓨터 프로그램의 명령어를 해석하여 연산하고, 외부로 출력하는 일을 한다.

명령어 실행 과정

  1. PC로부터 명령어의 메모리 주소를 받아와 명령어를 fetch한 뒤 PC를 4bit 증가함
  2. 명령에 사용되는 레지스터를 읽음
  3. 작업을 수행함(ALU, load/store, branch등)

Datapath

Datapath는 데이터 처리, 레지스터 및 버스를 수행하는 ALU, Multiplier와 같은 기능장치들의 집합이다.

위의 그림에서 선이 합쳐지는 부분에서 어떤 신호를 전달할지 결정해야 하는데, 이는 MultiplexerControl Unit을 통해 해결할 수 있다.

MIPS에서 Datapath는 두 가지 요소로 구성되어있다.

  1. Combinational elements : 데이터를 처리하는 요소. input을 받으면 output을 제공한다.
  2. 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)

R-format instructions

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

0개의 댓글