bitGateLab Digital · 배우기
한국어
시뮬레이터 열기

배우기 › 주제 10

카운터와 시프트 레지스터: 단계별 설계

읽는 시간 7분 · bitGateLab 팀

카운터는 클럭 펄스마다 정해진 상태 순서를 따라가는 플립플롭의 묶음이고, 레지스터는 2진 워드를 저장하거나 시프트하는 플립플롭의 묶음입니다. 이들로 시간을 재고, 주파수를 분주하고, 데이터를 직렬에서 병렬로 변환하고, 제어 시퀀스를 만들어 냅니다. D, JK, T 플립플롭과 그 여기표를 확실히 알고 있어야 하며, 이 내용은 래치와 플립플롭에서 설명합니다.

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

수를 세는 가장 간단한 방법은 T = 1인 T 플립플롭을 줄줄이 이어, 각각이 토글하면서 주파수를 2로 나누게 하는 것입니다. 첫 번째 플립플롭만 시스템 클럭을 받고, 그다음 플립플롭은 각각 앞 플립플롭의 출력을 클럭으로 받습니다. 하강 에지 트리거 플립플롭이라면 한 단의 Q를 다음 단의 클럭에 연결하면 되고, 이때 카운터는 위로 셉니다. 상승 에지 트리거라면 위로 세기 위해 Q를 써야 합니다(Q를 쓰면 아래로 셉니다).

단점은 누적되는 지연입니다. n번째 단은 앞의 모든 단이 바뀐 뒤에야 바뀌며, 마치 사슬을 따라 전해지는 물결과 같습니다. 그동안 출력은 틀린 값들을 거쳐 갑니다.

예제: 플립플롭당 tCQ = 12 ns인 4비트 비동기 카운터가 0111에서 1000으로 넘어갑니다.

  1. Q0이 12 ns에 1에서 0으로 바뀝니다: 출력은 0110으로 읽힙니다.
  2. Q1이 24 ns에 바뀝니다: 0100.
  3. Q2가 36 ns에 바뀝니다: 0000.
  4. Q3이 48 ns에 바뀝니다: 1000, 올바른 값입니다.

48 ns 동안 출력은 0110, 0100, 0000을 보여 주었습니다. 어떤 회로가 이 값들을 디코딩한다면 거짓 펄스를 보게 됩니다. 언제나 안정된 값을 읽으려면 클럭 주기가 48 ns보다 길어야 합니다. 즉 f < 20.8 MHz입니다.

동기 카운터

동기 카운터에서는 모든 플립플롭이 같은 클럭을 받고, 누가 토글할지는 논리 회로가 정합니다. 2진 업 카운터에서 어떤 비트는 그보다 하위의 비트가 모두 1일 때 토글합니다.

T0 = 1, T1 = Q0, T2 = Q0·Q1, T3 = Q0·Q1·Q2

모든 출력은 에지로부터 tCQ 뒤에 함께 바뀝니다. 최소 주기는 더 이상 플립플롭 사슬 때문에 비트 수에 좌우되지 않고, tCQ + AND의 지연 + tsu로 정해집니다.

모듈로 N 카운터

모듈로 N 카운터는 N개의 상태를 거친 뒤 처음으로 돌아갑니다. 적어도 ⌈log2 N⌉개의 플립플롭이 필요합니다. 만드는 방법은 두 가지입니다.

비동기 리셋 사용: 2진 카운터를 가져와서 나타나서는 안 되는 첫 번째 상태를 검출합니다. 모듈로 10이면 그 상태는 1010입니다. Q3과 Q1의 NAND를 Low 활성 클리어에 연결하면 됩니다. Q3과 Q1이 동시에 1이 되는 것은 이때가 처음이기 때문입니다. 동작은 하지만 1010 상태가 몇 나노초 동안 나타나 출력에 짧은 펄스를 만듭니다.

동기 설계: 상태표를 작성하고 여기표로 입력을 계산합니다. 과도 상태가 없습니다.

예제: T 플립플롭으로 만드는 동기 모듈로 6 카운터(0부터 5까지). 상태는 Q2 Q1 Q0이며, 110과 111 상태는 사용하지 않으므로 X로 둡니다.

Q2 Q1 Q0다음 상태T2T1T0
000001001
001010011
010011001
011100111
100101001
101000101

각 T는 해당 비트가 바뀔 때 1입니다. X를 이용해 간소화하면:

  • T0 = 1.
  • T1 = Q2·Q0 (001과 011을 덮습니다. 101에서는 Q2 = 1이므로 0입니다).
  • T2 = Q1·Q0 + Q2·Q0 = Q0·(Q1 + Q2).

사용하지 않는 상태를 확인합니다. 110에서는 T2 = 0, T1 = 0, T0 = 1이므로 카운터가 111로 가고, 111에서는 T2 = 1, T1 = 0, T0 = 1이므로 010으로 갑니다. 둘 다 원래 순서로 돌아옵니다. 즉 이 카운터는 유효하지 않은 상태로 켜지더라도 스스로 시작합니다.

