Skip to Content
독학사독학사 2단계논리회로21. 카운터 설계: 동기·비동기·상태머신

이번 문서의 목표: 이 파일을 다 읽으면 비동기 카운터와 동기 카운터의 구조·속도 차이를 설명하고, 여기표를 이용해 임의의 모듈러(mod-N) 동기 카운터를 상태표부터 논리식까지 직접 설계하며, 카운터가 정상 순환 경로를 벗어났을 때(비정상 상태) 자동으로 복귀하도록 만드는 절차를 적용할 수 있다.

왜 카운터를 “설계”까지 해야 할까

10편(컴퓨터구조 쪽에서 다룬 순서논리회로) 수준에서는 카운터를 “T 플립플롭을 나란히 연결해 클록마다 값이 하나씩 늘어나는 회로”로 직관적으로만 이해하고 넘어갔다. 하지만 독학사 시험에서 실제로 자주 나오는 문제는 “2진수 0부터 7까지 세는 카운터”처럼 딱 떨어지는 경우가 아니라, 모드 5, 모드 6, BCD(모드 10)처럼 2의 거듭제곱이 아닌 임의의 개수를 세는 카운터를 JK 플립플롭으로 직접 설계하라는 유형이다. 이런 문제는 19편에서 배운 여기표(excitation table, 원하는 상태 전이를 만들려면 플립플롭 입력에 무엇을 넣어야 하는지 거꾸로 찾는 표)와 20편에서 배운 상태표 작성법을 그대로 응용해야 풀린다.

쉽게 말하면: 카운터 설계는 “몇 개의 상태를 어떤 순서로 돌게 할지”를 먼저 정하고, 그 순서를 만들어내는 데 필요한 플립플롭 입력값을 여기표로 거꾸로 계산해서 최종 논리식을 뽑아내는 작업이다.

비동기 카운터와 동기 카운터: 구조부터 다시 정리

쉽게 말하면: 비동기 카운터는 앞 플립플롭의 출력이 뒤 플립플롭의 클록이 되어 신호가 순서대로 전달되고, 동기 카운터는 모든 플립플롭이 똑같은 클록을 동시에 받아 한 번에 바뀐다.

비동기 카운터(asynchronous counter, 리플 카운터ripple counter라고도 부른다)는 가장 하위 비트를 담당하는 플립플롭만 외부 클록을 직접 받고, 그 위의 비트들은 바로 아래 비트의 출력(주로 QQ가 1에서 0으로 떨어지는 순간)을 자신의 클록 입력으로 사용한다. 회로 구성이 단순해서(추가 게이트가 거의 필요 없다) 이해하기는 쉽지만, 클록 신호가 마치 물결(ripple)처럼 한 비트씩 순서대로 전파되므로, 비트 수가 늘어날수록 전파 지연(propagation delay)이 계속 누적된다. 8비트 리플 카운터라면 최상위 비트가 안정된 값을 갖기까지 플립플롭 8개의 지연 시간을 모두 합한 시간이 걸린다.

동기 카운터(synchronous counter)는 모든 플립플롭이 같은 클록선에 동시에 연결되어, 클록이 뛰는 순간 모든 비트가 한꺼번에 바뀐다. 다만 “다음 상태가 무엇이 되어야 하는가”를 각 플립플롭이 미리 알고 있어야 하므로, 비트 사이의 관계를 계산하는 추가 논리 게이트가 필요하다. 회로는 조금 더 복잡하지만, 모든 비트가 동시에 안정되므로 속도가 빠르고 설계자가 원하는 임의의 순서(꼭 이진수 증가가 아니어도 됨)로 상태를 돌게 만들 수 있다는 것이 결정적인 장점이다.

구분비동기(리플) 카운터동기 카운터
클록 연결뒷 비트가 앞 비트의 출력을 클록으로 사용모든 플립플롭이 같은 클록을 동시에 공유
회로 복잡도단순(추가 게이트 거의 불필요)상대적으로 복잡(J, K 입력을 만드는 게이트 필요)
속도비트 수가 늘수록 전파 지연 누적모든 비트가 동시에 바뀌어 상대적으로 빠름
임의 순서(모드 5, 6 등) 설계구현이 번거로움여기표 기반 절차로 체계적으로 설계 가능

시험 함정: “리플 카운터는 회로가 단순하므로 항상 동기 카운터보다 빠르다”는 진술은 틀렸다. 회로 단순함과 동작 속도는 별개다. 리플 카운터는 비트마다 전파 지연이 누적되어, 비트 수가 많아질수록 오히려 동기 카운터보다 느려진다.

동기 카운터 설계 절차: 여기표를 거꾸로 사용한다

쉽게 말하면: “이 상태에서 저 상태로 가려면 플립플롭에 뭘 넣어야 하지?”를 여기표에서 찾아 표로 정리한 뒤, 그 표를 카르노맵처럼 간소화하면 완성된 회로 논리식이 나온다.

