2023. 2. 13. 18:24ㆍHardware
지난번 글에서 조합회로와 순차회로가 무엇이고
어떻게 구별하는지 알아봤다.
기억이 나지 않거나 아직 못 읽어보신 분들을 위해:
조합회로는 뭐고 순차회로는 대체 뭘까 – 하드웨어 시리즈 #1
하드웨어를 배우게 되면 아마도 가장 먼저 배우는 개념들 중 하나가 이 둘이다. 그만큼 중요하다는 것을 좀 더 와닿게 이야기하자면, 이 둘을 기반으로 CPU가 설계된다는 사실이다. 일단 조합회
mountainhiker.tistory.com
위 내용은 기본적으로 알고 있어야
이번 글도 수월하게 이해할 수 있다.
그래서 지난 글을 복습하자면
조합회로 : 현재 입력에 따라서 즉시 출력 (기억 능력 X)
순차회로 : 현재 + 과거 입력에 따라 출력
자, 그럼 조합회로 중에서
어떤 것들이 있을까?
이런 질문을 할 수 있다.
그래서 오늘은 조합회로 하드웨어에 대해 알아볼 것이다.
Concatenation & Replication
일단 concat...뭐시기는 간단하게 얘기하자면,
두 개 이상의 입력을 하나로 묶는 회로이다.
예를 들어, imm[5:1] = 01010이라는 5-bit짜리 시그널이 있고
마지막 1-bit 자리에 1이라는 시그널을 붙이고자 한다면
01010 + 1 => 010101
이런 느낌으로~
그럼 그 Repl...뭐시기는 뭘까?
이름에서 약간 감이 오듯이 replication == 반복이다
01 * 3 => 010101
이런 느낌으로~
이 둘은 주로 sign-extension이나 zero-extension에서 사용한다.
솔직히 조합회로 모듈이라고 하기엔 매우 애매하지만
어쨌든 사용되니까
이런 것도 있구나~ 알아두기 좋다
멀티플렉서 / Multiplexer
이름이 간지나서 어디 가서 있어 보이는 척할 수 있는 멀티플렉서는
(이하 mux)
여러 개의 입력 신호가 있다.
여러 개의 입력 신호 중에서 하나를 선택하는 모듈인데,
그냥 랜덤으로 선택하는 게 아니라
또 다른 특정 신호를 입력받는데,
그 신호를 기반으로 선택하여 선택된 자만을 출력한다.
입력이 2개이고 출력이 한 개인 mux는 2:1 mux,
입력이 4개 출력이 한 개인 mux는 4:1 mux...
그리고 이때 S 신호에 따라서
4가지 출력 중 하나의 값이 선택되는데,
오른쪽 4:1 mux를 예로 들자면
S = 00 => D0
S = 01 => D1
S = 10 => D2
S = 11 => D3
이렇게 선택된다.
mux의 핵심은,
여러 입력이 들어오는데 그중에서 하나를 선택한다
어떤 것을 선택할지는 추가로 입력되는 Select 신호에 따라 결정한다
디코더 / Decoder
n개의 입력을 받아 2^n개를 출력하는 모듈이다
즉, n개의 입력에 따라서 2^n개의 출력 중 하나만 1이 된다.
11이 들어오면 Y3 = 1,
10이 들어오면 Y2 = 1,
01이 들어오면 Y1 = 1,
00이 들어오면 Y0 = 1이다.
decoder의 핵심은,
이진수로 입력이 들어오면
원-핫 인코딩처럼 하나의 출력만이 1이 된다.
반가산기, 전가산기 / Half Adder, Full Adder
가산기는 두 개의 입력을 더하는 로직이다.
예를 들어 a와 b가 입력이라면 a+b를 출력하는 그런 로직~
가산기에는 여러 가지 종류가 있다:
- RCA : (가장 느리지만 간단한)
- CLA : (중간급 속도에 난이도)
- Prefix Adder : (가장 빠르고 어려움)
반가산기는 이진수 한 자리를 더할 수 있고,
전가산기는 자리올림수를 입력받으면서 이진수 한 자리를 더할 수 있고,
RCA는 자리올림 bit은 C를 Ripple (물 흐르듯이) 연결
=> 여러 bit 연산 가능
즉 RCA는 전가산기들을 연결한 거대한 다 bit 가산기이다.
그러면 반가산기부터 보자:
A | B | S (sum) | C (carry) |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
XOR 게이트 | AND 게이트 |
1-bit 덧셈을 할 수 있는 반가산기 (HA)를 보면,
S (=합)은 A와 B가 서로 다를 때만 출력이 1이라 XOR 게이트,
C (=자릿수)는 A와 B가 모두 1일 때만 1이라 AND 게이트 사용
그러므로,
반가산기는 이렇게 생겼다.
S = A ^ B
C = A & B
그럼 전가산기는?
A | B | Cin (carry input) | S (sum) | Cout (carry output) |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
A와 B와 Cin 중 1인 개수가 홀수일 때 S = 1이고,
A와 B 모두 1이거나 Cin이 1이면서 A와 B가 다를 때 Cout = 1이다
(좀 복잡)
전가산기는 이렇게 생겼고
S = A ^ B ^ Cin
Cout = A & B + (A^B) & Cin
아래 그림은 4-bit 이진수를 계산할 수 있는
RCA 가산기를 보여준다.
크게 대단한 기술은 없고
그냥 전가산기들을 연결해놓은 건데,
중요한 건 자리올림이 연결되어 있다는 것이다.
ALU (Arithmetic Logical Unit)
명령어에 따라 산술연산과 논리연산을 하는 모듈
산술연산은 +, -, *, /
논리연산은 AND, OR, XOR, NAND, NOR, XOR
복잡도를 줄이기 위해 +, -, AND와 OR만 연산할 수 있다고 가정하자
ALU에는 입력 a와 b,
그리고 연산의 종류를 정해주는 입력 control,
그리고 연산 결과를 출력한 결과 Y가 있다.
control 신호 | 연산 종류 |
0 (00) | a + b |
1 (01) | a - b |
2 (10) | a OR b |
3 (11) | a AND b |
위와 같은 control 신호에 따라 연산 종류를 정한 뒤
a와 b를 연산한다.
단, 이때 하드웨어의 특성인 '동시성'에 집중해야 한다.
아직 연산의 종류를 정해주는 control을 가지고
어떤 연산을 수행할지 정해지지도 않았는데
a와 b가 이미 ALU에서 덧셈, 뺄셈, AND, OR 다 하고 있다.
이 말은, 위에 control이 11이면 ALU는 a AND b 하나의 연산만 하는 것이 아니라,
미리 모든 연산을 다 수행한 뒤
모든 연산에 대한 모든 결과를
4:1 mux의 입력으로 넣고
control 신호는 mux의 Select 시그널처럼
mux에서 최종적으로 출력할 신호가 선택이 되는 것이다.
여러 로직이 동시에 실행되고 있어도 상관없는 이유는,
마지막에 mux가 있어서
control에 따라서 최종 출력을 선택하기 때문이다.
또한 덧셈(00)과 뺄셈(01)에서는
가산기 로직과 감산기 로직을 따로 만들 필요 없이
control[0]을 자리올림수인 Cin에도 넣고,
가산기에 두 번째 입력인 b는
그냥 b (0)와 1의 보수를 취한 ~b (1)중에서 고르는 mux를 하나 추가하면
control[0]만으로 덧셈과 뺄셈을 모두 실행할 수 있게 된다.
control[0] = 0이면 Cin = 0이고 b가 선택 => a + b
control[0] = 1이면 Cin = 1이고 ~b가 선택 => a + ~b + 1
결과적으로 뺄셈일 경우 a + "2의 보수를 취한 b"이므로
뺄셈이 된다.
정리하자면,
Concatenation과 Replication은 각각 신호 연결과 반복 복제,
Multiplexer는 2^n개 입력 중 Select를 기반으로 1개 선택
Decoder는 n-bit 입력을 기반으로 2^n개 출력 중 1개 선택
Half Adder는 자리올림 없는 한 자릿수 덧셈
Full Adder는 자리올림 있는 한 자릿수 덧셈
ALU는 CPU에서의 명령어에 따라 산술/논리연산
위 모듈들은 CPU를 설계할 때 꼭 사용되는 하드웨어들이니
꼭 잘 알아두는 게 좋겠죠?
다음 글에서는...
... 순차논리회로 심화버전 + flip-flop에 대해 알아본다
이번 글은 좀 길었는데
이해 안 되는 내용이나 피드백은 댓글로 남겨주세요!
그럼 이만~
* 글을 작성할 때 고려대학교 서태원 교수님의 저서
<원리부터 설계까지 컴퓨터구조 - RISC-V 중심으로>를 참고했습니다. *
'Hardware' 카테고리의 다른 글
메모리 계층 구조와 캐시 & 레지스터에 대하여 – 하드웨어 시리즈 #4 (0) | 2023.02.19 |
---|---|
순차회로, 클럭, 플립플롭 - 넌 누구니? – 하드웨어 시리즈 #3 (0) | 2023.02.15 |
조합회로는 뭐고 순차회로는 대체 뭘까 – 하드웨어 시리즈 #1 (0) | 2023.02.12 |