조합 논리회로 & 순차 논리회로
조합 논리회로
- 출력신호가 입력신호에 의해서만 결정됨
- 기본적인 논리회로인 논리곱(AND) - 논리합(OR) - 논리부정(NOT) 등의 기본적인 논리소자의 조합으로 만들어짐
- 플립플롭과 같은 기억소자는 포함하지 않음
- n개의 입력을 받아 2ⁿ개의 출력
- 가산기(Adder), 비교기(Comparator), 디코더, 인코더, 멀티플렉서, 디멀티플렉서, 코드변환기
순차 논리회로
- 출력신호는 입력신호뿐만 아니라 이전 상태의 논리값에 의해 결정
- 조합 논리회로와 기억소자로 구성되며, 기억소자가 궤환을 형성
- 기억소자는 2진 정보를 저장할 수 있는 장치로 플립플롭을 사용
- 동기식 순차 논리회로
- Synchronous Sequential Logic Circuit
- 클록 펄스가 들어오는 시점에서 상태가 변화하는 회로
- 비동기식 순차 논리회로
- Asynchronous Sequential Logic Circuit
- 클록펄스에 영향을 받지 않고 현재 입력되는 입력 값이 변화하는 순서에 따라 동작하는 논리회로
조합 논리회로
가산기
- 두 개 이상의 입력을 이용하여 이들의 합을 출력하는 조합 논리회로
- 반가산기·전가산기·병렬 가산기가 있음
반가산기
- Half Adder
- 1비트씩을 사용하는 두 개의 입력과 두 개의 출력으로 합(sum)과 자리 올림(carry)이 사용됨
- S = A'B + AB' = A ⊕ B
- C = A · B
입력 | 출력 | ||
A | B | S | C |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
전가산기
- Full Adder
- 반가산기는 한 자리 2진수 2개를 입력하여 덧셈하기 때문에 하위 비트에서 발생하는 자리 올림을 고려하지 않음
- 두 입력, 2진수 A와 V, 하위비트에서 발생한 자리 올림수를 포함하여 2진수 3개를 덧셈 연산하는 조합 논리회로
- 반가산기 2개와 OR 게이트를 이용하여 구성
- S = (A ⊕ B) ⊕ Cᵢₙ
- Cₒᵤₜ = Cᵢₙ(A ⊕ B) ⊕ AB
입력 | 출력 | |||
A | B | Cᵢₙ | S | Cₒᵤₜ |
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 |
병렬 가산기
- Binary Parallel Adder
- 전가산기를 병렬로 연결하면 여러 비트로 구성된 2진수의 덧셈 연산을 수행할 수 있음
- 4개의 전가산기를 병렬로 연결해서 4비트의 2진수 덧셈을 수행
감산기
- 두 개 이상의 입력에서 하나 입력으로부터 나머지 입력들을 뺄셈해서 그 차를 출력하는 조합 논리회로
- 가산기에서의 합은 감산기에서 차가 됨
- 가산기에서는 올림수가 발생했지만 감산기에서는 빌림수(borrow)가 발생
반감산기
- Half Subtractor
- 1비트 길이를 갖는 두 개의 입력과 1비트 길이를 갖는 두 개의 출력으로 차(D)와 빌림수(Bᵣ)가 존재
- 두 입력 간의 뺄셈으로 얻은 결과가 출력에서 차가 됨
- 차가 음의 값을 갖는 경우 출력에서 빌림수가 활성화 됨
- 두 개의 입력 변수 A와 B에서 4가지의 뺄셈 계산이 가능
- Bᵣ = A'B
- D = A'B + AB' = A ⊕ B
입력 | 출력 | ||
A | B | Bᵣ | D |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 0 | 0 |
전감산기
- Full Subtractor
- 반감산기에 추가적으로 아랫자리(하위 비트)에서 요구하는 빌림수에 의한 뺄셈까지도 수행
입력 | 출력 | |||
A | B | Bᵣ₀ | S | Bᵣ |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 |
병렬 가감산기
- 디지털 장치에서는 별도로 감산기를 사용하지 않고, 가산기에 게이트를 추가해 부호 선택신호로 뺄셈 연산을 수행
비교기
- Comparator
- 두 2진수의 크기를 비교하는 회로
- 비교를 통해 생성되는 결과는 4가지가 존재
- A > B
- A < B
- A = B
- A ≠ B
인코더 & 디코더
- 인코딩
- 정보의 형태나 형식을 표준화·보안·처리속도 향상·저장공간 절약 등의 목적으로 다른 형태나 형식으로 변환하는 방식
- 부호화
- 변환장치
- 디코딩
- 인코딩된 정보를 인코딩되기 전으로 되돌리는 처리 방식
- 복호기 또는 디코더는 복호화를 수행하는 장치나 회로
인코더
- 외부에서 들어오는 임의의 신호를 부호화된 신호로 변환하여 컴퓨터 내부로 들여보내는 조합 논리회로
- 문자·숫자·기호 등을 2진 부호로 변환시킬 때 사용
- 2ⁿ개의 입력신호로부터 n개의 출력신호 생성 (2ⁿ × n 인코더)
- 오직 한 비트만이 1, 나머지 (2ⁿ-1)개의 비트는 0이 되는 입력 신호 생성
- 활성화된 값 1이 몇 번째 위치의 비트인가를 파악해서 2진 정보로 출력
디코더
- n비트의 2진 코드를 최대 2n가지의 정보로 바꿔주는 조합 논리회로
- 지정된 비트조합(코드)이 입력되는가를 검출하여 그 코드의 존재를 지정된 출력 레벨로 표현하는 디지털 회로
- n비트의 입력으로 2ⁿ개의 출력 중 하나를 1로 설정하도록 하는 회로
- ROM·RAM과 같은 기억 장치에서 특정한 번지를 선택하거나 명령 레지스터에 들어온 명령을 해독하는 데 사용
멀티플렉서 & 디멀티플렉서
멀티플렉서
- 여러 개의 입력 중 하나의 입력만을 출력에 전달해주는 조합 논리회로
- 선택 신호에 의해 여러 개의 입력 중 하나의 입력만이 선택됨
- 다중 입력 데이터를 단일 출력하므로 데이터 선택기(data selector)라고도 함
- n개의 입력이 있는 경우 log₂n개 만큼의 선택 신호 필요
디멀티플렉서
- 하나의 입력을 선택 선을 통해 여러 개의 출력 선 중 하나만 골라서 출력하는 장치
- 멀티플렉서의 역기능을 수행하는 조합 논리회로
패리티 검사기
- 패리티 비트: 데이터 전송과정에서 오류 검사를 위해 추가한 비트
- 짝수(even) 패리티 비트: 데이터에서 1의 개수를 짝수로 맞추기 위해 사용하는 비트
- 홀수(odd) 패리티 비트: 데이터에서 1의 개수를 홀수로 맞추기 위해 사용하는 비트
순차 논리회로
- 조합 논리회로 부분과 기억 소자(플립플롭)으로 구성
- 기억 소자 부분은 조합 논리회로 부분으로 궤환되어 2진 정보를 저장
레지스터
- 플립플롭 여러 개를 일렬로 배열하고 적당히 연결하여 구성
- 여러 비트의 2진수를 일시적으로 저장하거나 저장된 비트를 좌측 또는 우측으로 하나씩 이동(shift)할 때 사용
이동 레지스터
- 데이터를 좌우로 이동시키는 레지스터
- 직렬 입력·병렬 출력과 병렬 입력·직렬 출력 형태를 포함하여 직렬과 병렬의 입출력 조합을 가짐
- 양방향성 이동 레지스터·순환 레지스터도 있음
- 병렬방식: 모든 비트 한 번에 전송, 전송 속도 빠름, 구조 복잡
- 직렬방식: 한 비트씩 전송, 전송 속도 느림, 구조 간단
- 용도: 순환 시프트(로테이트), 산술 시프트, 논리 시프트, 직/병렬 변환
직렬 입력 - 직렬 출력 이동 레지스터 (SISO)
- 가장 간단한 종류의 이동 레지스터
- 단일 선으로 한 번에 한 비트씩 데이터를 받아들이고, 저장된 정보를 직렬로 출력
- 클록 펄스는 데이터를 이동시키는 제어 신호로, 클록 펄스가 이동 레지스터에 입력될 때마다 이동 레지스터에 저장되어 있는 데이터가 출력
직렬 입력 - 병렬 출력 이동 레지스터 (SIPO)
- 입력 데이터 비트는 직렬로 레지스터 내에 들어감
- 출력 비트들은 레지스터의 각 단에서 출력되어 병렬 형태가 됨
- 직렬 출력처럼 한 비트씩 출력되지 않고 모든 비트가 동시에 각각의 플립플롭 출력선을 타고 출력
병렬 입력 - 직렬 출력 이동 레지스터 (PISO)
- 각 플립플롭 단에 병렬로 동시에 입력
- 첫 플립플롭에서는 하나의 입력(Load)만이 존재
- 그 이후의 플립플롭에서는 이전 플립플롭의 출력(Shift)과 새로운 입력이 존재
- 레지스터는 이 두 종류 입력에 대한 선택적인 판단 필요(2×1 멀티플렉서)
병렬 입력 - 병렬 출력 이동 레지스터 (PIPO)
- 데이터 비트들이 동시에 입력되면 클록 펄스에 의해 바로 병렬 출력이 나타남
- 다중 비트를 저장하는 기억장치로도 사용 가능
재순환 이동 레지스터
- 출력되는 데이터가 다시 처음으로 입력되는 레지스터
- 데이터의 순서/위치를 바꿀 때 사용
양방향 이동 레지스터
- 좌측/우측 방향으로 데이터를 이동시킬 수 있음
- 이동 방향을 결정하는 제어입력의 회로는 2×1 멀티플렉서
- 2진수의 연산에서 비트의 이동은 2배수의 곱셈과 나눗셈 연산을 수행 → 2진수의 곱셈 & 나눗셈 연산
- 좌측으로 이동하면 2를 곱한 결과가 되고, 우측으로 이동하면 2를 나눈 결과와 같음
카운터(계수기)
- 클록 펄스에 따라 수를 세는 계수능력을 갖는 논리회로
- 컴퓨터가 여러 가지 동작을 수행하는 데 필요한 타이밍 신호를 제공
- 비트 수에 따라서 최대 카운트가 결정
- 카운터 계수: 카운트를 시작해서 카운트를 끝낸 후, 다시 처음 상태로 돌아올 때까지의 상태 수
- ex. 10진 카운터 → 0~9까지 10개의 상태 존재 → 카운터 계수 10
- 카운터에서 구별되는 상태의 수가 m일 때 modulo-m(mod-m, m진) 카운터라고 함
동기식 카운터
- 입력 펄스와 입력 시간에 동기되어 각 플립플롭이 동시에 동작
- 모든 플립플롭의 단에서 상태변화가 일어남
- 전파 지연 문제가 적어 고속 동작에 적합
- 회로가 비동기식보다 복잡할 수 있음
비동기식 카운터
- 앞단의 출력을 받아서 각 플립플롭이 차례로 동작하기 때문에 첫 단에만 클록 펄스가 필요
- 직렬 카운터, 리플(ripple) 카운터
- 회로 구성이 간단하지만 전파 지연이 누적되어 고속 동작에 부적합
- 글리치 현상이 발생할 수 있음
링 카운터
- 플립플롭들이 하나의 고리 모양으로 연결
- 시프트 레지스터의 최종 출력이 입력으로 피드백되는 구조
- 한 번에 하나의 플립플롭만 1의 상태를 가짐
- 상태 수는 플립플롭 개수와 동일
- 각 상태마다 고유한 출력이 있어 디코딩이 불필요