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

배우기 › 주제 12

타이밍도, 글리치, 정적 해저드

읽는 시간 8분 · bitGateLab 팀

종이 위에서 게이트는 즉시 응답하지만, 현실에서는 게이트마다 몇 나노초가 걸립니다. 이 차이는 진리표에서는 거의 문제가 되지 않지만 타이밍도에서는 문제가 됩니다. 지연이 서로 다른 두 경로가 글리치라고 부르는 거짓 펄스를 만들어, 엉뚱한 때에 카운터를 진행시키거나 래치를 트리거할 수 있습니다. 여기서는 타이밍도를 읽고, 지연을 계산하고, 카르노 맵으로 정적 해저드를 찾아 제거하는 방법을 배웁니다.

타이밍도 읽는 법

타이밍도는 각 신호를 공통의 가로 시간축 위에서 올라가거나(1) 내려가는(0) 선으로 그립니다. 임의의 순간에 가상의 세로선을 그으면 모든 신호의 값을 알 수 있습니다. 입력의 에지가 원인이고, 입력 에지와 그로 인해 출력에 생기는 변화 사이의 거리가 지연입니다. 클럭이 있는 회로에서는 각 활성 에지 직전의 값을 읽습니다. 플립플롭이 샘플링하는 때가 바로 그때이기 때문입니다.

전파 지연과 임계 경로

전파 지연은 입력의 변화와 그에 따른 출력의 변화 사이의 시간으로, 각 전이의 50 % 지점 사이에서 측정합니다. 두 가지 값을 구별합니다.

5 V로 동작하는 74HC 계열에서 간단한 게이트의 지연은 10 ns 정도이며, 용량성 부하가 커지거나 전원 전압이 낮아지면 늘어납니다.

회로의 지연은 어느 입력에서든 출력까지 가는 가장 느린 경로, 곧 임계 경로의 지연입니다. 각 경로에 있는 게이트의 지연을 더한 뒤 가장 큰 값을 취해 구합니다.

예제: F = A·B + A·C이고 tNOT = 5 ns, tAND = 10 ns, tOR = 10 ns입니다.

  • B 또는 C의 경로: AND + OR = 20 ns.
  • 위쪽 AND를 지나는 A의 경로: AND + OR = 20 ns.
  • 인버터를 지나는 A의 경로: NOT + AND + OR = 25 ns.

임계 경로는 A에서 인버터를 지나는 경로로, 25 ns입니다. 어떤 입력 변화도 F가 안정되기까지 이보다 오래 걸리지 않습니다.

글리치와 정적 해저드

정적 1 해저드는 입력이 바뀌는 동안 출력이 1을 유지해야 하는데 잠깐 0으로 떨어질 수 있는 경우입니다. 정적 0 해저드는 그 반대로, 출력이 0을 유지해야 하는데 잠깐 1로 튀는 경우입니다. 둘 다 어떤 변수와 그 보수가 지연이 서로 다른 경로로 출력에 도달할 때 나타납니다.

앞 예제의 회로에서 B = C = 1이라고 합시다. 논리적으로는 항상 F = A + A = 1입니다. 그러나 A가 1에서 0으로 내려갈 때, A·B 항은 A·C 항이 켜지기 전에 먼저 꺼집니다. A가 먼저 인버터를 거쳐야 하기 때문입니다.

A Ā A·B Ā·C F 0 5 10 15 20 25 t (ns)
B = C = 1일 때 A가 t = 0에서 내려갑니다. 10 ns와 15 ns 사이에 OR의 두 입력이 모두 0이 되고, F는 20 ns부터 25 ns까지 떨어집니다. 5 ns짜리 글리치입니다.

글리치의 진행 과정(B = C = 1, A가 t = 0에서 내려감):

  1. t = 5 ns: 인버터가 A를 올립니다.
  2. t = 10 ns: A·B의 AND가 출력을 내립니다(t = 0에서 일어난 A의 변화에 응답).
  3. t = 15 ns: A·C의 AND가 출력을 올립니다(t = 5에서 일어난 A의 변화에 응답).
  4. 10 ns와 15 ns 사이에는 OR의 두 입력이 모두 0입니다. OR는 10 ns 뒤에 응답하므로 F는 t = 20부터 t = 25 ns까지 0입니다.

글리치의 폭은 두 경로의 지연 차이, 곧 인버터의 지연인 5 ns입니다. A가 올라갈 때는 A·B가 t = 10에 켜지고 A·C가 t = 15에 꺼집니다. 그 사이에 둘 다 1이므로 글리치가 없습니다.

이 밖에 동적 해저드도 있습니다. 출력이 한 번만 바뀌어야 하는데 세 번 이상 바뀌는 경우입니다(예: 1 → 0 → 1 → 0). 같은 변수에 대해 지연이 서로 다른 경로가 셋 이상 있는 다단 논리에서 나타납니다.

