4비트 ALU 시뮬레이터 (산술·논리 연산)
디지털회로실험의 산술논리연산회로처럼 s1, s0, Cin으로 기능을 고르면 4비트 출력 F와 캐리 Cout을 계산합니다. 실험 결과표를 확인할 때 쓰세요.
회로가 하는 일
산술 연산은 가산기 앞에서 B를 Y = s0·B + s1·B̅로 바꾼 뒤 F = A + Y + Cin을 계산합니다. s1 s0 = 00이면 Y = 0000, 01이면 B, 10이면 B̅, 11이면 1111이 되어서 증가, 덧셈, 뺄셈(A + B̅ + 1), 감소를 모두 가산기 하나로 할 수 있습니다. 논리 연산은 s1 s0로 OR, XOR, AND, NOT 중 하나를 고르는 멀티플렉서입니다.
풀이 예제: 뺄셈 2 − 1
- s1 s0 = 1 0이면 Y = B̅ = 1110
- F = A + Y + Cin = 0010 + 1110 + 1 = 1 0001 (17)
- 4비트를 넘은 자리는 Cout으로 → F = 0001, Cout = 1. 즉 2 − 1 = 1 (뺄셈에서 Cout = 1은 빌림이 없다는 뜻)
산술 연산 기능표
| s1 s0 Cin | 동작 | F | Cout |
|---|---|---|---|
| s1 s0 Cin0 0 0 | 동작전달 (F = A) | F0010 | Cout0 |
| s1 s0 Cin0 0 1 | 동작증가 (F = A + 1) | F0011 | Cout0 |
| s1 s0 Cin0 1 0 | 동작덧셈 (F = A + B) | F0011 | Cout0 |
| s1 s0 Cin0 1 1 | 동작덧셈 + 1 (F = A + B + 1) | F0100 | Cout0 |
| s1 s0 Cin1 0 0 | 동작A + B̅ (F = A + B̅) | F0000 | Cout1 |
| s1 s0 Cin1 0 1 | 동작뺄셈 (F = A − B) | F0001 | Cout1 |
| s1 s0 Cin1 1 0 | 동작감소 (F = A − 1) | F0001 | Cout1 |
| s1 s0 Cin1 1 1 | 동작전달 (F = A) | F0010 | Cout1 |
A = 0010 (2), B = 0001 (1)일 때의 결과입니다. 실험용 4비트 ALU 회로에서 측정한 값과 같습니다.
논리 연산 기능표
| s1 s0 | 동작 | F (A = 1100, B = 1010) |
|---|---|---|
| 0 0 | OR (F = A ∨ B) | 1110 |
| 0 1 | XOR (F = A ⊕ B) | 0110 |
| 1 0 | AND (F = A ∧ B) | 1000 |
| 1 1 | NOT (F = A̅) | 0011 |
실전에서 쓰는 법
순서대로 쓰기
- 4비트 피연산자 A와 B를 2진수나 10진수로 입력합니다.
- 선택선 s1, s0와 캐리 입력으로 연산을 고릅니다. 어떤 조합이 어떤 연산인지는 표에 있습니다.
- 4비트 결과와 캐리 출력을 읽고, 비트별 계산 과정을 따라가 봅니다.
자주 하는 실수
- 뺄셈에서 캐리 입력을 잊기. A − B는 A에 B를 반전한 값과 1을 더해 계산합니다. 이 "1"은 보통 캐리 입력을 1로 두어 넣습니다.
- 캐리를 오버플로로 읽기. 캐리 출력은 부호 없는 결과가 4비트를 넘었다는 표시입니다. 부호 있는 수(−8~7)의 오버플로는 따로 판단합니다. 최상위 비트로 들어가는 캐리와 나오는 캐리가 다를 때입니다.
- 빌림을 거꾸로 읽기. 이 방식의 뺄셈에서 캐리 출력 1은 빌림이 없음(A가 B 이상), 0은 빌림이 있었다는 뜻입니다.
실험에서 만들 때
실험용 ALU는 보통 7483 4비트 가산기, 뺄셈 때 B를 반전하는 B 입력의 XOR 게이트, 산술과 논리 결과를 고르는 74153 같은 멀티플렉서로 만듭니다. 출력에 LED를 달고 연산을 하나씩 시험하면서, 칩을 의심하기 전에 진리표의 각 줄을 이 시뮬레이터와 비교하세요. 멀티플렉서로 전가산기를 만드는 가이드에서 같은 부품을 다룹니다.
계산 예: 5 + 6과 오버플로 플래그
A = 0101(5), B = 0110(6), s1 s0 = 01, Cin = 0으로 두면 F = A + B입니다. 오른쪽부터 한 비트씩 더하면 1 + 0 = 1, 0 + 1 = 1, 1 + 1 = 0 자리올림 1, 0 + 0 + 1 = 1입니다. F = 1011, Cout = 0입니다.
부호 없는 수로 1011은 11이므로 맞고, Cout = 0도 이와 맞습니다. 부호 있는 수로는 −5라서 틀립니다. 11은 −8에서 7 범위에 들어가지 않기 때문입니다. 오버플로 판정도 같습니다. 맨 위 비트로 자리올림이 들어갔지만 나오지는 않았습니다. F의 LED만으로는 이것이 보이지 않으므로, 실험에서 오버플로 플래그를 요구한다면 두 자리올림의 XOR을 다섯 번째 LED에 연결하세요.
계산 예: 빌림이 생기는 뺄셈
이번에는 2 − 5입니다. A = 0010, B = 0101, s1 s0 = 10, Cin = 1. 가산기는 A + B̅ + 1 = 0010 + 1010 + 1 = 1101, Cout = 0을 계산합니다. Cout = 0은 빌림이 생겼다는 뜻, 즉 A가 B보다 작았다는 뜻이고, 1101을 2의 보수로 읽으면 −3으로 정답입니다. 브레드보드 ALU가 이 줄은 틀리는데 2 − 1은 맞는다면 B 반전 게이트와 캐리 입력 배선부터 보세요. 덧셈과 다른 부분은 그 둘뿐입니다. 4비트 결과를 부호 있는 값으로 바꿀 때는 2의 보수 계산기를 쓰면 됩니다.
자주 묻는 질문
ALU는 가산기로 어떻게 뺄셈을 하나요?
2의 보수를 더합니다. A − B = A + B̅ + 1이라서, B를 뒤집고(s1 s0 = 10) Cin을 1로 주면 같은 가산기로 뺄셈이 됩니다.
뺄셈 결과에서 Cout이 1인 이유는?
A ≥ B이면 A + B̅ + 1이 4비트를 넘쳐서 Cout이 1이 됩니다. 즉 뺄셈에서 Cout = 1은 빌림이 없었다는 뜻이고, Cout = 0이면 결과가 음수가 된 것입니다.