만쥬의 개발일기
article thumbnail

오늘 배워볼 것은 MIPS의 Datapath이다.
CPU의 핵심 구성 요소인 Datapath는 Computer Architecture의 꽃이고,
이후 CA내용을 이해하는데 있어 굉장히 중요한 요소라고 생각해서 포스팅을 작성하게 되었다.

Datapath란

Datapath는 컴퓨터 아키텍쳐에서 데이터를 처리하는 논리 회로와 구성 요소들의 집합을 말한다.

데이터 경로라고도 할 수 있고, 무엇보다 CPU의 핵심 구성 요소이기에 중요하다.

앞으로의 최적화 기술들과 주소 연산을 이해하는 데 있어 아주 중요하기에 자세하게 짚고 넘어가는 것이 좋다.

이 포스팅에서는 컴퓨터 아키텍쳐들 중에서도 RISC 기반인 MIPS 아키텍쳐의 Datapth에 대해 알아볼 것이다.

 

 

👀Datapath의 구성 요소 (MIPS)

Datapath에서 중요한 구성 요소들에는 다음이 있다. 하나씩 자세히 알아보자.

  • PC(program counter)
  • MUX(Multiplexer)
  • Control Unit
  • ALU
  • Register File
  • Data Memory
  • Instruction Memory

PC

먼저 PC(프로그램 카운터) 이다.

PC는 실행 중인 명령어의 주소를 저장하고, 다음에 실행할 명령어의 주소를 결정한다.

실행 이후 다음 실행할 PC를 업데이트할때는 지정해준 target adderss 아니면 PC+4로 설정한다.

왜 다음 명령어인데 PC+1이 아닌 PC+4냐 하면, MIPS에서 Instrction들은 32bit, 즉 4byte로

이루어져 있기 때문이다. (메모리 연산에서 1은 1byte이다.)

PC를 사용하는 간단한 예시

 

MUX

MUX, 즉 멀티플렉서는 다수의 입력 중에서 하나의 출력을 선택하는 논리 회로이다.

다음 그림은 4x1 MUX의 예시이다.

위 구조는 다음과 같다.

  • input = $I_0$ ~ $I_4$ 4개
  • output = Y
  • 제어 신호 = $S_0$ , $S_1$

컴퓨터 구조 혹은 컴퓨터 회로를 공부한다면 MUX는 반드시 알아두자.

Control Unit

Control Unit, 즉 제어 유닛은 Instruction이 실제 동작해야할 방식을 해석하고 실행하는 장치이다.

보통 instruction의 opcode를 전달받아 해석한다.

다음은 주 기능들이다.

  1. 명령어 해석
  2. 제어 신호 생성
  3. 시스템 클럭 관리
  4. 분기 및 점프 처리
  5. 예외 및 인터럽트 처리

ALU

ALU, 즉 산술 논리 장치는 산술 연산과 논리 연산을 수행하는 장치이다.

산술 연산, 논리 연산, 비트 조작, 비교 연산, 오버플로우 감지 등

연산과 관련된 모든 역할을 수행한다.

다음은 ALU를 대략적으로 나타낸 그림이다. ALU control line은 앞에서부터 A-inverter,B-inverter, Operation을 의미한다.

왼쪽 위 ALU 연산장치를 32개 붙이면, 그게 바로 32bit 컴퓨터이다. 

그리고 마지막 31번째 ALU에서 CarryOut이 발생하는지의 여부로 overflow를 감지한다.

Register File

레지스터 파일은 다음과 같은 구조로 이루어져 있고, 내부에 32개의 레지스터를 가지고 있다.

레지스터는 2개의 읽기 작업과 1개의 쓰기작업을 한번에 할 수 있다.

다음은 조금 더 자세한 레지스터 파일 내부 구조이다.

Data Memory

데이터 메모리는 말 그대로 메모리 장치이다.

DataPath를 통해 Data Memory에 존재하는 데이터를 읽기도 하고, 데이터를 추가로 쓰기도 한다.

 

Instruction Memory

명령어 메모리는 명령어를 저장하는 메모리이다.

PC에서 메모리를 순차적으로 fetch해오고 Control Unit에 전달하면, Control Unit이 해당 명령어를 디코드 한다.

아까 예시에서 사용한 그림을 다시보면,

위가 명령어 메모리, 오른쪽 아래가 제어 유닛, 왼쪽 아래가 나머지 작업이라고 볼 수 있다.

 

✏️Datapath 그려보기

위 내용을 바탕으로 전체 Datapath를 그리면 다음과 같아진다.

 

instruction 별 Datapath 경로는 다음 포스팅에서 계속..!

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!