동기 카운터 설계는 20편에서 다룬 일반적인 순차회로 설계 절차(상태도 → 상태표 → 플립플롭 입력방정식 → 출력방정식)를 그대로 따르되, 카운터는 출력이 곧 상태(Q값 자체) 이므로 별도의 출력 논리를 만들 필요가 없다는 점이 단순화 포인트다. 절차는 다음과 같다.

1단계 — 세고 싶은 순서를 정한다

몇 개의 상태를 어떤 순서로 돌게 할지 정한다. 예를 들어 “0, 1, 2, 3, 4를 반복해서 세는 모드 5(mod-5) 카운터”를 만든다고 하자. 상태 5개를 표현하려면 2n52^n \geq 5를 만족하는 최소 비트 수 n=3n=3이 필요하다(2비트로는 4개 상태밖에 못 만든다). 3비트를 쓰면 000000부터 111111까지 8개의 상태 조합이 생기는데, 이 중 101101, 110110, 111111은 정상 순환 경로에 포함되지 않는 비정상 상태(잉여 상태, unused state)가 된다.

2단계 — 상태표(현재 상태 → 다음 상태)를 만든다

정상 경로는 000001010011100000000 \to 001 \to 010 \to 011 \to 100 \to 000(다시 처음으로)이다. 비정상 상태 101101, 110110, 111111은 회로가 잡음이나 전원 투입 시 우연히 그 값에서 시작하더라도 다음 클록에 바로 정상 경로로 복귀하도록 전부 000000으로 보내는 것으로 설계한다(이를 자기 보정, self-correcting 설계라고 한다).

현재 상태 Q2Q1Q0Q_2Q_1Q_0다음 상태 Q2Q1Q0Q_2'Q_1'Q_0'비고
000001정상
001010정상
010011정상
011100정상
100000정상(순환 완료)
101000비정상 → 자동 복귀
110000비정상 → 자동 복귀
111000비정상 → 자동 복귀

3단계 — 각 플립플롭의 전이를 여기표로 변환한다

JK 플립플롭을 쓴다고 하면, 19편의 JK 여기표를 그대로 가져온다.

Q(t)Q(t)Q(t+1)Q(t+1)JJKK
000X(무관)
011X(무관)
10X(무관)1
11X(무관)0

상태표의 8개 행 각각에 대해, Q2Q_2, Q1Q_1, Q0Q_0 세 비트가 각자 어떻게 바뀌는지를 이 여기표에 대입해 J2K2J_2K_2, J1K1J_1K_1, J0K0J_0K_0 값을 채운다.

Q2Q1Q0Q_2Q_1Q_0J2J_2K2K_2J1J_1K1K_1J0J_0K0K_0
0000X0X1X
0010X1XX1
0100XX01X
0111XX1X1
100X10X0X
101X10XX1
110X1X10X
111X1X1X1

4단계 — 각 입력을 카르노맵으로 간소화한다

각 열(J2,K2,J1,K1,J0,K0J_2, K_2, J_1, K_1, J_0, K_0)을 Q2Q1Q0Q_2Q_1Q_0에 대한 함수로 보고 11편·12편에서 익힌 카르노맵 절차(무관 항 포함)로 간소화하면 다음 결과를 얻는다.

J2=Q1Q0J_2 = Q_1 \cdot Q_0K2=1K_2 = 1
  • J2J_2: Q1=1Q_1=1이면서 Q0=1Q_0=1인 행(011)에서만 J2=1J_2=1이 필요하고, 나머지 정의된 행은 모두 0이었다. 무관 항 111을 1로 채워 Q2Q_2 항을 지우면 Q1Q0Q_1 \cdot Q_0로 간소화된다.
  • K2K_2: Q2=1Q_2=1인 네 행(100·101·110·111)이 모두 K2=1K_2=1을 요구하므로, K2K_2는 상수 1이다.
J1=Q2Q0J_1 = Q_2' \cdot Q_0K1=Q0+Q2K_1 = Q_0 + Q_2
  • J1J_1: 정의된 값 중 J1=1J_1=1인 행은 001뿐이었다(000, 100, 101은 0). 무관 항 011을 1로 채워 Q2Q0Q_2' \cdot Q_0으로 정리해도 000·100·101의 정의값과 모두 일치한다.
  • K1K_1: 정의된 값 010=0, 011=1이고, 무관 항 110·111을 1로 채우면 Q0+Q2Q_0 + Q_2(둘 중 하나라도 1이면 1)로 정리되며, 자유롭게 남는 000·001·100·101 자리는 무관 항이라 결과에 영향을 주지 않는다.
J0=Q2Q0J_0 = Q_2' \cdot Q_0'K0=1K_0 = 1
  • J0J_0: 정의된 값 중 J0=1J_0=1인 행은 000, 010이고 Q2=1Q_2=1인 100, 110은 0이다. 별도의 무관 항 조정 없이도 Q2Q0Q_2' \cdot Q_0'로 정확히 맞아떨어진다.
  • K0K_0: Q0=1Q_0=1인 네 행(001·011·101·111)이 모두 K0=1K_0=1을 요구하므로 상수 1이다.