시프트 레지스터

시프트 레지스터는 D 플립플롭을 사슬처럼 이은 것입니다. 각 플립플롭의 출력이 다음 플립플롭의 입력으로 들어가고, 에지마다 모든 비트가 한 자리씩 이동합니다. 데이터가 들어오고 나가는 방식에 따라 다음과 같이 분류합니다.

예제: 처음에 0000인 4비트 SIPO 레지스터로, Q0 ← 입력, Q1 ← Q0, Q2 ← Q1, Q3 ← Q2입니다. 비트 1, 0, 1, 1을 이 순서로 보냅니다.

에지입력 비트Q0 Q1 Q2 Q3
111 0 0 0
200 1 0 0
311 0 1 0
411 1 0 1

에지 4번 뒤에 Q3 Q2 Q1 Q0으로 읽으면 레지스터에는 1011이 들어 있습니다. 처음 보낸 비트가 Q3에 자리 잡았습니다.

링 카운터와 존슨 카운터

시프트 레지스터의 마지막 플립플롭 출력을 첫 번째 플립플롭의 입력에 연결하면 링 카운터가 됩니다. 1 하나만으로 초기화하면(예: 1000) 그 1이 돌아다닙니다: 1000, 0100, 0010, 0001, 1000. 플립플롭이 n개이면 상태는 n개이고, 출력 하나만 1이므로 각 상태가 이미 디코딩되어 있습니다. 초기값 로드를 반드시 보장해야 합니다. 0000에서 시작하면 영원히 거기에 머뭅니다.

마지막 플립플롭의 Q 대신 Q를 피드백하면 상태가 2n개인 존슨 카운터(꼬인 링 카운터)가 됩니다. 4비트의 경우(Q0 Q1 Q2 Q3, Q0 ← Q3):

0000 → 1000 → 1100 → 1110 → 1111 → 0111 → 0011 → 0001 → 0000

각 상태는 1과 0의 경계가 어디에 있는지를 보는, 입력이 두 개뿐인 AND 하나로 구별할 수 있습니다. 예를 들어 1100은 Q1 = 1이고 Q2 = 0인 유일한 상태이고, 0000은 Q0 = 0이고 Q3 = 0인 유일한 상태입니다.

플립플롭 4개의 경우: 2진 카운터는 16개 상태를 모두 쓰고, 존슨 카운터는 8개, 링 카운터는 4개를 씁니다. 존슨 카운터의 남는 상태(8개)와 링 카운터의 남는 상태(12개)는 회로가 그 상태에서 시작할 수 있다면 추가 논리로 바로잡아야 합니다.

흔한 실수

시뮬레이터에서 해 보기

타이밍도에서 비동기 카운터와 동기 카운터를 비교하는 것이 리플 효과를 보는 가장 좋은 방법입니다.

  1. T = 1인 T 플립플롭 네 개를 놓고, 첫 번째에 클럭을 연결한 뒤 나머지를 비동기 카운터로 이어 줍니다.
  2. 네 출력을 표시등과 디스플레이 또는 LED 바에 연결합니다.
  3. 그 옆에 T1 = Q0, T2 = Q0·Q1, T3 = Q0·Q1·Q2인 동기 카운터를 모두 같은 클럭으로 만듭니다.
  4. 타이밍도를 열고 클럭을 계속 동작시키면서 두 카운터에서 0111에서 1000으로 넘어가는 전환을 관찰합니다.
  5. D 플립플롭 네 개를 사슬로 이어 레지스터를 만들고, 각 에지 전에 직렬 입력을 바꿔 가며 비트가 이동하는 모습을 관찰합니다. 그런 다음 마지막 단의 Q를 첫 단으로 피드백해 존슨 카운터의 8개 상태를 확인합니다.

연습문제

  1. 모듈로 12 카운터를 2진, 링, 존슨 방식으로 만들 때 각각 플립플롭이 몇 개 필요합니까?
    정답

    2진: 4 (24 = 16 ≥ 12). 링: 12. 존슨: 6 (2 × 6 = 12).

  2. 4비트 2진 카운터로부터 Low 활성 비동기 리셋을 써서 모듈로 12 카운터를 만들려면 어떤 게이트와 어떤 출력을 사용하겠습니까?
    정답

    12 = 1100. Q3과 Q2의 NAND를 클리어에 연결합니다. 둘이 모두 1이 되는 것은 이때가 처음이기 때문입니다.

  3. 8비트 비동기 카운터가 tCQ = 10 ns인 플립플롭을 사용합니다. 최악의 안정화 시간은 얼마입니까?
    정답

    8 × 10 = 80 ns. 예를 들어 01111111에서 10000000으로 넘어갈 때입니다.

  4. 4비트 존슨 카운터의 0111 상태를 디코딩하는, 입력이 두 개인 AND는 무엇입니까?
    정답

    Q0·Q1: Q0 = 0이고 Q1 = 1인 유일한 상태입니다.