본문 바로가기
CS/컴퓨터 구조

[Chapter 4.4 컴퓨터 구조 및 설계] ALU 하드웨어

by 베어 그릴스 2022. 7. 19.
본 정리는 CS422-컴퓨터 구조 및 설계 : 하드웨어/소프트웨어 인터페이스. David A. Patterson, 존 헤네시 책을 바탕으로 하고 있음을 미리 알립니다.

 

and, or , add 연산 등을 하는 ALU 하드웨어를 한번 만들어보자.

 

ALU 하드웨어


우선 연산이 32bit의 수에 대해서 이루어진다. 이를 위해선 어떻게 해야할까?

 

단순히 and or 등의 연산을 하는 1bit ALU를 32개 사용하면 된다.

 

우리가 ALU 하드웨어를 만들기 위해선 위의 총 4가지의 논리 회로가 필요하다.

 

그럼 Add 연산은 어떻게 할 수 있는걸까?

1bit Add연산은 값이 Cout(올림수) sum (현재 자리에 올 수)로 2가지가 나오는데 다음 두 수는 위와 같이 표현할 수 있다.

즉, 이 식을 기반으로 add 회로를 따로 만들 수 있다.

 

그럼 이제 and,or,add 연산을 한번에 수행하는 1bit ALU가 위와 같다는 것을 알 수 있다.

 

32bit 연산을 위해 32개의 ALU를 붙이면, 위와 같은 32bit 연산을 할 수 있게 된다.

 

그렇다면, 빼기는 어떻게 할 수 있을까?

양수를 음수로 바꾸는 것에 우리는 2의 보수 표현법을 사용하였다.

똑같이 a-b를 한다고 생각하면 b를 2의 보수를 취하면 된다.

즉, inverter를 사용해 모든 b의 bit를 반대로 바꿔주고, 맨처음 ALU의 CarryIn에 1bit를 더해주면 2의 보수가 취해지는 것이다.

 

즉 이제 -b가 되고 a와 -b를 더해주면 빼기 연산이 실행된다.

 

slt(Set less than) 연산과 beq 연산의 경우는 어떠한가?

 

a-b를 해서  값이 0이 나오는지 혹은 -값이 나오는지만 확인하면 된다.

즉, slt 연산 실행 시 Multiplexer에 새로운 선택지를 넣어 첫번째 비트를 제외하고 모두 0을 입력한 후, 첫번째 비트만 마지막 1bit ALU에서 sign bit을 가지고 오면 된다.

 

이제 우리는 add and or sub 등의 연산을 ALU로 할 수 있게되었다.

이를 위한 컨트롤 신호에는 B inverter / Carry in / Op 3가지가 있었는데, 이 컨트롤 신호에 따른 연산은 다음과 같다.

 

 B inverter / Carry in / Op 연산
000 and
001 or
010 add
110 subtract
111 slt

모든 result가 0이면 zero bit은 1이 나온다.

 

 

ALU Extension


여기에 A inverter를 추가하면 어떻게될까?

 

해당 ALU Extension을 위한 컨트롤 신호에는 A inverter / B inverter / Carry in / Op 3가지가 있었는데, 이 컨트롤 신호에 따른 연산은 다음과 같다.

 A inverter / B inverter / Carry in / Op 연산
0000 and
0001 or
0010 add
0110 subtract
0111 slt
1100 Nor