본문으로 건너뛰기

버그 제보

이상한 점을 알려 주시면 고칠게요. 지금 보고 있는 페이지와 브라우저 정보가 함께 담겨요.

페이지:

Computer Science

디지털 논리 회로와 부품

작성 2026. 10. 20.추가
목차47개 항목
출처와 참고

「왜 2진인가」, 「추상화 계층」, 「트랜지스터로 게이트 만들기」, 「래치」, 「메모리 셀을 행렬로 배치하는 이유」 절은 CrashCourse의 「Crash Course Computer Science」 강의를 바탕으로 보강했다. 부울 대수의 흡수·합의 법칙과 정규형, NAND·NOR 구현, 카르노 맵의 묶는 규칙과 무정의 조건 예, 조합 회로 부품 활용(BCD 가산기·비교기·디코더·MUX로 함수 만들기·우선순위 인코더·코드 변환기·패리티), 플립플롭 특성식과 여기표, 「멀티바이브레이터와 타이머」, 순차 회로 설계 절차와 예제, 「레지스터와 시프트 레지스터」, 「카운터」, 「게이트의 전기적 특성」, 「프로그래머블 논리 소자」, 논리군의 74 시리즈 설명은 고려사이버대학교 「디지털논리설계」(2024-2학기) 강의 내용으로 보강했다.

컴퓨터의 모든 부품은 결국 0과 1을 다루는 논리 회로로 만들어진다. 논리 게이트로 덧셈 회로를 만들고, 플립플롭으로 값을 기억하는 회로를 만들면 레지스터·메모리·CPU로 확장할 수 있다. 이 노트는 게이트와 부울 대수에서 출발해 디코더·MUX 같은 조합 부품과 그것으로 함수를 만드는 법, 플립플롭으로 순차 회로를 설계하는 절차, 레지스터·카운터 같은 순차 부품, RAM·ROM과 집적회로까지 다룬다.

디지털 컴퓨터

이진 시스템으로 계산을 수행하는 디지털 시스템이다. 비트의 묶음으로 숫자, 문자 등 모든 정보를 표현하고 처리한다.

구분구성
하드웨어CPU(산술·논리 연산, 데이터 저장, 제어. 사실상 컴퓨터 그 자체), 메모리(RAM/ROM), 저장 장치, 입출력 장치
소프트웨어운영체제, 시스템 프로그램(유틸리티, DB, 편집기 등. OS에 포함되거나 연결되어 시스템 운영을 보조), 응용 프로그램

왜 2진인가

트랜지스터는 전류를 켜고 끄는 것뿐 아니라 여러 단계의 전류 세기도 만들 수 있다. 실제로 3진(ternary)·5진을 쓴 초기 전자식 컴퓨터도 있었다. 하지만 상태가 많을수록 상태 사이의 전압 간격이 좁아진다. 전원 전압이 흔들리거나 주변 전기 잡음이 끼면 이웃한 상태와 헷갈리고, 초당 수십억 번 상태를 바꾸는 회로에서는 이 문제가 더 커진다. 켜짐과 꺼짐 두 상태만 쓰면 두 신호를 가장 멀리 떨어뜨릴 수 있어 잡음에 강하다. 또 참·거짓 두 값만 다루는 수학인 부울 대수가 이미 완성되어 있어, 회로 설계에 그 규칙을 그대로 쓸 수 있었다.

추상화 계층

컴퓨터는 아래 층을 상자로 감싸 위 층의 부품으로 쓰는 방식으로 쌓아 올린다.

flowchart LR
  t["트랜지스터"] --> g["논리 게이트"] --> c["가산기·래치·MUX"] --> a["ALU·레지스터·RAM"] --> cpu["CPU"] --> p["명령어·프로그램"]

한 층을 상자로 감싸면 그 안의 수많은 트랜지스터와 배선을 잊고 입력·출력만 생각하면 된다. 프로세서 설계자도 트랜지스터 수준이 아니라 게이트나 더 큰 블록 수준에서 일한다. 복잡도를 감당할 수 있는 이유가 이 계층이다.

논리 게이트

불 대수에 따라 하나 이상의 입력을 받아 하나의 논리 출력을 내는 가장 기초적인 회로다. 이진 정보는 전압으로 표현한다(예: 0V5V 시스템, 0.5V3V 시스템). 각 게이트의 동작은 진리표로 정의한다.

게이트식출력이 1인 경우
ANDx · y모두 1
ORx + y하나라도 1
NOTx'입력이 0
Bufferx입력이 1 (신호 증폭·지연용)
NAND(x · y)'AND의 반대
NOR(x + y)'OR의 반대
XORx ⊕ y두 입력이 다를 때
XNOR(x ⊕ y)'두 입력이 같을 때

트랜지스터로 게이트 만들기

트랜지스터는 전기로 여닫는 스위치다. 전극 두 개와 제어선 하나가 있고, 제어선에 전압을 걸면 두 전극 사이로 전류가 흐른다. 제어선을 입력, 전류가 나가는 쪽을 출력으로 보면 스위치 배치만으로 기본 게이트가 된다.

게이트배치동작
NOT출력선을 트랜지스터 앞에서 뽑고, 트랜지스터 뒤는 접지(ground)에 잇는다입력이 켜지면 전류가 접지로 빠져 출력이 꺼지고, 입력이 꺼지면 전류가 출력으로 간다
AND트랜지스터 두 개를 직렬로 잇는다둘 다 켜져야 전류가 끝까지 지나간다
OR트랜지스터 두 개를 병렬로 잇는다어느 한쪽만 켜져도 전류가 지나간다

이 표는 원리를 보인 모형이다. 실제 칩의 CMOS 회로는 서로 반대로 동작하는 트랜지스터 쌍으로 만들고, NAND·NOR가 가장 적은 트랜지스터로 만들어진다. AND는 NAND 뒤에 NOT을 붙여 만든다.

게이트가 생기면 트랜지스터를 잊고 게이트끼리 조합한다. XOR는 「OR이지만 둘 다 참이면 거짓」이므로 OR의 결과에서 「둘 다 참」인 경우만 빼면 된다.

A ⊕ B = (A + B) · (A · B)'      OR 게이트, AND 뒤에 NOT, 마지막 AND

NAND·NOR만으로 만들기

NAND 하나로 NOT, AND, OR를 모두 만들 수 있어 범용 게이트라 부른다. NOR도 마찬가지다.

