오래 못 할 짓 하지 않기

[ 컴퓨터 구조 ] 4. Datapath (3) - Instruction Datapath 본문

2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 4. Datapath (3) - Instruction Datapath

쫑알bot 2023. 6. 30. 23:15
728x90

Datapath 설계

 

 

0:07

Instruction Fetch :
1. Instruction memory에 있는 게 뭘까? > Instruction이겠지?

2. PC를 Instruction memory address로  연결한다.

--> Fetch 끝

3. 그 위에는 PC +4 를 해놓음으로써 그다음 Instruction을 가져온다.

 


1:16

 

R-Type Instructions

1. Fetch후에 가져온 Instrution 에서 32bit를 이제 나눈다. 앞 5비트는 Op code이므로 떼고
그 뒤 비트들은 Register들에게 할당된다.

2. 그렇게 Read Register 1,2,3들은 rs, rt, rd가 되고 read data 1 = rs , 2 = rd가 된다.

3. Read data 1,2 가 ALU로 들어가게 되고, Instruction 에 있었던 연산을 수행한 뒤, 결과는 ALU result로 나온다.

4. ALU result는 다시 Write Data로 들어가고, 어디에 write할지는 rd가 write register와 연결되어 결정한다.

 

 

 


2:27

 

Load or Store << 데이터 메모리 +  Sign - extention (16 bit -> 32 bit )

 

data의 address 구하기 : Sign extention 된 data와 rs가 ALU에서 add 되어 Address로 들어간다.

 

lw 명령어일 때 : Read Data 로 나온 게 Register[ra] 로 들어간다.

sw 명령어일 때 : Register[rt] 가 Write data 로 들어간다.

 

 


 

3:30

BEQ (Branch if Equal)

 

Read data1 = R[rs]

Read data2 = R[rt]  이 두 개를 ALU에서 비교한다.

ALU에서는 두 개의 차이를 구하여 0이면 Equal로 Branch.

Branch를 할 경우에 주소는 [ 32비트로 sign extention 한 값 * 4(<<2) ]   + [ PC + 4 ] 를 하면 Branch target 값이 된다.

 

 


4:20

 

 

R type + ( Load or Store )

  • R type = Register , ALU 만 있으면 됨
  • Load / Store =  


R Type에서는 ALU의 연산을 통해 rs + rt  갈 곳이 정해지고,

Load / Store는                                rs + se(imm16) 로 갈 곳이 정해진다.

 

이 충돌을 해결하기 위해 2 : 1 MUX를 이용한다.

-->  R type일 때는 Read data2 = rt가 들어가고, Load / Store 일 땐 se(imm16)

 

해당 ALU의 결괏값이 

R타입일 때 : 바로 Write Data로 들어간다.

Lw 일 때 : Data Memory 의 Address로 들어가고 그 Adderess에서 나온 Read Data가 Write data로 들어간다.

 

 

 


 

 

6:50

아래 부분은 방금 했던 R type + Load/Store이고

위에 새로 더해진 부분은 BEQ를 해결하고,  Branch Target 주소를 구하는 곳임.

 

+address 를 read한다는 건, 

자판기 느낌이라고 생각하면 됨.

14번에 있는 거 줘봐 --> 해당 음료 나옴

 

 

 


전체적인 흐름

 

     Program Counter 가 업데이트 되면 (새로운 입력이 들어오면)

→  Instruction Memory가 새로 업데이트된 정보의 명령어를 출력하고

Register File 에서 Rs , Rt 들을 읽는다 

ALU에서 연산을 하고, 해당 연산의 결과는 다시 Register File로 업데이트시켜준다.

→ PC +4 하여 또 업데이트를 해준다.

 

이게 1CLK 에 끝난다.