leehyeon-dv 님의 블로그

4.3 Building a Datapath 본문

컴퓨터구조 및 설계/4장. The Processor

4.3 Building a Datapath

leehyeon-dv 2024. 11. 21. 13:38

🔑Table of Contents

  1. Building a Datapath
  2. Instruction Fetch

📌Building a Datapath

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

📌 Instruction Fetch

명령어를 인출하고 프로그램 카운터를 증가시키는데 사용하는 데이터패스 일부분

  • 프로그램 명령어를 저장하고있다가 주소를 주어지면 명령어를 읽어서 보내주는 메모리유닛
  • pc = 현재 명령어 주소를 가지고있는 레지스터
  • 덧셈기 (ALU로 쉽게 만들수있음)
  • 명령어를 실행하기위해서는 명령어를 가져와야함
    • 명령어 실행을 준비하기위해 PC가 다음 명령어를 가리키도록 4만큼 증가시켜 다음 명령어의 주소를 구하는 데이터패스를 만드는 보임

📌 R-Format Instructions

MIPS에서 R-Format은 3개의 레지스터(rs,rt,rd)를 사용했었음

  • 레지스터
    • 산술적/논리적 작업을 수행
    • 2개의 read 레지스터
    • 결과를 write 레지스터에 씀
    • 레지스터 번호 입력은 32개의 레지스터 중 하나를 지정해야하므로 5비트 크기
    • 데이터입력과 데이터 출력버스는 모두 32비트폭을 가진다
  • ALU(Arithmetic/ Logical Unit)
    • 레지스터에서 나온 32비트 2개의 Read data input들이 들어감
    • 결과는 다시 레지스터로 write data로써 
    • 레지스터에서 쓰는것 → write data, 레지스터 데이터를 다른 곳에서 쓰는 것 → read data

 

📌 Load/Store Instructions

i-Format

 

  • 대상 레지스터에서 읽음(read)
  • 16-bit의 오프셋을 이용해 주소를 계산
    • 주소계산에 ALU를 사용
    • ALU는 32비트이기 때문에 32비트로 확장해 사용
    • (오프셋은 -/+가 있어서 sign-extend로 부호를 유지한채 확장)
  • Load : 메모리를 읽고, 레지스터를 업데이트 (메모리에서 레지스터로, 메모리 기준 read)
  • Store : 레지스터의 값을 메모리에 기록( 레지스터에서 메모리로, 메모리 기준 write)

📌 Branch Instructions

I-Format

 

  • 대상에서 읽음(read)  →  이 두 값을 비교 
  • 피연산자를 비교
    • ALU를 사용해 두 개를 뺀 결과를 Zero와 검사해 output발생
      • Zero와 같으면 뺀게 0, output은 1 (두 값이 같다)
      • Zero와 다르면 뺀게 0이 아님, output은 0
  • 점프한다면 대상주소도 계산해야함
    • I-Format instruction의 주소부분에 담긴 16비트의 정보를 32비트로 확장하기위해 sign-extend로
    • 2번 shift left함
      • 원래 PC + 오프셋*4형태의 PC-relative addressing방식임
    • 계산된 결과를 PC에 더함
      • 참고로 PC에는 이미 현재 명령어의 다음 주소인 PC+4상태이므로 +4를 감안해 주소 계산

📌 Composing the Elements

요소들을 구성하기(합치기)

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

📌R-Type/Load/Store Datapath

메모리 명령어와 R형식 명령어를 위한 데이터패스

 

📌Full Datapath

다음명령어 PC+4를 위한 멀티플렉서 필요함

📍?<궁금한점>📍

🔎단일 사이클 데이터패스가 메모리와 데이터 메모리를 따로 가져야하는 이유

  • MIPS에서는 데이터와 명령어의 형식이 달라 다른 메모리가 필요하기 때문
  • 메모리를 따로따로 갖는 것이 저렴함
  • 프로세서가 명령어를 한 사이클에 실행하는데, 단일 포트의 메모리로는 한 사이클에 2개의 서로 다른 접근을 할 수 없기 때문이다
728x90

'컴퓨터구조 및 설계 > 4장. The Processor' 카테고리의 다른 글

4.6 Pipelined Datapath and Control  (0) 2024.12.11
4.5 An Overview of Pipelining  (0) 2024.12.11
4.4 A Simple Implementation Scheme  (0) 2024.12.10
4.2 Logic Design Conventions  (0) 2024.11.21
4.1 Introduction  (0) 2024.11.20