NOT A   = (A·A)'
A·B     = ((A·B)')'                  NAND 뒤에 NAND-인버터
A + B   = (A'·B')'                   드 모르간: 입력을 각각 반전한 뒤 NAND

칩 하나에 같은 게이트가 여러 개 들어 있으므로 종류를 하나로 통일하면 부품 수가 준다. CMOS에서 트랜지스터가 가장 적게 드는 것도 NAND·NOR다. 곱의 합(SOP, 아래 「정규형」)은 2단 NAND로 바로 옮겨진다. AND-OR 회로의 모든 게이트를 NAND로 바꾸면 가운데 반전 두 번이 상쇄되기 때문이다. 같은 이유로 합의 곱(POS)은 2단 NOR로 옮겨진다.

F = AB + CD = ((AB)' · (CD)')'      1단: NAND(A,B), NAND(C,D)   2단: 둘을 NAND

부울 대수

참(1)과 거짓(0) 두 값만 다루는 대수로, 기본 연산은 AND, OR, NOT이다. 예: F = x + y'z

쓰는 이유

  • 변수 사이의 진리표 관계를 대수식으로 표현
  • 논리도(회로도)의 입출력 관계를 식으로 표현
  • 같은 기능을 하는 더 간단한 회로를 찾기 위해

기본 법칙: 항등원·역원(x + 0 = x, x + x' = 1, x · 1 = x, x · x' = 0), 멱등(x + x = x, x · x = x), 지배(x + 1 = 1, x · 0 = 0), 이중 부정(x'' = x), 교환·결합·분배 법칙, 드 모르간의 법칙

드 모르간:  (x + y)' = x' · y'
            (x · y)' = x' + y'

보통 대수와 달리 OR가 AND에 대해서도 분배된다. 간소화에서 자주 쓰는 정리는 대부분 여기서 나온다.

법칙식쓰임
OR의 분배A + BC = (A + B)(A + C)SOP ↔ POS 변환. A + A'B = (A + A')(A + B) = A + B
흡수A + AB = A, A(A + B) = A더 큰 항에 포함된 항을 지운다
합의(consensus)AB + A'C + BC = AB + A'CBC는 앞 두 항이 이미 덮으므로 지운다. 쌍대: (A + B)(A' + C)(B + C) = (A + B)(A' + C)

각 법칙은 진리표로 모든 입력 조합을 대 보아 증명할 수 있다. 간소화가 곧 같은 기능을 더 적은 게이트로 만드는 일이다.

AB + A(B + C) + B(B + C)
  = AB + AB + AC + B + BC     분배
  = AB + AC + B               멱등(AB + AB = AB), 흡수(B + BC = B)
  = B + AC                    흡수(B + AB = B)

간략화 예

F = ABC + ABC' + A'C
  = AB(C + C') + A'C
  = AB + A'C

보수 구하기: 드 모르간을 적용해 AND↔OR를 바꾸고 각 변수를 반전한다.

F  = AB + C'D' + B'D
F' = (A' + B')(C + D)(B + D')

정규형: 최소항과 최대항

변수 n개의 입력 조합에 번호(0 ~ 2ⁿ−1)를 매기면, 함수는 출력이 1인 번호의 목록이나 0인 번호의 목록으로 적을 수 있다.

형식이루는 항쓰는 법
곱의 합(SOP), 최소항 정규형출력이 1인 조합마다 모든 변수가 들어간 곱항(최소항 mᵢ)F = Σm(…)
합의 곱(POS), 최대항 정규형출력이 0인 조합마다 모든 변수가 들어간 합항(최대항 Mᵢ)F = ΠM(…)

