2-2/컴퓨터 구조

[컴퓨터 구조] Building Datapath(2)

윤진노 2022. 11. 28. 18:26

저번 포스팅에서는 공통으로 쓰이는 Datapath와 명령어에 따라서 쓰이는 DataPath를 보았다.

이번에는, 그것들을 하나의 Datapath로 만들어보자.

 

 

 

 

💻 Single Datapath - without control

 

Complete DataPath

이전 포스팅에서 보여줬던 DataPath를 모두 합쳐 single DataPath로 만든 모습이다.

MUX라는 DataPath는 멀티플렉서로, Input을 선택적으로 넣어주기 위해 달렸다.

 

이렇게 완성된 Single Datapath는 왠만한 instruction을 모두 수행할 수 있다.

 

 

 

💻 Single Datapath - with control

control 신호를 추가해준 것이다.

Instruction의 address 는 각각 자기 위치를 찾아서 레지스터파일, IMMGen 의 Input으로 들어간다.

그리고 Opcode는 control signal로 사용되어진다.

이 control signal 들은 instruction에 따라서, Datapath가 사용되는지, 아닌지를 판별해준다.

 

ALU control이 하나 더있다. control에서 그냥 바로 써도 되지 않나? 라는 생각이 드는데, ALU control을 빼내면, 메인 컨트롤이 작아지고,  복잡도가 하나로 합쳤을 때에 비해 아주 낮아지기 때문이다.

 

control에서 signal로 나오는 ALUOp는 2bit이다. 입력은 7비트이지만 결과로 나오는 비트들은 8비트이다.

 

 

 

💻 ALU Control

control에서 빠져나온 ALU control을 한번 집중해서 탐구해보자.

 

 

ALU의 모습이다. 

input으로 데이타 두개가 들어오고 ALU내부에서 연산이 일어난다. output으로 Zero, ALU result가 나가는데, result는 결과값을, Zero는 branch 할때를 위해 있는 것으로  ALU 연산 결과가 0이면 1을, 1이면 0을 리턴해준다.

 

 

또한, 4비트짜리 ALU operation control signal이 들어간다. 이것은 ALU내에서 무슨 연산을 진행할지를 결정해준다.

ld,sd 명령어들은 ALU에서 add 연산이 진행된다. -> offset을 register address에 더하는것이다.

 

R-type Instruction일때는 And, Or, add,subtract 중 무엇을 선택할지는 funct7,funct3 field에 따라서 달라진다.

ALU Control의 input으로는 funct7,funct3, ALUOP를 입력받는다.

 

X는 0이든 1이든 상관 없다는 의미이다.

ALUOp는 instruction이 무엇인지 알려주지 않고, Instruction의 type만을 알려준다.

ld,sd가 ALU에 기대하는 산술은 add이다. 이는 offset을 주소값에 더해줄때 필요하기 때문이다.

beq는 이전에 말했지만, 두 레지스터의 값이 같은지 확인하기 위해 subtract 연산을 ALU에 기대한다

 

ALU Control에 대한 진리표를 확인해보자.

.ALUOp가 00이면 Funct7, Funct3에 상관 없이 0010이 나온다.

01이나, 11이면 무조건 0110이 나온다.

ALUOP가 10일때는 조금 다르다. 이때는, Funct7, Funct3 에따라서 다르게 나오는데, 이때 볼것은 Instruction의 30,14-12번째비트이다. 그것들을 제외하고는 전부 다 같다. 따라서, 위 Datapath의 그림을 봤으면 알겠지만 Imm Gen의 input으로 30,14-12번째 비트만 들어간다.