The Processor Part.1 - Computer Architecture

The Processor Part.1 - Computer Architecture

생성일
May 29, 2024 06:18 AM
Description
컴퓨터 구조의 프로세서 에 대해 알아봅니다.
Tag
Computer Science Engineering
Computer Architecture
목표: Processor의 내부 구조를 이해하자
 

Introduction

  • CPU 성능의 요소(factor)
    • Instruction count(명령어 수)
      • ISA(Instruction set Architecture)와 컴파일러에 의해 결정
    • CPI(Cycle Count per Instruction)와 Cycle Time
      • CPU 하드웨어에 의해 결정
  • MIPS 구현방식을 2가지의 형태로 배워볼 것
    • 간소화된 버전
    • 그보다는 좀 더 현실적인 pipeline화된 버전
  • 구현에 실제 MIPS의 모든 명령어를 사용하진 않고, 일부분을 사용할 것임.
    • (하지만, 주로 사용되는 명령어들이고, 대부분의 동작을 구현 가능하므로..)
    • 메모리 참조(memory reference): lw, sw
    • 산술/논리(arithmetic/logical): add, sub, and, or, slt
    • 제어 이동(control transfer): beq, j
 

Instruction Execution

  • PC(Program Counter, 현재 실행하는 명령어의 메모리 주소를 가짐(정확히는 다음번)) ↔ instruction memory.
    • PC에 담긴 주소로 instruction memory에서 instruction을 읽어오는 것을, fetch instruction이라고 함.
  • 레지스터 번호 ↔ 레지스터 뭉치
    • instruction에서 레지스터 번호($at, $t0, $s0, ...)를 통해 레지스터에 접근하여 값을 읽어오는 것을 read register.
  • instruction 종류(class)에 따라..
    • 계산에 ALU를 사용하기도 함.
      • 산술 계산
      • load/store를 위한 메모리 주소 계산
      • branch 대상 주소 계산(offset)
    • 메모리에 접근하여 데이터를 load/store하는 명령어.
    • PC ← 대상주소(점프류) / PC+=4(순차적 진행)
 
실제로는 여러 선이 만날 수 없기 때문에 원래는 Multiplexer를 써서 그 중 하나의 신호를 선택한다.
실제로는 여러 선이 만날 수 없기 때문에 원래는 Multiplexer를 써서 그 중 하나의 신호를 선택한다.

Multiplexer

notion image
  • Control
    • 각각의 하드웨어 모듈(레지스터, 메모리, …) 이 어떻게 동작하는지를 제어해주는 컨트롤을 만들어주는 회로
    • 명령어를 읽어서 해당하는 제어 신호를 만들어냄.
 

Logic Design Conventions

  • 정보는 binary(0, 1)로 인코딩된다.
    • 저전력 = 0, 고전력 = 1
    • 하나의 비트 표현마다 한 개의 선(wire)이 필요하다.
    • 따라서, 멀티비트 데이터는 multi-wire bus들로 인코딩됨
  • combinational element(조합 요소)
    • 데이터(목표)에 동작함
    • output은 input의 조합
  • state(sequential) element(상태/순서적 요소)
    • 정보를 저장(store)

Combinational Elements

notion image
 

Sequential Elements

notion image
  • 레지스터: 데이터를 회로에 저장(store)
    • clock 신호(signal)를 사용하여 언제 저장된 값이 업데이트 되는지 결정
    • Edge-triggered: clock이 0에서 1로 변할 때(rising-edge) 업데이트
    • (※ falling-edge에서 업데이트시킬 수도 있음. 정하기 나름. 여튼 edge에서.)
  • Combinational Elements는 input과 규칙에 의해 output이 결정되었으나, Sequential Elements는 현재값과 input, clock 타이밍에 의해 output이 결정.
    • 레지스터, 메모리 등에 사용.
 

Clocking Methodology