최소항은 해당 조합에서만 1이 되도록 변수가 0인 자리에 보수를 붙이고(조합 101 → AB'C), 최대항은 해당 조합에서만 0이 되도록 변수가 1인 자리에 보수를 붙인다(조합 101 → A'+B+C'). 두 목록은 서로 여집합이다.

3입력 홀수 패리티 (1의 개수가 홀수면 1)
F(A,B,C) = Σm(1, 2, 4, 7) = ΠM(0, 3, 5, 6) = A ⊕ B ⊕ C

카르노 맵 (Karnaugh Map)

부울 함수를 표 형태의 그림으로 그려 인접한 1들을 묶어 간소화하는 방법이다(Veitch diagram이라고도 함). 진리표에서 출력이 1인 항(minterm)이나 0인 항(maxterm)을 이용한다. 법칙을 능숙하게 다루지 못해도 기계적으로 최소식을 찾을 수 있다는 것이 장점이다.

칸의 순서는 00 01 11 10처럼 그레이 코드로 매긴다. 그래서 이웃한 칸은 변수 하나만 다르고, 표의 왼쪽 끝과 오른쪽 끝, 위쪽 끝과 아래쪽 끝도 서로 이웃이다(지도를 원통처럼 말았다고 본다). 최소항·최대항과 Σm·ΠM 표기는 위 「정규형」에 있다.

묶는 규칙

  1. 같은 값(1 또는 0)인 칸을 1, 2, 4, 8, 16개처럼 2의 거듭제곱 개로 묶는다.
  2. 이웃한 칸끼리만, 직사각형(정사각형 포함) 모양으로 묶는다.
  3. 묶음은 최대한 크게, 묶음의 수는 최대한 적게 한다. 더 크게 묶을 수 있으면 이미 묶인 칸을 겹쳐 써도 된다.
  4. 모든 1(또는 0)이 적어도 한 묶음에 들어가야 한다. 다른 묶음에 모두 포함된 칸만으로 이뤄진 묶음은 만들지 않는다.

식으로 읽기: 묶음 하나가 항 하나가 된다. 묶음 안에서 0과 1이 모두 나오는 변수는 지우고, 값이 일정한 변수만 남긴다. 1의 묶음은 곱항으로 읽어 더하고(최소 SOP), 0의 묶음은 합항으로 읽어 곱한다(최소 POS). 칸 2ⁿ개 묶음은 변수 n개를 지운다.

F(A, B, C)    = Σ(3, 4, 6, 7)             = BC + AC'
F(A, B, C, D) = Σ(0, 1, 2, 6, 8, 9, 10)   = B'D' + B'C' + A'CD'
  • 곱의 합(SOP): 1인 칸을 묶어 간소화
  • 합의 곱(POS): 0인 칸을 묶어 간소화. 두 결과는 동치다.
  • 무정의 조건(don't care): 절대 나오지 않는 입력 조합이거나 출력이 무엇이든 상관없는 조합이다. 지도에 x나 d로 적고, 묶음이 커지는 쪽으로 0이든 1이든 골라 쓴다.
F(A, B, C) = Σ(0, 2, 6),  d(A, B, C) = Σ(1, 3, 5)
→ F = A' + BC'
 
F(A, B, C, D) = Σm(7, 8, 9) + Σd(0, 10, 11, 12, 13, 14, 15)
  무정의 조건을 안 쓰면  F = AB'C' + A'BCD
  쓰면                  F = A + BCD

카르노 맵은 변수 5개 정도까지 쓸 수 있지만 보통 4개까지가 실용적이다. 변수가 많거나 컴퓨터로 최적화할 때는 표를 만들어 항을 체계적으로 합치는 퀸-매클러스키(Quine-McCluskey) 방법이나 휴리스틱인 에스프레소(Espresso) 알고리즘을 쓴다. 논리 합성 도구가 하는 일이 이것이다.

조합 회로

출력이 현재 입력의 조합만으로 결정되는 회로다. 입력이 n개면 가능한 입력 조합은 2ⁿ가지다.

설계 절차

  1. 해결할 문제 정의
  2. 입력·출력 변수에 기호 부여
  3. 입출력 관계를 진리표로 도출
  4. 각 출력의 간소화된 부울 함수 도출
  5. 논리도 작성
  6. 회로 구현

반가산기와 전가산기

반가산기(Half Adder)는 두 비트를 더하고, 전가산기(Full Adder)는 아랫자리에서 올라온 캐리 z까지 세 비트를 더한다. 전가산기는 반가산기 2개와 OR 게이트로 만들 수 있다.

반가산기  S = x ⊕ y          C = x · y          ← C는 다음 자리로 올라가는 값
전가산기  S = x ⊕ y ⊕ z      C = xy + (x ⊕ y)z

전가산기를 여러 개 이으면 n비트 덧셈기가 된다. 반감산기(D = A ⊕ B, 빌림 = A'B)와 전감산기도 있지만, 실제 회로는 감산기를 따로 두지 않고 B를 반전하고 첫 캐리에 1을 넣어 2의 보수를 더한다. 가산기 하나로 덧셈과 뺄셈을 하는 감가산기는 레지스터 전송과 마이크로 연산에 있다.

BCD 가산기

BCD는 10진 한 자리를 4비트(0000~1001)로 적는다. 4비트 2진 가산기로 두 자리를 더해 결과가 9를 넘으면 BCD가 아닌 값이 나오는데, 이때 6(0110)을 더하면 바로잡힌다. 4비트가 표현하는 16과 10진 자리올림 10의 차이가 6이기 때문이다.

보정 조건: 2진 합의 캐리 K = 1, 또는 합 Z₈Z₄Z₂Z₁이 1010~1111
         C = K + Z₈Z₄ + Z₈Z₂          (C가 곧 윗자리로 넘기는 10진 캐리)
 
예) 7 + 5 :  0111 + 0101 = 1100 (12, BCD로는 잘못된 값)
            1100 + 0110 = 1 0010  → 자리올림 1, 아랫자리 2 = "12"

십진 산술 전체는 컴퓨터 산술 연산에 있다.

크기 비교기

두 n비트 수 A, B의 대소를 비교한다. 자리마다 같은지를 XNOR로 구하고(xᵢ = AᵢBᵢ + Aᵢ'Bᵢ'), 윗자리부터 처음 다른 자리에서 판가름한다.

4비트 비교기
(A = B) = x₃ x₂ x₁ x₀
(A > B) = A₃B₃' + x₃A₂B₂' + x₃x₂A₁B₁' + x₃x₂x₁A₀B₀'
(A < B) = A₃'B₃ + x₃A₂'B₂ + x₃x₂A₁'B₁ + x₃x₂x₁A₀'B₀

7485 같은 비교기 칩은 아랫자리 칩의 결과(A>B, A=B, A<B)를 받는 단자가 있어, 여러 개를 이으면 8비트, 16비트 비교기가 된다.

디코더와 인코더

  • 디코더: N비트 입력을 받아 2^N개의 출력 중 딱 하나만 활성화한다. 2×4, 3×8 디코더 등. Enable 신호가 꺼져 있으면 동작하지 않는다.
    • NAND 게이트로 만든 디코더는 출력이 반전(active-low)되며, AND로 만드는 것보다 경제적이다.
    • Enable로 크기를 키운다. 2×4 디코더 두 개에 최상위 비트를 Enable로 나눠 주면(한쪽은 그대로, 한쪽은 반전) 3×8 디코더가 된다.
  • 인코더: 디코더의 반대. 2^N개 입력 중 1인 하나의 위치를 N비트 코드로 출력한다(한 번에 하나만 1이라고 가정).

디코더로 함수 만들기: n×2ⁿ 디코더는 입력 조합마다 출력 하나를 켜므로 출력 하나하나가 최소항이다. 원하는 최소항 출력만 OR로 모으면 어떤 n변수 함수든 만들어진다. 출력이 여러 개인 함수에서 특히 유리하다. active-low 디코더라면 OR 대신 NAND로 모은다.

전가산기를 3×8 디코더 + OR 2개로 (입력 x, y, z)
S = Σm(1, 2, 4, 7)   → 디코더 출력 1, 2, 4, 7을 OR
C = Σm(3, 5, 6, 7)   → 디코더 출력 3, 5, 6, 7을 OR

우선순위 인코더

일반 인코더는 둘 이상이 동시에 1이면 엉뚱한 번호를 낸다. 우선순위 인코더는 1인 입력 중 번호가 가장 큰(정해진 우선순위가 가장 높은) 것의 번호를 내고, 입력이 하나라도 있는지 알리는 유효 비트 V를 함께 낸다.

D₃D₂D₁D₀Y₁Y₀V
0000xx0
0001001
001x011
01xx101
1xxx111

여러 장치가 동시에 인터럽트를 걸 때 가장 급한 것을 고르는 회로가 이것이다(입출력 구조). 키보드의 10키를 BCD로 바꾸는 74147이 대표적인 칩이다.

멀티플렉서 (MUX)와 디멀티플렉서

  • N개의 선택 신호로 2^N개의 입력 중 하나를 골라 출력에 연결한다.
    • 4×1 MUX: 선택 입력 S0, S1로 I0~I3 중 하나를 선택
  • "여러 입력 중 하나를 골라 연결"하는 구조라 전화 교환기, 네트워크 스위치 같은 장비의 기본 요소가 된다.

MUX로 함수 만들기: 변수 n개짜리 함수는 2ⁿ⁻¹×1 MUX 하나로 만들 수 있다. 변수 n−1개를 선택선에 넣고, 남은 변수 하나에 대해 각 데이터 입력에 0, 1, 그 변수, 그 변수의 보수 중 하나를 연결한다. 게이트를 여러 개 배선하는 것보다 칩 하나와 인버터 하나로 끝나므로, 함수가 자주 바뀌는 회로나 FPGA의 기본 셀(LUT)이 이 원리를 쓴다.

F(A,B,C) = Σm(1, 2, 4, 7) 을 4×1 MUX로 (선택선 S₁S₀ = AB)
 
AB = 00 : m0(C=0)→0, m1(C=1)→1   → I₀ = C
AB = 01 : m2(C=0)→1, m3(C=1)→0   → I₁ = C'
AB = 10 : m4(C=0)→1, m5(C=1)→0   → I₂ = C'
AB = 11 : m6(C=0)→0, m7(C=1)→1   → I₃ = C

디멀티플렉서(DEMUX) 는 MUX의 반대로, 입력 하나를 선택선이 가리키는 출력 2ⁿ개 중 하나로 보낸다. 회로는 Enable 있는 디코더와 같다. Enable 단자에 데이터를 넣으면 선택된 출력만 데이터를 따라가므로, 칩 이름도 "디코더/디멀티플렉서"로 함께 붙는다. 한 선으로 여러 신호를 시간을 나눠 보내고(MUX) 받는 쪽에서 다시 나누는(DEMUX) 시분할 다중화에 쓰인다.

코드 변환기

  • 2진 ↔ 그레이 코드: 이웃한 수 사이에 한 비트만 바뀌는 그레이 코드(데이터의 표현)는 XOR만으로 변환된다. 2진 → 그레이는 최상위 비트를 그대로 두고 Gᵢ = Bᵢ₊₁ ⊕ Bᵢ, 그레이 → 2진은 Bᵢ = Bᵢ₊₁ ⊕ Gᵢ로 윗자리 결과를 이어 쓴다. 예: 2진 0110 → 그레이 0101.
  • BCD → 7세그먼트: 숫자 표시기의 막대 ag를 켜고 끄는, 입력 4비트·출력 7개인 회로다. 출력마다 카르노 맵으로 식을 만들고, 나오지 않는 10101111은 무정의 조건으로 쓴다. 공통 단자가 양극(애노드)인 표시기는 막대를 0으로 켜므로 출력이 반전된 드라이버(7447)를, 공통 음극(캐소드)이면 1로 켜는 드라이버(7448)를 쓴다.

패리티 발생기와 검사기

XOR는 "1의 개수가 홀수면 1"이므로 XOR 사슬이 곧 패리티 회로다. 짝수 패리티라면 발생기는 P = A ⊕ B ⊕ C, 검사기는 E = A ⊕ B ⊕ C ⊕ P(E = 1이면 오류)다. 두 비트가 함께 뒤집히면 잡지 못하는 한계와 위치까지 고치는 해밍 코드는 데이터의 표현에 있다.

래치 (Latch)

조합 회로는 신호가 한 방향으로만 흐른다. 출력을 다시 입력으로 되먹이면(feedback) 회로가 자기 상태를 붙잡아 값을 기억한다.

되먹임 회로동작한계
OR 출력 → OR 입력다른 입력을 한 번 1로 올리면 출력 1이 되먹임되어, 입력을 0으로 내려도 1이 유지된다0으로 되돌릴 수 없다
AND 출력 → AND 입력다른 입력을 한 번 0으로 내리면 출력 0이 유지된다1로 되돌릴 수 없다

둘을 합치면 1로 만드는 set 입력과 0으로 만드는 reset 입력을 가진 SR 래치(AND-OR 래치)가 된다. set과 reset이 모두 0이면 마지막 값을 그대로 낸다. 값에 「걸려(latch) 멈춰 있다」는 뜻의 이름이다.

set·reset을 따로 다루기는 불편하다. 게이트를 몇 개 더해 입력을 「저장할 값」과 「쓰기 허용」으로 바꾼 것이 게이트 래치(gated latch, D 래치)다.

입력역할
Data저장할 값(0 또는 1)
Write Enable1일 때만 Data를 받아들인다. 0이면 Data를 아무리 바꿔도 저장된 값이 그대로다

Write Enable을 1로 올려 값을 넣고 0으로 내리면 그 값이 잠긴다. 메모리에 값을 넣는 것을 쓰기(write), 꺼내는 것을 읽기(read)라 한다. 래치 8개를 나란히 두고 Write Enable 선 하나를 함께 연결하면 8비트 값을 한 번에 쓰는 레지스터가 된다.

래치는 Enable이 켜져 있는 동안 내내 입력을 따라간다(레벨 트리거). 클럭 에지 한 순간에만 값을 받도록 만든 것이 아래의 플립플롭이다.

플립플롭 (Flip-Flop)

1비트를 저장하는 이진 셀이다. 입력이 상태를 바꾸기 전까지 이전 출력을 그대로 유지하므로 값을 기억하는 것처럼 동작하며, 클럭에 동기화되어 움직인다. 동기식 순차 회로의 기본 요소다.

설계에서는 플립플롭을 두 방향으로 본다. 특성식은 입력이 주어졌을 때 다음 상태가 무엇인지(분석용), 여기표(excitation table)는 원하는 상태 변화를 만들려면 입력을 무엇으로 줘야 하는지(설계용)다.

종류입력동작특성식 Q(t+1)
SRS(set), R(reset), 클럭클럭 펄스가 들어올 때 S면 1, R이면 0. S와 R이 동시에 1이면 결과가 정의되지 않으므로 피해야 함S + R'Q
DD, 클럭클럭 펄스 때 D 값을 그대로 저장. 데이터 저장에 가장 편하다D
JKJ, K, 클럭SR과 같지만 J=K=1이면 현재 값을 반전JQ' + K'Q
TT, 클럭T=1이면 반전, 0이면 유지T ⊕ Q
Q(t) → Q(t+1)DTJ KS R
0 → 0000 x0 x
0 → 1111 x1 0
1 → 001x 10 1
1 → 110x 0x 0

JK 여기표에 x(무정의)가 많다. 0 → 1로 가려면 "세트(J=1, K=0)"든 "반전(J=1, K=1)"이든 되기 때문이다. x가 많을수록 카르노 맵에서 크게 묶이므로 JK로 설계하면 입력 회로가 단순해지는 경우가 많고, 카운터 설계에 JK나 T를 자주 쓰는 이유가 이것이다.

클럭과 상관없이 즉시 Q를 1로 만드는 프리셋(PR) 과 0으로 만드는 클리어(CLR) 비동기 입력도 있다. 전원을 켰을 때 회로를 알려진 상태로 맞추는 데 쓰고, 둘을 동시에 걸면 안 된다.

에지 트리거 플립플롭

클럭 신호의 변화 순간(모서리) 에만 동작한다.

  • 상승 에지(upward): 클럭이 0 → 1로 올라갈 때 출력이 바뀜
  • 하강 에지(downward): 클럭이 1 → 0으로 내려갈 때 출력이 바뀜

올바르게 동작하려면 입력이 에지 앞뒤로 일정 시간 안정돼 있어야 한다(아래 「타이밍과 최대 클럭 주파수」).

멀티바이브레이터와 타이머

출력이 HIGH와 LOW 두 값을 오가는 회로를 멀티바이브레이터라 하고, 안정 상태가 몇 개냐로 나눈다. 기억(플립플롭)과 박자(클럭)가 모두 여기서 나온다.

종류안정 상태동작쓰임
쌍안정(bistable)2개입력이 바꾸기 전까지 어느 쪽이든 유지래치, 플립플롭: 1비트 기억
단안정(monostable)1개트리거를 받으면 정해진 시간 동안만 다른 상태로 갔다가 돌아온다펄스 한 개 만들기, 스위치 떨림(바운스) 제거, 지연
무안정(astable)0개두 상태를 스스로 끝없이 오간다발진기(oscillator), 클럭 신호

슈미트 트리거는 입력이 올라갈 때와 내려갈 때의 기준 전압이 다른(히스테리시스) 회로다. 천천히 변하거나 잡음이 낀 신호가 기준 근처에서 흔들려도 출력이 여러 번 튀지 않는다. 슈미트 트리거 인버터(74LS14 등)의 출력을 저항으로 입력에 되돌리고 입력에 커패시터를 달면, 충전과 방전을 반복하는 무안정 발진기가 된다.

555 타이머는 비교기 두 개와 플립플롭 하나로 이뤄진 범용 타이머 칩이다. 커패시터 전압이 전원의 1/3 아래로 내려가면 출력을 켜고(Trigger), 2/3를 넘으면 끄고 커패시터를 방전한다(Threshold). 외부 저항과 커패시터 값으로 시간을 정한다.

단안정: 펄스 폭  T ≈ 1.1 · R · C          예) R = 100kΩ, C = 10µF → T ≈ 1.1초
무안정: 주파수   f ≈ 1.44 / ((R₁ + 2R₂) · C)

순차 회로

구분출력을 결정하는 것
조합 회로현재 입력
순차 회로현재 입력 + 이전 상태(이전 사이클의 결과)

순차 회로는 조합 회로에 기억 기능(플립플롭)을 더한 회로다. 플립플롭의 값(현재 상태)이 다시 조합 회로의 입력으로 들어가, 출력과 다음 상태가 현재 입력과 현재 상태로 정해진다. 클럭 펄스에 동기화된 입력 순서에 따라 제어되므로 입력 순서가 다르면 출력도 달라질 수 있다. 클럭으로 상태가 바뀌는 동기식과, 클럭 없이 바뀌는 비동기식이 있다.

flowchart LR
  x["입력 X"] --> comb["조합 회로"] --> y["출력 Y"]
  comb -->|"다음 상태"| ff["플립플롭"]
  clk["클럭"] --> ff
  ff -->|"현재 상태"| comb
  • 플립플롭 입력식: 플립플롭의 입력을 만들어 내는 조합 회로 부분을 부울식으로 표현한 것
  • 상태표(state table)·상태도(state diagram): 현재 상태와 입력에 따른 다음 상태·출력을 표와 그림으로 나타낸 것

타이밍과 최대 클럭 주파수

특성뜻
전파 지연(t_pd)클럭 에지(또는 PR·CLR)가 들어온 뒤 출력이 바뀔 때까지 걸리는 시간. 0→1(t_PLH)과 1→0(t_PHL)이 다를 수 있다
설정 시간(setup)클럭 에지 전에 입력이 안정돼 있어야 하는 최소 시간
유지 시간(hold)클럭 에지 후에도 입력이 바뀌지 않아야 하는 최소 시간
최소 펄스 폭클럭·PR·CLR 펄스가 최소한 유지돼야 하는 폭
최대 클럭 주파수위 조건을 모두 지키며 동작할 수 있는 가장 빠른 클럭

동기 회로 전체로 보면, 한 플립플롭의 출력이 조합 회로를 지나 다음 플립플롭의 입력에 도착하고 설정 시간까지 채우는 데 걸리는 시간이 클럭 주기보다 짧아야 한다.

클럭 주기 ≥ t_pd(플립플롭) + t_pd(조합 회로 최장 경로) + t_setup

CPU 클럭을 올리려면 이 최장 경로를 줄여야 하고, 파이프라인은 경로 중간에 레지스터를 넣어 한 단의 경로를 짧게 만드는 방법이다(파이프라인과 병렬 처리). 전력은 P = V × I로, 5V에서 20mA를 쓰는 소자 10개면 1W, 공급 전류는 200mA가 필요하다.

무어 머신과 밀리 머신

구분무어 머신(Moore)밀리 머신(Mealy)
출력현재 상태만의 함수현재 상태와 현재 입력의 함수
상태도 표기상태 원 안에 상태/출력화살표 위에 입력/출력
반응 시점상태가 바뀐 다음 클럭에 출력이 바뀐다입력이 바뀌면 같은 클럭 안에서 바로 바뀐다
상태 수대개 더 많다대개 더 적다
출력 안정성클럭에 맞춰 바뀌어 글리치가 적다입력의 잡음이 출력에 그대로 나올 수 있다

설계 절차

  1. 동작을 말로 정리하고 상태도를 그린다. 상태마다 모든 입력 값에 대해 어디로 가는지 빠짐없이 적는다.
  2. 플립플롭 개수와 종류를 정한다. 상태가 n개면 ⌈log₂n⌉개가 필요하다(5개면 3개).
  3. 상태에 2진 코드를 붙이고(상태 할당) 상태표를 만든다. 현재 상태와 입력을 입력 열로, 다음 상태와 출력을 출력 열로 둔다.
  4. 고른 플립플롭의 여기표로 각 행에 필요한 플립플롭 입력을 채운다.
  5. 플립플롭 입력과 회로 출력을 카르노 맵으로 간소화해 입력식·출력식을 얻는다. 쓰지 않는 상태 코드는 무정의 조건으로 쓴다.
  6. 회로를 그리고, 쓰지 않는 상태에서 시작해도 정상 상태로 돌아오는지 확인한다.

설계 예: 1이 두 번 이상 이어지면 1을 내는 검출기 (무어)

입력 X가 클럭마다 한 비트씩 들어오고, 최근 입력이 1, 1로 이어졌으면 출력 Y = 1이다.

상태의미X = 0일 때X = 1일 때출력 Y
S0직전 입력이 0(또는 시작)S0S10
S11이 하나 들어옴S0S20
S21이 두 번 이상 이어짐S0S21

상태 3개라 플립플롭 2개(A, B)가 필요하다. S0 = 00, S1 = 01, S2 = 10으로 할당하고 11은 쓰지 않는다.

A BXA⁺ B⁺YJ_A K_AJ_B K_B
0 000 000 x0 x
0 010 100 x1 x
0 100 000 xx 1
0 111 001 xx 1
1 000 01x 10 x
1 011 01x 00 x
1 1xx xxx xx x

D 플립플롭이면 입력이 곧 다음 상태(A⁺, B⁺ 열)이고, JK면 여기표로 오른쪽 두 열을 채운다. 11 행을 무정의로 쓰면 다음과 같다. JK 쪽이 x가 많아 식이 더 짧다.

D 플립플롭:   D_A = XA + XB     D_B = A'B'X
JK 플립플롭:  J_A = BX  K_A = X'     J_B = A'X  K_B = 1
출력:         Y = A             (무어: 출력이 상태만으로 정해진다)

D 설계에서 회로가 잡음 때문에 11에 들어가도 D_A = X, D_B = 0이라 다음 클럭에 10(S2)이나 00(S0)으로 빠져나온다. 갇히는 상태가 없다. 같은 검출기를 밀리 머신으로 만들면 "직전 입력이 0"과 "직전 입력이 1" 두 상태면 충분하다. 플립플롭 하나(D = X)에 출력 Y = X·Q로, 두 번째 1이 들어온 그 클럭에 바로 1이 나온다.

상태 할당

같은 상태도라도 코드를 어떻게 붙이느냐에 따라 입력식의 크기가 달라진다. 자주 오가는 상태끼리 한 비트만 다르게 붙이면(그레이 코드처럼) 식이 작아지는 경향이 있다. 상태마다 플립플롭 하나를 두는 원-핫(one-hot) 할당은 플립플롭이 많이 들지만 다음 상태 논리가 단순해서, 플립플롭이 넉넉한 FPGA에서 흔히 쓴다.

레지스터와 시프트 레지스터

플립플롭 N개와 조합 회로로 이루어진, N비트를 저장하는 장치를 레지스터라 한다. 담는 비트 수 N을 레지스터의 폭(width)이라 한다. 초기 마이크로프로세서는 8비트였고 16비트, 32비트를 거쳐 지금 PC·스마트폰 CPU의 범용 레지스터는 64비트다.

  • 클럭 펄스에 맞춰 입력값을 저장하고, 저장된 값은 출력에서 항상 읽을 수 있다.
  • 병렬 로드 레지스터: 여러 비트를 동시에 입력. 클럭이 와도 Load 신호가 1일 때만 값이 바뀐다. Clear 입력으로 초기화.
  • 여러 레지스터의 출력을 한 버스 선에 물릴 때는 출력을 선에서 떼어 내는 3-상태 버퍼를 쓴다(레지스터 전송과 마이크로 연산).

시프트 레지스터

플립플롭 출력을 다음 플립플롭의 D 입력에 이어, 클럭마다 저장된 비트가 한 칸씩 이동한다. 카운터와 달리 정해진 상태 순서가 없고, 들어온 데이터를 저장하고 옮기는 것이 목적이다.

종류입력 → 출력쓰임
SISO (직렬 입력·직렬 출력)한 비트씩 넣고 n클럭 뒤 한 비트씩 나온다디지털 지연선
SIPO (직렬 입력·병렬 출력)한 비트씩 넣고 n비트를 한꺼번에 읽는다직렬 → 병렬 변환. 74HC595로 마이크로컨트롤러 핀 3개로 출력 8개를 제어
PISO (병렬 입력·직렬 출력)n비트를 한꺼번에 넣고 한 비트씩 내보낸다병렬 → 직렬 변환. 74HC165로 버튼 여러 개를 핀 몇 개로 읽기
PIPO (병렬 입력·병렬 출력)한꺼번에 넣고 한꺼번에 읽는다일반 저장 레지스터

PISO는 단마다 MUX를 두고 SH/LD 신호로 "병렬 입력을 받을지, 옆 칸 값을 받을지"를 고른다. 이 원리를 넓혀 유지·왼쪽 시프트·오른쪽 시프트·병렬 로드를 모두 고르는 것이 범용 시프트 레지스터(74194 등)이고, 일반적인 범용 레지스터가 이 기능을 갖춘다.

시프트 레지스터 카운터

시프트 레지스터의 출력을 입력으로 되돌리면 카운터가 된다.

카운터되먹임n비트로 만드는 상태 수특징
링 카운터마지막 Q를 첫 D로n1 하나가 돈다(원-핫). 디코더 없이 출력이 바로 타이밍 신호. 시작할 때 1 하나를 넣어야 한다
존슨 카운터마지막 Q' 를 첫 D로2n상태마다 한 비트만 바뀐다. 2입력 AND 하나로 각 상태를 디코딩
flowchart LR
  subgraph jc["3비트 존슨 카운터 (오른쪽 시프트, 첫 입력 = Q_C')"]
    direction LR
    s0["000"] --> s1["100"] --> s2["110"] --> s3["111"] --> s4["011"] --> s5["001"] --> s0
  end

되먹임을 단순 연결 대신 몇 개 출력의 XOR로 만든 것이 LFSR(선형 되먹임 시프트 레지스터)이다. 의사 난수 생성과 CRC 계산에 쓰인다.

카운터

클럭이나 입력에 따라 정해진 순서(0, 1, 2, …)로 상태가 바뀌는 레지스터다. 사건 횟수 세기(예: 개찰구 통과 인원), 동작 순서를 위한 타이밍 신호 생성에 쓰인다. 병렬 입력이 있으면 초깃값을 로드할 수 있고, 주요 기능은 Load, Clear, Increment다.

비동기 카운터 (리플 카운터)

JK 플립플롭의 J = K = 1(또는 T = 1)로 두면 클럭마다 출력이 반전된다. 첫 단에만 외부 클럭을 넣고 각 단의 출력을 다음 단의 클럭으로 쓰면 2진 카운터가 된다. 하강 에지 플립플롭이라면 앞 단이 1 → 0으로 떨어질 때 다음 단이 반전하므로, 아랫자리에서 자리올림이 나는 순간과 정확히 맞는다.

클럭  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓
Q_A   0  1  0  1  0  1  0  1  0    (클럭마다 반전)
Q_B   0  0  1  1  0  0  1  1  0    (Q_A가 떨어질 때 반전)
Q_C   0  0  0  0  1  1  1  1  0    (Q_B가 떨어질 때 반전)
상태  0  1  2  3  4  5  6  7  0

다음 단의 클럭으로 Q 대신 Q'를 쓰면(또는 상승 에지 플립플롭을 쓰면) 거꾸로 세는 하향 카운터가 되고, 단마다 MUX로 Q와 Q'를 고르게 하면 상향/하향 겸용이 된다.

약점은 지연이 쌓이는 것이다. 자리올림이 물결처럼 한 단씩 전달되므로 맨 윗단은 모든 단의 지연을 더한 뒤에야 바뀐다. 8비트에 단마다 15ns면 120ns라, f_max ≤ 1 / (n × t_pd) ≈ 8.3MHz다. 또 바뀌는 도중에 잘못된 값이 잠깐 보인다. 0111 → 1000으로 갈 때 아랫자리부터 차례로 바뀌어 0110, 0100, 0000을 거치므로, 이 출력을 디코더에 바로 물리면 짧은 가짜 펄스가 생긴다.

mod-N 카운터

플립플롭 M개는 2ᴹ개 상태를 갖지만 그보다 적은 N개 상태만 쓰게 만들 수 있다(절단 시퀀스). 이때 N을 모듈러스라 한다. 비동기 카운터에서는 N이 되는 순간 모든 플립플롭을 클리어한다. N을 2진으로 적었을 때 1인 비트들만 AND로 감시하면 된다(부분 디코딩). 0~N−1 사이에는 그 비트들이 동시에 1인 값이 없기 때문이다.

카운터클리어 조건플립플롭
mod-6 (0~5)110 → Q_C · Q_B3개
mod-10, 10진(BCD) 카운터 (0~9)1010 → Q_D · Q_B4개

카운터가 N에 아주 잠깐 도달했다가 0으로 돌아가므로 출력에 폭이 좁은 글리치가 생긴다. 다른 회로가 이 순간을 읽으면 오동작할 수 있어, 동기 카운터나 아래의 동기식 클리어·로드로 피한다.

동기 카운터

모든 플립플롭에 같은 클럭을 넣어 동시에 바뀌게 하고, 어느 플립플롭을 반전할지는 조합 회로가 정한다. 2진 상향 카운터에서는 "아랫자리가 모두 1일 때만 이 자리가 반전한다"는 규칙이 그대로 입력식이 된다.

T_A = 1     T_B = Q_A     T_C = Q_A · Q_B     T_D = Q_A · Q_B · Q_C     (JK라면 J = K = 같은 식)

위 「설계 절차」대로 상태도 → 여기표 → 카르노 맵으로 설계하므로, 2진 순서가 아닌 임의의 순서(그레이 코드 순서, 0·3·5·6만 도는 순서)도 만들 수 있다. 입력 x가 1일 때만 00 → 01 → 10 → 11 → 00으로 세고 0이면 멈추는 카운터, 상향·하향을 고르는 카운터, 0~9만 돌고 9에서 자리올림 C = 1을 내는 BCD 카운터도 같은 방법으로 만든다.

비교비동기(리플)동기
클럭첫 단만 외부 클럭, 나머지는 앞 단 출력모든 단이 공통 클럭
지연단 수만큼 쌓인다플립플롭 한 단 + 조합 회로
과도 상태중간값이 잠깐 보인다동시에 바뀐다
회로단순단마다 AND 등 조합 회로 필요
임의 순서어렵다상태도로 자유롭게

카운터 활용

  • 프리셋(로드) 카운터: LOAD 신호로 미리 정한 값을 병렬로 넣는다. "끝까지 세면 시작값을 다시 로드"하면 mod-N이 된다. 4비트 카운터가 15에서 자리올림을 낼 때 5를 로드하면 5~15를 도는 mod-11이다. 상용 4비트 동기 카운터 중 74161은 클리어가 비동기(즉시)라 글리치가 남고, 74163은 동기(다음 클럭에)라 "N−1일 때 클리어"를 걸면 글리치 없이 mod-N이 된다.
  • 종속 연결(cascading): 아랫자리 카운터가 끝까지 셌다는 신호(자리올림, RCO)를 윗자리 카운터의 클럭에 넣으면 비동기 종속, Enable에 넣고 클럭은 공통으로 주면 동기 종속이다. 10진 카운터 4개를 이으면 0000~9999를 센다.
  • 분주기: T 플립플롭 하나는 클럭 두 번에 출력이 한 주기 돌므로 주파수를 절반으로 만든다(듀티비 50%). n단을 이으면 1/2ⁿ, mod-N 카운터의 최상위 출력은 1/N이다. 시계 IC는 32.768kHz 수정 발진기를 15단 나눠 정확히 1Hz를 얻는다(32768 = 2¹⁵).

레지스터 사이의 데이터 이동과 마이크로 연산은 레지스터 전송과 마이크로 연산에 있다.

메모리 장치

정보를 워드(word) 단위로 저장·입출력하는 저장 요소의 집합이다. 워드는 한 번에 다루는 비트 묶음으로, 64비트 컴퓨터라면 레지스터와 버스 폭이 64비트(8바이트)다.

RAM

  • 위치와 관계없이 모든 워드에 같은 시간으로 접근(random access).
  • K개의 주소선으로 2^K개 워드 중 하나를 선택하고, R/W 신호로 읽기/쓰기를 지정한다.

메모리 셀을 행렬로 배치하는 이유

래치를 한 줄로 늘어놓으면 비트마다 입력선과 출력선이 따로 필요하다. 256비트면 입력 256개, 출력 256개, Enable 1개로 513개의 선이 든다. 그래서 셀을 격자로 놓는다.

256비트 = 16 × 16 격자:

flowchart TB
  subgraph hrow[" "]
    direction LR
    s0[" "] ~~~ c0["열 0"] ~~~ c1["열 1"] ~~~ cx1["…"] ~~~ c8["열 8"] ~~~ cx2["…"] ~~~ c15["열 15"]
  end
  subgraph row0[" "]
    direction LR
    r0["행 0"] ~~~ a0["□"] ~~~ a1["□"] ~~~ s1[" "] ~~~ a8["□"] ~~~ s2[" "] ~~~ a15["□"]
  end
  subgraph rowx1[" "]
    direction LR
    rx1["…"]
  end
  subgraph row12[" "]
    direction LR
    r12["행 12"] ~~~ b0["□"] ~~~ b1["□"] ~~~ s3[" "] ~~~ b8["■<br/>행 12 AND 열 8 인 셀 하나만 선택"] ~~~ s4[" "] ~~~ b15["□"]
  end
  subgraph rowx2[" "]
    direction LR
    rx2["…"]
  end
  hrow ~~~ row0 ~~~ rowx1 ~~~ row12 ~~~ rowx2
  • 셀마다 AND 게이트를 두어 행 선, 열 선, Write Enable이 모두 1일 때만 쓰기가 가능하게 한다. 한순간에 선택되는 셀은 하나뿐이다.
  • 그래서 데이터선을 모든 셀이 하나로 공유해도 된다. 선택되지 않은 셀은 데이터선의 값을 무시한다. 읽기도 Read Enable로 같은 방식으로 한다.
  • 선 개수: 행 16 + 열 16 + 데이터 1 + Write Enable 1 + Read Enable 1 = 35개. 513개에서 크게 줄었다.
  • 주소는 행 번호와 열 번호를 이어 붙인 것이다. 행 12(1100)와 열 8(1000)의 셀 주소는 11001000이다. 4비트 행 번호를 16개 행 선 중 하나로 바꾸는 부품이 디코더다(행용, 열용 하나씩).

이 256비트 판을 8장 두고 같은 주소를 동시에 넣으면 판마다 한 비트씩 맡아 주소 하나에 8비트(1바이트)를 저장한다. 256개 주소 × 1바이트 메모리가 된다. 실제 메모리 칩도 이렇게 작은 셀 행렬을 묶고, 그 묶음을 다시 묶는 중첩 구조로 기가바이트까지 커진다. 위치가 늘어나면 주소 비트도 늘어야 한다(8비트 주소는 256곳, 32비트 주소는 2³² = 4GiB).

셀 하나를 무엇으로 만드느냐가 메모리 종류를 가른다. 래치(서로 물린 게이트)로 만들면 SRAM, 커패시터로 만들면 DRAM이고, 플래시는 전하를 가두는 셀을 쓴다. 셀 회로는 달라도 셀을 행렬로 놓고 행·열 주소로 고르는 구조는 같다. SRAM·DRAM의 셀 차이와 DRAM이 주소를 행·열로 나눠 보내는 타이밍은 메모리 계층 구조에 있다.

ROM

N비트 워드 M개(2^K = M)를 저장하며 읽기만 가능하다.

종류쓰기/지우기
Mask ROM제조 공정에서 내용이 고정됨
PROM사용자가 한 번만 기록 가능
EPROM자외선으로 지우고 다시 기록
EEPROM전기 신호로 지우고 다시 기록

ROM처럼 쓰는 비휘발성 RAM

  • Flash 메모리: 전원이 꺼져도 유지되며 특정 조건에서만 쓰기 가능. BIOS, USB 메모리, SD 카드. (BIOS는 원래 EPROM에 담겼지만 지금은 대부분 Flash)
  • NV-RAM: 배터리로 내용을 유지하는 RAM.

집적회로 (IC)

디지털 게이트를 이루는 소자들을 실리콘 칩 하나에 넣은 것. 칩마다 부품 번호가 있고, 동작 사양은 데이터 시트(모아 놓은 책은 databook)에서 확인한다. IC가 등장한 배경과 포토리소그래피 공정, 무어의 법칙은 컴퓨터의 역사에 있다.

집적 규모

분류게이트 수예
SSI (소규모)~10개기본 게이트 몇 개
MSI (중규모)10~200개디코더, 가산기, 레지스터
LSI (대규모)200~수천 개프로세서, 메모리 칩
VLSI (초대규모)수천 개 이상대용량 메모리, 마이크로프로세서

논리군 (Logic Family)

같은 논리 연산을 어떤 트랜지스터 회로로 만드느냐에 따른 계열이다. 논리 결과는 같고 속도, 전력, 잡음 내성 같은 전기적 특성이 다르다.

논리군특징
TTL바이폴라 트랜지스터로 만든다. 전원 5V(±5%)에 맞춰 쓰고 전력 소비가 크다. TI의 74 시리즈(군용 54 시리즈)가 칩 번호·기능·핀 배치의 사실상 표준이 되었다(7400 = 2입력 NAND 4개, 7408 = AND, 7432 = OR)
ECL매우 빠름(ns 이하), 고속 시스템·슈퍼컴퓨터용
MOS고밀도 집적에 적합
CMOS전계 효과 트랜지스터(MOSFET) 쌍으로 만든다. 고밀도, 단순한 공정, 저전력, 넓은 전원 전압 범위, 큰 잡음 여유. 대신 정전기에 약하다. 속도가 TTL을 따라잡으면서 4000 시리즈와 TTL 핀 호환인 74HC 계열이 TTL을 대체했고, 휴대 기기 등 현대 칩의 주류다

74 시리즈의 부품 번호는 제조사 접두어 + 74 + 회로 계열(LS, ALS, HC, HCT …) + 기능 번호 + 패키지 접미어 꼴이다. SN74HC00N이면 TI의 CMOS 고속 계열, 2입력 NAND 4개, 플라스틱 DIP 패키지다.

게이트의 전기적 특성

특성뜻
전파 지연(propagation delay)입력이 바뀐 뒤 출력이 바뀔 때까지의 시간. 입력·출력이 50% 지점을 지나는 시각 차로 재며, 출력이 내려갈 때(tPHL)와 올라갈 때(tPLH)가 다를 수 있다. 게이트의 속도를 나타낸다
팬인(fan-in)게이트 하나가 받을 수 있는 입력 수
팬아웃(fan-out)출력 하나에 연결해도 정상 논리 레벨을 유지하는 다음 게이트 입력의 최대 수. 표준 TTL은 10 정도이고 CMOS는 입력 전류가 거의 없어 훨씬 크다. 더 많이 연결해야 하면 버퍼 게이트를 끼운다
싱크·소스 전류출력이 LOW일 때 바깥에서 출력 쪽으로 흘러드는 전류가 싱크, HIGH일 때 출력에서 밖으로 나가는 전류가 소스다. TTL은 싱크 쪽 전류 능력이 훨씬 커서(예: 16mA 대 0.4mA 수준) LED 같은 부하를 LOW일 때 켜도록 연결한다
잡음 여유(noise margin)출력이 보장하는 전압과 입력이 요구하는 전압 사이의 여유. 이만큼의 잡음이 끼어도 0과 1을 헷갈리지 않는다

스위치를 열어 아무 데도 연결되지 않은 입력은 떠 있는(floating) 상태라 0인지 1인지 정해지지 않는다. 입력을 저항(보통 수 kΩ)으로 전원에 이어 기본값을 1로 두는 것이 풀업 저항, 접지에 이어 기본값을 0으로 두는 것이 풀다운 저항이다. 마이크로컨트롤러 핀에는 내부 풀업을 켜는 설정이 있다.

프로그래머블 논리 소자

기능이 고정된 74 시리즈 칩을 여러 개 엮는 대신, 사용자가 회로를 프로그램으로 정하는 칩이다. 보드가 작아지고 설계·수정이 빠르고 싸다.

종류규모
SPLD(PAL·GAL 등)AND-OR 배열 하나 정도. 작은 조합·순차 논리
CPLDSPLD 여러 개를 내부 배선으로 묶음. 비휘발성이라 켜자마자 동작
FPGA수많은 논리 블록(LUT + 플립플롭)과 배선을 SRAM 설정으로 연결. 켤 때 설정을 불러온다. 프로토타이핑, 통신·영상 처리 가속

Verilog·VHDL 같은 하드웨어 기술 언어(HDL)나 회로도로 설계하고, 합성·시뮬레이션으로 검증한 뒤 칩에 내려받는다.

핵심 정리

  • 부울 대수(흡수·합의 법칙)와 카르노 맵(2의 거듭제곱 개, 직사각형, 최대한 크게)은 같은 기능을 더 적은 게이트로 만드는 도구다. 변수가 많으면 퀸-매클러스키·에스프레소를 쓴다.
  • 함수는 1인 조합의 목록(Σm)이나 0인 조합의 목록(ΠM)으로 적을 수 있고, SOP는 2단 NAND로, POS는 2단 NOR로 바로 옮겨진다.
  • 조합 회로는 현재 입력만, 순차 회로는 입력과 이전 상태로 출력이 정해진다.
  • 디코더는 「하나만 켜기」(출력이 곧 최소항이라 OR만 붙이면 어떤 함수든 된다), MUX는 「하나만 고르기」(n변수 함수를 2ⁿ⁻¹×1 MUX 하나로), 우선순위 인코더는 동시 입력 중 가장 높은 것 고르기다.
  • 출력을 입력으로 되먹이면 값을 기억하는 래치가 되고, 클럭 에지에만 받는 것이 플립플롭이다. 특성식은 분석에, 여기표는 설계에 쓴다.
  • 클럭 주기는 플립플롭 지연 + 조합 회로 최장 경로 + 설정 시간보다 길어야 한다. 무어는 상태로, 밀리는 상태와 입력으로 출력을 정한다.
  • 순차 회로 설계는 상태도 → 플립플롭 결정 → 상태표 → 여기표 → 카르노 맵 → 회로 → 미사용 상태 확인 순이다.
  • 비동기 카운터는 단순하지만 지연이 단 수만큼 쌓이고 중간값·글리치가 보인다. 동기 카운터는 공통 클럭으로 동시에 바뀌고 임의 순서를 만들 수 있으며, 카운터는 곧 주파수 분주기다.
  • 시프트 레지스터는 SISO·SIPO·PISO·PIPO로 나뉘며 직렬·병렬 변환의 핵심이고, 출력을 되먹이면 링(n상태)·존슨(2n상태) 카운터가 된다.
  • 래치를 행렬로 놓고 행·열 주소로 하나만 고르면 RAM이 된다. RAM은 읽기/쓰기 모두, ROM 계열은 읽기 위주이며 Flash가 그 사이를 채운다.
  • 게이트는 전파 지연·팬아웃·잡음 여유로 비교하고, 떠 있는 입력은 풀업·풀다운 저항으로 정한다. 현대 논리 칩은 CMOS이고, 고정 기능 칩 대신 FPGA 같은 프로그래머블 소자도 쓴다.

관련 노트: 레지스터 전송과 마이크로 연산, 컴퓨터 산술 연산, 데이터의 표현, 메모리 계층 구조, 파이프라인과 병렬 처리, 기본 컴퓨터의 구조와 설계

원본 기록3

댓글

GitHub 계정으로 댓글을 남길 수 있어요.