카르노 맵으로 해저드 찾고 제거하기

곱의 합의 카르노 맵에서 정적 1 해저드는 1이 들어 있는 두 칸이 인접해 있으면서 서로 다른 묶음에 덮여 있고, 둘을 함께 덮는 묶음이 없을 때 나타납니다. 한 칸에서 다른 칸으로 넘어간다는 것은 변수 하나만 바뀐다는 뜻이며, 그 변화 동안 회로는 한 항에서 다른 항으로 "건너뜁니다".

해결책은 합의항, 즉 두 칸을 함께 덮는 추가 묶음을 더하는 것입니다. 논리적으로는 중복이지만(진리표가 바뀌지 않음) 전이 동안 출력을 1로 유지해 줍니다.

예제: F = A·B + A·C.

  1. A·B는 ABC = 110과 111 칸을 덮습니다. A·C는 001과 011을 덮습니다.
  2. 011과 111 칸은 인접해 있고(A만 바뀜) 서로 다른 묶음에 있습니다. 이것이 앞에서 본 B = C = 1일 때의 해저드입니다.
  3. 두 칸을 함께 덮는 묶음은 B·C로, A·B와 A·C의 합의항입니다. 한 항에는 그대로, 다른 항에는 부정되어 나타나는 변수를 빼고 남은 것을 곱해 구합니다.
  4. 해저드 없는 회로: F = A·B + A·C + B·C. B = C = 1이면 B·C 항이 내내 1이므로 OR는 더 이상 내려갈 수 없습니다.

합의 곱에서는 쌍대적으로 생각하면 됩니다. 서로 다른 묶음에 있는 인접한 0을 찾고, 합 형태의 합의항을 추가해 정적 0 해저드를 제거합니다. 예를 들어 F = (A + B)·(A + C)는 B = C = 0일 때 해저드가 있으며, 인수 (B + C)를 추가해 바로잡습니다.

합의항을 추가하면 변수 하나의 변화로 생기는 정적 해저드가 제거됩니다. 동기 설계에서의 또 다른 방어책은 조합 논리가 안정되는 동안에는 그 값을 보지 않는 것입니다. 플립플롭은 글리치가 이미 끝난 클럭 에지에서만 샘플링합니다. 하지만 클럭, 비동기 리셋, 래치 인에이블에서는 글리치가 정말로 위험합니다.

흔한 실수

시뮬레이터에서 해 보기

타이밍도에서 펄스가 생기는 모습과, 합의항을 추가하면 그것이 사라지는 모습을 볼 수 있습니다.

  1. 인버터 하나, AND 두 개, OR 하나를 놓고 F = A·B + A·C를 만듭니다.
  2. B = 1, C = 1로 고정하고, A를 직접 바꿀 수 있는 입력이나 느린 클럭 신호에 연결합니다.
  3. 타이밍도를 열고 A를 1에서 0으로 여러 번 바꿉니다. 전이 순간의 F를 관찰하고 짧은 펄스나 글리치 알림이 나타나는지 봅니다.
  4. B·C를 만드는 세 번째 AND를 추가해 OR에 연결합니다.
  5. A를 다시 바꿔 보고 F가 1로 유지되는 것을 관찰합니다.

연습문제

  1. F = A·C + B·C의 정적 해저드를 찾고 해저드 없는 식을 쓰세요.
    정답

    A·C는 100과 110을, B·C는 011과 111을 덮습니다. 110과 111 칸은 인접해 있고(C가 바뀜) 서로 다른 묶음에 있으며, 이때 A = B = 1입니다. 합의항: A·B. F = A·C + B·C + A·B.

  2. 연습문제 1의 회로에서 tNOT = 4 ns, tAND = 8 ns, tOR = 8 ns이고 A = B = 1일 때, C의 어느 전이에서 글리치가 나타나며 언제 나타나고 얼마나 지속됩니까?
    정답

    C가 t = 0에서 내려갈 때입니다. B·C는 t = 8에 내려가고, C는 t = 4에 올라가며, A·C는 t = 12에 올라갑니다. 8 ns와 12 ns 사이에 OR의 두 입력이 모두 0이므로 F는 t = 16부터 t = 20 ns까지 0입니다: 4 ns. C가 올라갈 때는 글리치가 없습니다.

  3. F = A·C + B·C의 임계 경로는 무엇입니까? 연습문제 2의 지연을 사용하세요.
    정답

    C에서 인버터를 지나는 경로: 4 + 8 + 8 = 20 ns.

  4. F = (A + B)·(A + C)에서 B = C = 0일 때 출력은 어떤 값이어야 하며, 어떤 글리치가 나타날 수 있습니까?
    정답

    B = C = 0이면 F = A·A = 0입니다. A가 바뀔 때 잠깐 1로 튀는 펄스가 나타날 수 있습니다(정적 0 해저드). 인수 (B + C)를 추가하면 제거됩니다.