시험 함정: 카르노맵을 그릴 때 무관 항(X)을 실제 회로에 존재하지 않는 상태로 착각해서 임의로 무시하면 안 된다. 무관 항은 “그 입력 조합이 나타날 일이 없거나 나타나도 결과가 상관없다”는 뜻일 뿐, 셀 자체는 여전히 카르노맵 위에 존재하며 0 또는 1 중 간소화에 유리한 값을 자유롭게 선택해 채워 넣어야 한다.

완성된 mod-5 카운터의 회로 구성

위에서 구한 여섯 개의 입력방정식(J2,K2,J1,K1,J0,K0J_2, K_2, J_1, K_1, J_0, K_0)을 JK 플립플롭 3개의 입력에 각각 연결하면 mod-5 동기 카운터가 완성된다. K2=1K_2 = 1K0=1K_0 = 1은 항상 1이 걸려 있는 상수 입력이므로 별도의 게이트 없이 전원(논리 1)에 바로 연결하면 되고, 나머지 네 입력만 AND·OR 게이트로 구현하면 된다.

결과 해석: 상태도를 보면 정상 경로 5개 상태(000000~100100)가 하나의 순환 고리를 이루고, 나머지 비정상 상태 3개(101101, 110110, 111111)는 모두 화살표 하나로 곧장 000000으로 흡수된다. 이렇게 비정상 상태에서 정상 경로까지 한 클록 안에 도달하도록 만드는 것을 자기 보정(self-correcting) 설계라고 하며, 만약 비정상 상태들끼리 서로를 가리키며 순환하는 별도의 고리가 생겨 버리면(예: 101110101101 \to 110 \to 101 \to \cdots) 카운터가 정상 경로로 절대 돌아오지 못하는 잠금(lockout) 상태에 빠진다. 시험에서 “이 카운터 설계가 올바른가”를 묻는 문제는 종종 이 잠금 여부를 확인하라는 함정으로 나온다.

모듈러 카운터 개수와 필요 비트 수

쉽게 말하면: N개의 상태를 세려면 2nN2^n \geq N을 만족하는 최소 nn비트가 필요하고, 남는 2nN2^n - N개의 여분 상태는 항상 비정상 상태 처리 대상이 된다.

모드(N)필요 최소 비트 수 nn전체 상태 2n2^n비정상(잉여) 상태 수
3241
5383
6382
10(BCD)4166

BCD 카운터(모드 10, 00001001을 반복)처럼 실제 시험에 자주 등장하는 카운터도 정확히 같은 절차(상태표 → 여기표 대입 → 카르노맵 간소화)로 설계하며, 다만 비정상 상태가 6개(10101111)로 늘어나 카르노맵의 무관 항이 훨씬 많아진다는 점만 다르다.

핵심 정리

  • 비동기(리플) 카운터는 뒤 비트가 앞 비트의 출력을 클록으로 삼아 회로는 단순하지만 전파 지연이 누적되고, 동기 카운터는 모든 비트가 같은 클록을 공유해 빠르지만 입력 논리를 계산해야 한다.
  • 동기 카운터 설계는 (1) 세고 싶은 순서로 상태표 작성 → (2) 각 비트 전이를 플립플롭 여기표에 대입 → (3) 카르노맵으로 J, K(또는 D, T) 입력방정식 간소화 → (4) 게이트로 구현하는 4단계 절차를 따른다.
  • 모드 N 카운터는 2nN2^n \geq N을 만족하는 최소 nn비트로 만들며, 남는 2nN2^n - N개의 비정상 상태는 자기 보정(다음 클록에 정상 경로로 복귀) 설계로 처리한다.
  • 비정상 상태끼리 서로를 순환 참조하면 카운터가 정상 경로로 영영 돌아오지 못하는 잠금(lockout) 상태가 되므로, 설계 후에는 모든 비정상 상태의 다음 상태를 추적해 잠금 여부를 반드시 확인해야 한다.

마무리 복습

문제 14지선다
비동기(리플) 카운터에 대한 설명으로 옳지 않은 것은?
문제 24지선다
0, 1, 2, 3, 4 다섯 개의 상태를 순환하는 mod-5 카운터를 만들 때 필요한 최소 플립플롭 개수는?
문제 34지선다
mod-5 카운터(3비트, 000~100 정상 순환)에서 비정상 상태 101이 다음 클록에 000으로 이동하도록 설계하는 이유로 가장 적절한 것은?
문제 44지선다
카운터 설계에서 비정상 상태들이 서로를 가리키며 별도의 순환 고리를 이루어 정상 경로로 돌아오지 못하는 현상을 무엇이라 하는가?
문제 54지선다
JK 플립플롭의 여기표에서 현재 상태 Q(t)=1에서 다음 상태 Q(t+1)=0으로 바뀌려 할 때 필요한 J, K 값은?
문제 64지선다
BCD(모드 10) 동기 카운터를 4비트 JK 플립플롭으로 설계할 때, 비정상(잉여) 상태의 개수는?
문제 74지선다
동기 카운터가 비동기 카운터에 비해 갖는 핵심적인 장점은?

참고 자료

Last updated on