해저드 (논리)

디지털 논리에서 해저드(hazard)는 동기 회로와 비동기 회로 모두에서 시스템의 결함이나 외부 영향으로 인해 발생하는 바람직하지 않은 현상이다. 논리 해저드는 입력 변수의 변화가 논리 요소(NOT 게이트, AND 게이트, OR 게이트 등)로 인한 지연으로 인해 출력을 올바르게 변경하지 못하는 문제의 한 형태이다. 이로 인해 논리가 기능을 제대로 수행하지 못한다. 가장 일반적인 세 가지 해저드 유형은 일반적으로 정적, 동적 및 함수 해저드라고 한다.

해저드는 논리 회로가 결국 원하는 기능으로 안정화되기 때문에 일시적인 문제이다. 따라서 동기 설계에서는 다른 클록 도메인에서 사용되거나 시스템 외부로 라우팅되기 전에 회로의 출력을 레지스터하는 것이 표준 관행이므로 해저드가 문제가 되지 않는다. 그러나 그렇지 않은 경우 해저드는 다른 연결된 시스템에 영향을 미칠 수 있으므로 반드시 제거해야 한다.

정적 해저드
정적 해저드는 신호가 일정하게 유지될 것으로 예상될 때 신호 상태가 연속해서 두 번 변경되는 현상이다. 하나의 입력 신호가 변경되면 출력이 올바른 값으로 안정화되기 전에 순간적으로 변경된다. 정적 해저드에는 두 가지 유형이 있다.

 정적-1 해저드: 출력이 현재 1이고 입력이 변경된 후 출력이 1로 안정화되기 전에 순간적으로 0,1로 변경된다.
 정적-0 해저드: 출력이 현재 0이고 입력이 변경된 후 출력이 0으로 안정화되기 전에 순간적으로 1,0으로 변경된다.

곱의 합(Sum Of Products) 표현식에 기반한 제대로 구성된 2단계 AND-OR 논리에서는 정적-0 해저드가 발생하지 않는다(그러나 정적-1 해저드는 여전히 발생할 수 있다). 반대로 합의 곱(Product Of Sums) 표현식의 OR-AND 구현에서는 정적-1 해저드가 발생하지 않는다(그러나 정적-0 해저드는 여전히 발생할 수 있다).

정적 해저드를 제거하는 가장 일반적으로 사용되는 방법은 중복 논리(논리 표현식의 합의 항)를 추가하는 것이다.

정적 해저드의 예시
AND 게이트 등 물리적 논리 요소에 지연이 발생하는 불완전한 회로를 고려해 보자.

간단한 회로는 다음 함수를 수행한다.

시작 다이어그램을 보면 지연이 발생하지 않으면 회로가 정상적으로 작동할 것이라는 것을 알 수 있다. 그러나 두 개의 게이트는 정확히 똑같이 제조되지 않는다. 이러한 불완전성으로 인해 첫 번째 AND 게이트의 지연은 그 반대편 게이트와 약간 다를 것이다. 따라서 입력이 111에서 011로 변경될 때, 즉 A가 상태를 변경할 때 오류가 발생한다.

이제 해저드가 대략 어떻게 발생하는지 알았으므로, 이 문제를 해결하는 방법에 대한 더 명확한 그림과 해결책을 얻기 위해 카노 맵을 살펴보자.

허프만(Huffman)이 증명한 정리는 중복 루프 'BC'를 추가하면 해저드가 제거될 것이라고 말한다.

수정된 함수는 다음과 같다.

이제 불완전한 논리 요소가 있더라도 A가 상태를 변경할 때 예시에서 해저드 징후가 나타나지 않을 것임을 알 수 있다. 이 이론은 모든 논리 시스템에 적용될 수 있다. 컴퓨터 프로그램이 이 작업의 대부분을 처리하지만 간단한 예시에서는 수동으로 디버깅하는 것이 더 빠르다. 입력 변수가 많으면(예: 6개 이상) 카노 맵에서 오류를 '보는' 것이 매우 어려워진다.

동적 해저드
동적 해저드는 신호가 한 번만 상태를 변경할 것으로 예상될 때 신호 상태가 연속해서 여러 번 변경되는 일련의 현상이다. 동적 해저드는 단일 입력 변경의 결과로 출력이 한 번 이상 변경될 가능성이다.

동적 해저드는 출력으로 가는 다른 경로가 있는(입력에서) 더 큰 논리 회로에서 종종 발생한다. 각 경로의 지연이 다르면 필요한/예상 출력과 다른 출력 값이 변경될 가능성이 있음이 빠르게 명확해진다.

예: 논리 회로는 출력 상태를 1에서 0으로 변경해야 하지만, 대신 1에서 0으로 변경된 다음 1로 변경되고 마지막으로 올바른 값인 0으로 안정된다. 이것이 동적 해저드이다.

일반적으로 동적 해저드는 해결하기가 더 복잡하지만, 회로에서 모든 정적 해저드가 제거되면 동적 해저드는 발생할 수 없다는 점에 유의해야 한다.

기능 해저드
정적 및 동적 해저드와 달리 기능 해저드는 둘 이상의 입력에 적용된 변경으로 인해 발생하는 해저드이다. 이를 제거하기 위한 특정 논리적 해결책은 없다. 정말 신뢰할 수 있는 한 가지 방법은 입력이 동시에 변경되는 것을 방지하는 것이지만, 일부 경우에는 적용할 수 없다. 따라서 각 경로에서 지연이 동일하도록 회로를 신중하게 설계해야 한다.

기타
  조합 논리 해저드
 조합 논리에서 논리 회로의 신호 전파 지연 분포와 구현된 논리 회로 기능의 전체적인 설계에 따라 달라지는 해저드이다.

  조합 기능 해저드
 조합 논리에서 프로그래밍의 상위 수준에서 출력 논리 함수를 연구하고 수정함으로써 감지하고 억제할 수 있는 해저드이다.
  순차 해저드 루프 시스템에서 발견되는 바람직하지 않은 신호 변경의 일종이다.

 같이 보기 
 돈트 케어
 글리치
 해저드 (컴퓨터 아키텍처)
 경쟁 상태

 플로팅 바디 효과, SOI 장치에서 해저드의 가능한 원인

 각주 

 http://www.ee.surrey.ac.uk/Projects/Labview/Sequential/Course/02-Hazards/hazards.htm#FunctionHazards

분류:디지털 전자공학