leehyeon-dv 님의 블로그
4.3 Building a Datapath 본문
🔑Table of Contents
- Building a Datapath
- 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
- ALU를 사용해 두 개를 뺀 결과를 Zero와 검사해 output발생
- 점프한다면 대상주소도 계산해야함
- 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
📌Full Datapath
📍?<궁금한점>📍
🔎단일 사이클 데이터패스가 메모리와 데이터 메모리를 따로 가져야하는 이유
- 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 |