[TIL] 2022.11.28. [Computer Architecture]

2022. 11. 28. 20:11

 

오늘의 TIL.

 

컴퓨터 구조의 단순한 구혀넹 대해 서술해보고자 한다.

 

RISC-V ALU는 제어 입력 4개를 사용하는 다음 4개의 조합을 정의하고 있다.

 

0000 -> AND

0001 -> OR

0010 -> ADD

0110 -> Subtract

 

ALU는 명령어 종류에 따라 이 네 가지 기능 중 하나를 수행한다.

 

ld, sd

-> 메모리 주소를 계산하기 위해 덧셈용으로 ALU를 사용.

 

R-형식

-> 명령어의 7비트 funct7 필드와 funct3 필드 값에 따라서 4가지 연산 중 하나를 수행하게 된다.

 

조건부 분기 beq

-> 두 피연산자에 뺄셈을 한 후 결과가 0인지 아닌지 테스트한다.

 이 경우 0이라면 ZERO function에 의해 1이 된다.

(system의 ZF == 1인 것과 같은 원리로 보고 있다.)

 

 

명령어의 funct7 필드와 funct3 필드 그리고 ALUOP라 불리는 2비트 제어 필드를 입력으로 하는 조그만 제어 유닛을 만들어서 4비트 ALU 제어 신호를 발생시킬 수 있다. ALUOP는 ALU가 수행해야 할 연산을 표시한다.

 

" ALU control determines the function tha ALU performs "

 

ALU 제어 유닛의 출력은 4비트 신횐데 이 4비트 신호는 앞서 말한 4비트 조합 중 하나를 만들어 냄으로써 ALU 를 직접 제어한다.

첫 번째 열에 표시된 명령어가 ALUOp 비트값을 결정한다. 모든 인코딩은 이진수로 표시한다. ALUOp 값이 00이나 01일 때 ALU 동작은 funct7이나 funct3 필드에 영향을 받지 않는다는 것을 기억하자. 이 경우 opcode인 funct7이나 funct3 값에 대해 "don't care"라고 말하고, 이 필드들을 모두 X로 표시한다. ALUOp가 10일 때는 funct7과 funct3 필드값이 ALU 제어 입력을 결정하는 데 쓰인다.

위 그림에서 2비트 ALUOp 제어와 funct7 필드, funct3 필드를 사용하여 어떻게 ALU 제어 입력을 만드는지 보여 준다.

 

주 제어 유닛은 이것을 입력으로 받아서 ALU를 제엏하는 실제 신호를 만들어 내는 이런 다단계 디코딩은 많이 쓰이는 구현 기법이다.

 

다단계 제어를 사용하면 주 제어 유닛의 크기를 줄일 수 있다.

 

또한 여러 개의 작은 제어 유닛을 사용하면 제어 유닛의 속도를 증가시킬 수도 있다.

 

제어 유닛의 속도가 클럭 사이클 시간에 영향을 미치는 경우가 많으므로 이러한 최적화는 중요하다.

 

 

이 논리회로를 설계하는 단계로서 funct 필드와 ALUOp 비트의 관심 있는 조합에 대한 진리표를 만드는 것이 도움이 된다.

 

진리표는 이 입력 필드 값에 따라 4비트 ALU 제어 값이 어떻게 설정되는지를 보여주고 있다. 완전한 진리표는 매우 클 뿐만 아니라 많은 입력 값에 대해 ALU 제어 값이 전혀 상관없기 (don't care) 때문에, ALU 제어가 반드시 특정한 값을 가져야 하는 경우만을 표시하였다.

 

출력이 모두 0이나 don't care인 엔트리는 빼고 출력이 1이 되어야 하는 엔트리만을 진리표에 나타내는 이 방법을 이 장이 끝날 때까지 계속 사용된다.

 

4개의 R-형식 명령어에 따라 값이 달라지는 것들은 비트 30, 14 - 12뿐이다.

 

 

 

 

 

 

※ 해당 게시물은 컴퓨터 구조 및 설계 (RISC-V)를 토대로 작성되었으며, 문제가 될 시 삭제하겠습니다. 

 

BELATED ARTICLES

more