notion image
  • Combinational logic은 clock cycle동안 데이터를 변형(transform) 한다.
    • clock edge간에. 그 사이에.
    • state element들로부터 input이 되고, output은 또 state element가 된다.
    • 가장 지연이 긴 시간(longest delay, 가장 느린 logic)이 clock period(클럭 주기)를 결정한다.
    •  

Different Implementations

  • 덧셈을 위한 1-bit ALU
notion image
  • add, and, or를 위한 1-bit ALU는 어떻게 만드는가?
  • 32-bit ALU는 어떻게 만드는가?
 

Building a 32 bit ALU

 

a-b 구현

  • 2의 보수 관점으로 접근해라: b를 negate (0을 1, 1을 0)을 취하고 1을 더하면 된다.
  • 어떻게 negate 시키는가?
notion image
 

Tailoring the ALU to the MIPS

  • slt (set-on-less-than) instruction 구현?
    • 기억할 점: slt는 산술 연산이다.
    • rs < rt일 경우 1, 아닐 경우 0을 만들어라
    • 뺄셈을 이용: (a-b) < 0 implies a < b
  • beq (branch equal) instruction 구현?
    • 뺄셈을 이용: (a-b) = 0 implies a = b
    •  

ALU Extension

notion image
notion image
notion image
 

Register File

notion image

Read Register

notion image

Writer Register

notion image

Register File

notion image

Building a Datapath

  • Datapath
    • 데이터가 흐르는 경로
    • 연산을 위한 데이터든, 그 결과든 흘러서 어디론가 전달되거나 저장되거나 해야함.
    • CPU에서 프로세스 데이터와 주소들의 요소가 전달되는 길
      • 레지스터, ALU, MUX, 메모리… 등의 모듈들이 연결되는 통로
  • 우리는 MIPS datapath를 순차적으로 만들어 볼 것임.
    • 개략도의 디자인을 좀 더 정제할 것임.
 

Fetching Instructions

notion image
notion image
  • Instruction Memory로부터 instruction을 읽어 온다.
  • 다음의 sequential한 instruction의 주소를 PC 값으로 업데이트 한다.
  • PC는 모든 clock cycle마다 업데이트 되기 때문에, PC write 작업이 필요하지 않다.
  • instruction memory에서 읽기는 combination activity이기 때문에, 명시적인 읽기 제어 신호가 필요하지 않다.
 

Decoding Instruction

notion image
notion image
  • fetch된 instruction의 opcode, function field bits들을 control unit으로 전송한다.
  • 또한 Register File로부터 두 개의 값을 읽는다.
    • Register File 주소들은 instruction에 포함되어있다.
 

Executing R Format Operations

  • R format operations ( add, sub, slt, and, or )
notion image
  • rs, rt의 값에 대해서 연산(op 및 funct)을 수행한다.
  • 결과를 Register File(rd)에 다시 저장
 
notion image
notion image
  • Register File은 모든 cycle마다 write operation이 작동되지 않는다.
  • 그렇기 때문에 Register File에 control signal을 write 해야한다.
 

Executing Load and Store Operations

notion image
  • Load, Store operations
    • 대상 레지스터에서 읽음(read)
    • 16-bit의 offset을 이용하여 주소를 계산
      • 주소 계산에 ALU를 사용
      • ALU는 32-bit이기 때문에, 32-bit로 확장해서 사용.
      • (offset은 -/+가 있으므로, sign-extend로 부호를 유지한 채 확장)
    • Load: 메모리를 읽고, 레지스터를 업데이트 (메모리에서 레지스터로. 메모리 기준 read. 빠르게 쓰려고 불러오기)
    • Store: 레지스터의 값을 메모리에 기록. (레지스터에서 메모리로. 메모리 기준 write. 영구용으로 저장)
    •  

Branch Instructions

