ALU : Arithmetic Logic Unit

김민욱·2025년 6월 14일

ALU - Arithmetic Logic Unit

ALU는 다양한 산술/논리 연산이 가능한 하나의 유닛이다.
전형적인 ALU는 addition, subtraction, AND, OR 연산을 수행한다.

ALUControl signal은 다음과 같이 구성될 수 있다.

ALUControl1:0_{1:0}Function
00Add
01Subtract
10AND
11OR

위 ALUControl signal을 토대로 완성한 ALU의 모습이다.
4×1 mux를 이용해 연산 종류를 결정한다.

ALUControl signal이 00일 경우, BB의 비트를 그대로 받아오고 밑에 블록에서 AA와 Sum을 수행한 후 mux의 00으로 결과를 보낸다.

ALUControl signal이 01일 경우, BB의 비트는 반전되어 받아지고(B)(\overline{B}), AA와 Sum을 수행할 때 1이 더해진다(A+B+1)(A+\overline{B}+1). 이를 통해 ABA-B를 수행한다.

mux 위의 두 블럭이 ALUControl sigal의 마지막 1비트만 받는 이유가 바로 이 것이다.

어떤 ALU들은 연산 결과의 정보에 대한 추가적인 output을 내는데, 이를 flag라고 부른다. 예를 들어, 연산 결과가 음수인지, 0인지, carry out이 발생했는지, 오버플로우가 발생했는지 알려주는 정보인 것이다.
flag에는 N,Z,C,VN,Z,C,V가 있다.

NN(Negative flag)
연산 결과가 음수(Negative)인지 알려주는 flag이다.
ALU output의 msb(=sign bit)와 연결되어있다.

ZZ(Zero flag)
연산 결과의 모든 bit가 0(Zero)인지 알려주는 flag이다.
ALU output 전체를 NOR게이트(모두 0이면 1, output bit에 1이 하나라도 있으면 0)에 통과시켜 계산한다.
위 회로에서는 NOR이 아닌 NAND를 사용했는데, 진리표를 작성해보면 이 경우도 동일하게 작동함(모든 입력 bit가 0이면 출력은 1)을 알 수 있다.

CC(Carry out flag)
adder가 올림/내림(Carry out)을 발생시키는지 알려주는 flag이다.
Sum block의 CoutC_{out}과 ALUControl의 첫 번째 bit(현재 연산이 addition/subtraction인지 판별하기 위함)의 반전을 AND 연산 하여 계산한다.

VV(Overflow flag)
ALU의 addition/subtraction 연산 수행 결과로 overflow가 발생하는지 알려주는 flag이다.
overflow는 sign bit가 같은 두 숫자의 합의 결과가 반대 sign을 가지는 경우이다. 따라서 VV flag는 다음 세 조건이 모두 만족할 때 1을 가진다.

1) ALU가 addition 또는 subtraction을 수행할 것(ALUControl1_1=0)
2) AASumSum의 sign이 반대일 것
3) addition(ALUControl0_0=0)에서 AABB의 sign이 같거나 subtraction(ALUControl0_0=1)에서 AABB의 sign이 다를 것

ALU flag는 comparision 연산에도 사용될 수 있다.

ComparisonSignedUnsigned
==ZZZZ
\neZ\overline ZZ\overline Z
<<NVN\oplus VC\overline C
\leZ+(NV)Z+(N\oplus V)Z+CZ+\overline C
>>Z(NV)\overline Z \cdot(\overline{N\oplus V})ZC\overline Z \cdot C
\ge(NV)(\overline{N\oplus V})CC

ALU에 SLT를 추가하기 위해서는 mux를 확장하여 ALUControl signal을 수정해야한다.

ALUControl2:0_{2:0}Function
000Add
001Subtract
010AND
011OR
101SLT

SLT의 Control signal을 살펴보자
ALUControl1_1 = 0 \rarr addition/subtraction 수행
ALUControl0_0= 1 \rarr subtraction 수행

SLT의 연산이 ABA-B를 기반으로 수행되기 때문에 이러한 구성이 필요하다.

이후 Sum의 msb를 0으로 확장시켜 결과를 출력한다.

(a) overflow를 고려하지 않은 SLT가 추가된 ALU,
(b) overflow가 고려된 SLT가 추가된 ALU


<참고자료>
Harris & Harris, Digital Design and Computer Architecture, RISC-V Edition, 2022.

0개의 댓글