notion image
  • 대상 레지스터에서 읽음(read)
    • 이 두 값을 비교
  • 피연산자(operand)를 비교
    • ALU를 사용. 두 개를 뺀 결과를 Zero와 검사하여 output을 발생시킴
      • Zero와 같으면 뺀게 0이니, output은 1(같다)
      • Zero와 다르면 뺀게 0이 아니니, output은 0(다르다)
  • 점프한다면 대상 주소(target address)도 계산해야 함.
    • I-format instruction의 address 부분에 담긴
      • 16비트의 정보(displace 얼마나 위(+) 아래(-)로 움직일지)를
      • 32비트로 확장하기 위해 sign-extend로.
    • 그리곤 2번 shift left함(*4) (word(32-bit) displacement)
      • 원래 PC + offset * 4 형태의 PC-relative addressing 방식임.
      • 주소가 4-byte씩이니.. 즉, 위에서 구한건 몇 “칸”이지 몇 byte가 아니다.
    • 계산된 결과를 PC에 더함(PC-relative addressing)
      • 참고로, PC에는 이미 현재 명령어의 다음 주소인 PC+4 상태이므로 (instruction fetch에 이미 더해진), +4를 감안하여 주소를 계산한다.
 

Executing Jump Operations

notion image
  • Jump operations은
    • PC의 하단 28비트를 fetch된 instruction의 2-bit shift left된 하단 26비트로 교체합니다.
    •  

Creating a Single Datapath from the Parts

  • 각 요소들을 통합하여 한 clock cycle에 동작할 수 있도록 한다.
  • 한 clock cycle에 하나의 instruction만 실행한다.
    • 각 datapath 요소는 한 번에 하나의 기능만을 수행할 수 있다.
    • 그러므로, data memory와 instruction들을 분리해야 한다.
    • (그렇지 않으면 하나의 명령어가 동시에 접근하려고 함)
  • data source가 교차하는 곳에서는 multiplexor(MUX)를 사용하여 다른 instruction에 다른 경로로 대응할 수 있도록 한다.
 

R-Type/Load/Store Datapath

notion image
 

Full Datapath

notion image
 

The Main Control Unit

  • control 신호는 instruction으로부터 얻어진다 (instruction에 의해 도출된다.)
notion image
 

Single Cycle Datapath with Control Unit

notion image
 

R-Type Instruction

notion image
 

R-type Instruction Data/Control Flow

notion image
 

Load Word Instruction Data/Control Flow

notion image
 

Branch Instruction Data/Control Flow

notion image
 

Implementing Jumps

notion image
  • word address(직접 주소)를 사용한 점프
  • concatenation(이어붙이기) 방식으로 PC(Program Counter)를 업데이트
    • 26-bit의 address
    • 위에 left shift를 두번하여 *4의 결과(28-bit)
    • 현재 PC(Program Counter)의 상위 4비트를 뒤에 위를 합쳐서 (”old PC” & “address*4”), 총 32-bit
  • opcode로부터 해석된(decode) 추가적인 control 신호(signal)이 필요하다.
 

Datapath With Jumps Added

notion image
 

Control Signal의 효과

notion image

Control

notion image
 

Control Function

notion image

Control Function Implementation

  • 간단한 combinational logic
notion image
 

ALU Control

  • ALU는 다음에 쓰인다.
    • Load/Store: F = add
    • Branch: F = subtract
    • R-type: F는 funct field에 따라 다르다.
 
ALU control
Function
0000
AND
0001
OR
0010
add
0110
subtract
0111
set-on-less-than
1100
NOR
 
  • opcode로 부터 2-bit 부분(전체X)를 가져와서 ALUOp로 도출한다.
    • combinational logic을 사용해서 ALU control을 만들어낸다.
OP code
ALU op
Operation
funct
ALU function
ALU control
lw
00
load word
xxxxxx
add
0010
sw
00
store word
xxxxxx
add
0010
beq
01
branch equal
xxxxxx
subtract
0110
R-type
10
add
100000
add
0010
R-type
10
subtract
100010
subtract
0110
R-type
10
AND
100100
and
0000
R-type
10
OR
100101
or
0001
R-type
10
set on less than
101010
set on less than
0111
 

ALU Control Operation

notion image

ALU Control Implementation

notion image