링 카운터

**링 카운터**(Ring counter)는 시프트 레지스터로 연결된 플립플롭으로 구성된 계수기의 한 유형으로, 마지막 플립플롭의 출력이 첫 번째 플립플롭의 입력으로 연결되어 "원형" 또는 "링" 구조를 이룬다. 링 카운터에는 두 가지 유형이 있다. * Overbeck counter **스트레이트 링 카운터**(straight ring counter)는 **원-핫 카운터**(one-hot counter)라고도 불리며, 마지막 시프트 레지스터의 출력을 첫 번째 시프트 레지스터 입력에 연결하여 하나의 1(또는 0) 비트를 링을 따라 순환시킨다. * Johnson code **트위스티드 링 카운터**(twisted ring counter)는 **스위치-테일 링 카운터**(switch-tail ring counter), **워킹 링 카운터**(walking ring counter), **존슨 카운터**(Johnson counter), 또는 **뫼비우스 카운터**(Möbius counter)라고도 불리며, 마지막 시프트 레지스터 출력의 보수를 첫 번째 레지스터의 입력에 연결하여 링을 따라 1이 연속된 다음 0이 연속되는 스트림을 순환시킨다.
# 4비트 링 카운터 시퀀스
{|class="wikitable" |- ! colspan="5"|스트레이트 링 카운터 || || colspan="5"|존슨 카운터 |- ! | 상태 || Q0 || Q1 || Q2 || Q3 || || 상태 || Q0 || Q1 || Q2 || Q3 |- ! 0 | |1 ||0 || 0 || 0 | ! 0 | 0 || 0 || 0 || 0 |- ! 1 | 0 || |1 || 0 || 0 | ! 1 | |1 || 0 || 0 || 0 |- ! 2 | 0 || 0 || |1 || 0 | ! 2 | |1 || |1 || 0 || 0 |- ! 3 | 0 || 0 || 0 || |1 | ! 3 | |1 || |1 || |1 || 0 |- ! 0 | |1 || 0 || 0 || 0 | ! 4 | |1 || |1 || |1 || |1 |- ! 1 | 0 || |1 || 0 || 0 | ! 5 | 0 || |1 || |1 || |1 |- ! 2 | 0 || 0 || |1 || 0 | ! 6 | 0 || 0 || |1 || |1 |- ! 3 | 0 || 0 || 0 || |1 | ! 7 | 0 || 0 || 0 || |1 |- ! 0 | |1 || 0 || 0 || 0 | ! 0 | 0 || 0 || 0 || 0 |}
# 속성
링 카운터는 유한 상태 기계를 만들기 위해 하드웨어 설계(예: ASIC 및 FPGA 설계)에 자주 사용된다. 이진 카운터는 링 카운터보다 훨씬 복잡하고 비트 수가 증가함에 따라 전파 지연이 더 높아지는 가산기 회로를 필요로 하는 반면, 링 카운터의 전파 지연은 비트 수에 관계없이 거의 일정하다. 스트레이트 및 트위스티드 형태는 서로 다른 속성과 상대적인 장단점을 가진다. 링 카운터의 일반적인 단점은 상태 번호의 일반적인 이진 인코딩보다 밀도가 낮은 코드라는 것이다. 이진 카운터는 코드의 비트 수를 N이라고 할 때 2N개의 상태를 나타낼 수 있는 반면, 스트레이트 링 카운터는 N개의 상태만 나타낼 수 있고 존슨 카운터는 2N개의 상태만 나타낼 수 있다. 이는 레지스터가 조합 논리보다 더 비싼 하드웨어 구현에서 중요한 고려 사항이 될 수 있다. 존슨 카운터는 동일한 수의 시프트 레지스터에서 두 배 많은 계수 상태를 제공하고, 시작 시 첫 번째 계수 비트를 외부에서 주입할 필요 없이 모든 0 상태에서 자체 초기화할 수 있기 때문에 선호되기도 한다. 존슨 카운터는 그레이 부호와 같이 인접한 상태가 한 비트만 다른(즉, 해밍 거리가 1인) 코드를 생성하는데, 이는 비트 패턴이 비동기적으로 샘플링될 경우 유용할 수 있다. 일부 시퀀스 컨트롤러에서와 같이 카운터 상태의 완전하게 디코딩되거나 원-핫 표현이 필요한 경우, 스트레이트 링 카운터가 선호된다. 원-핫 속성은 코드 세트가 최소 해밍 거리 2로 분리되어 있음을 의미하므로, 모든 단일 비트 오류를 감지할 수 있다(한 비트를 켜고 한 비트를 끄는 것 이외의 모든 오류 패턴도 감지할 수 있다). 때로는 양방향 시프트 레지스터(각 플립플롭의 입력을 왼쪽 또는 오른쪽 이웃에서 가져오기 위해 멀티플렉서를 사용)가 사용되어 양방향 또는 업-다운 링 카운터를 만들 수 있다.
# 논리도
스트레이트 링 카운터는 다음과 같은 논리 구조를 가진다. D형 플립플롭을 사용한 4비트 링 카운터. 동기식 클록 및 리셋 라인 표시.]] 초기 원-핫 패턴을 설정하는 리셋 라인 대신, 스트레이트 링은 때때로 마지막을 제외한 모든 출력에 분산 피드백 게이트를 사용하여 자체 초기화되도록 만들어지는데, 이는 마지막을 제외한 어떤 단계에도 1이 없을 때 입력에 1이 제공되도록 한다. 로버트 로이스 존슨의 이름을 딴 존슨 카운터는 반전이 있는 링이다. 다음은 4비트 존슨 카운터이다. D형 플립플롭을 사용한 4비트 존슨 카운터. 동기식 클록 및 리셋 라인 표시.]] 마지막 시프트 레지스터에서 나오는 Q 신호가 첫 번째 D 입력으로 피드백되기 전에 반전을 나타내는 작은 거품에 주목하라. 이것이 존슨 카운터이다.
# 역사
디지털 컴퓨팅 시대 이전에는 디지털 카운터가 방사성 붕괴와 같은 무작위 사건의 속도를 측정하는 데 사용되었다. 빠른 "프리스케일링" 카운터는 무작위 사건의 속도를 더 관리하기 쉽고 더 규칙적인 속도로 줄였다. 5상 링 카운터는 1940년 이전에 C. E. Wynn-Williams가 개발한 것과 같이 십진수(10의 거듭제곱) 스케일러를 만들기 위해 2로 나누는 스케일러와 함께 사용되었다. 초기 링 카운터는 각 단계에 하나의 활성 소자(진공관 또는 트랜지스터)만 사용했으며, 예를 들어 내셔널 캐시 레지스터 컴퍼니의 로버트 E. 맘마가 1941년에 특허를 출원한 것과 같이 원-핫 상태 이외의 상태를 억제하기 위해 로컬 바이안정 플립플롭 대신 글로벌 피드백에 의존했다. 윌콕스 P. 오버벡은 단일 진공관에 여러 개의 애노드를 사용하는 버전을 발명했다. 그의 업적을 기려 링 카운터는 때때로 "오버벡 링" (그리고 2006년 이후 위키백과가 2006년부터 2018년까지 해당 용어를 사용했기 때문에 때때로 "오버벡 카운터")라고 불리기도 한다. 에니악은 10진수 원-핫 링 카운터를 기반으로 한 10진수 산술을 사용했다. NCR의 맘마와 MIT의 오버벡의 연구는 특허청이 에니악 기술에 대한 J. 프레스퍼 에커트와 존 모클리의 특허를 무효화하는 데 사용된 선행 기술 연구 중 하나였다. 1950년대에는 각 단계에 두 개의 진공관 또는 쌍삼극 플립플롭을 사용하는 링 카운터가 등장했다. 로버트 로이스 존슨은 가장 간단한 피드백 논리로 다양한 수의 상태를 만들기 위해 여러 가지 시프트 레지스터 기반 카운터를 개발했으며, 1953년에 특허를 출원했다. 존슨 카운터는 이들 중 가장 간단한 것이다.
# 1-of-10 code응용
링 카운터의 초기 응용 분야는 주파수 프리스케일러(예: 가이거 계수기 및 유사한 기기), 암호 해독에서 패턴 발생 횟수를 세는 카운터(예: 히스 로빈슨 (암호 해독 기계) 및 콜로서스 (컴퓨터)), 그리고 컴퓨터 및 계산기에서 이진화 십진법 (콜로서스와 같이) 또는 10상 원-핫 (에니악과 같이) 표현을 사용하는 십진수 산술을 위한 누산기 카운터 요소였다. 스트레이트 링 카운터는 완전하게 디코딩된 원-핫 코드를 생성하여 주기적인 제어 주기의 각 상태에서 특정 동작을 활성화하는 데 자주 사용된다. 원-핫 코드는 각 상태에 하나의 게이트를 사용하여 존슨 카운터에서도 디코딩할 수 있다. Libaw–Craig code 원-핫 코드를 생성하고 주파수 프리스케일러를 생성하는 효율적인 대체 방법 외에도, 존슨 카운터는 그레이 부호와 같이 한 번에 한 비트만 변경되므로 글리치 없이 비동기적으로 샘플링할 수 있는 짝수 상태의 주기를 인코딩하는 간단한 방법이기도 하다. 초기 컴퓨터 마우스는 양방향(업-다운) 2비트 존슨 또는 그레이 인코딩을 사용하여 두 차원 각각의 움직임을 나타냈지만, 마우스에서는 이러한 코드가 일반적으로 플립플롭 링에 의해 생성되지 않았다(대신 전기-기계적 또는 광학 직교 인코더에 의해). 2비트 존슨 코드와 2비트 그레이 코드는 동일하며, 3비트 이상에서는 그레이 코드와 존슨 코드가 다르다. 5비트의 경우, 존슨 카운터의 코드는 "비계수 십진 코드 샤프트 디지타이저"에서 온 십진수에 대한 Libaw-Craig-Code와 동일하다. 워킹 링 카운터(존슨 카운터라고도 함)와 몇 개의 저항기는 글리치 없는 정현파 근사치를 생성할 수 있다. 조정 가능한 프리스케일러와 결합하면, 이것은 아마도 가장 간단한 수치 제어 발진기일 것이다. 두 개의 워킹 링 카운터는 이중 톤 다중 주파수 신호 및 초기 모뎀 톤에 사용되는 연속 위상 주파수 편이 변조를 생성하는 가장 간단한 방법일 수 있다. Don Lancaster. "TV Typewriter Cookbook". (TV Typewriter). 1976\. p. 180-181. {| | {| class="wikitable" |+ 십진수 ! | |- | 0 |- | 1 |- | 2 |- | 3 |- | 4 |- | |5 |- | |6 |- | |7 |- | |8 |- | |9 |} | {| class="wikitable" |+ 1비트 ! |1 |- | 0 |- | |1 |- | |0 |- | |1 |- | |0 |- | |1 |- | |0 |- | |1 |- | |0 |- | |1 |- |} | {| class="wikitable" |+ 2비트 ! |2 !! |1 |- | 0 || 0 |- | 0 || |1 |- | |1 || |1 |- | |1 || 0 |- | |0 || |0 |- | |0 || |1 |- | |1 || |1 |- | |1 || |0 |- | |0 || |0 |- | |0 || |1 |- |} | {| class="wikitable" |+ 3비트 ! |3 !! |2 !! |1 |- | 0 || 0 || 0 |- | 0 || 0 || |1 |- | 0 || |1 || |1 |- | |1 || |1 || |1 |- | |1 || |1 || 0 |- | |1 || 0 || 0 |- | |0 || |0 || |0 |- | |0 || |0 || |1 |- | |0 || |1 || |1 |- | |1 || |1 || |1 |- |} | {| class="wikitable" |+ 4비트 존슨 ! |4 !! |3 !! |2 !! |1 |- | 0 || 0 || 0 || 0 |- | 0 || 0 || 0 || |1 |- | 0 || 0 || |1 || |1 |- | 0 || |1 || |1 || |1 |- | |1 || |1 || |1 || |1 |- | |1 || |1 || |1 || 0 |- | |1 || |1 || 0 || 0 |- | |1 || 0 || 0 || 0 |- | |0 || |0 || |0 || |0 |- | |0 || |0 || |0 || |1 |- |} | {| class="wikitable" |+ Libaw–Craig ! |5 !! |4 !! |3 !! |2 !! |1 |- | 0 || 0 || 0 || 0 || 0 |- | 0 || 0 || 0 || 0 || |1 |- | 0 || 0 || 0 || |1 || |1 |- | 0 || 0 || |1 || |1 || |1 |- | 0 || |1 || |1 || |1 || |1 |- | |1 || |1 || |1 || |1 || |1 |- | |1 || |1 || |1 || |1 || 0 |- | |1 || |1 || |1 || 0 || 0 |- | |1 || |1 || 0 || 0 || 0 |- | |1 || 0 || 0 || 0 || 0 |- |} | {| class="wikitable" |+ 1-2-1 ! |5 !! |4 !! |3 !! |2 !! |1 |- | |1 || 0 || 0 || 0 || |1 |- | 0 || 0 || 0 || 0 || |1 |- | 0 || 0 || 0 || |1 || |1 |- | 0 || 0 || 0 || |1 || 0 |- | 0 || 0 || |1 || |1 || 0 |- | 0 || 0 || |1 || 0 || 0 |- | 0 || |1 || |1 || 0 || 0 |- | 0 || |1 || 0 || 0 || 0 |- | |1 || |1 || 0 || 0 || 0 |- | |1 || 0 || 0 || 0 || 0 |- |} | {| class="wikitable" |+ 1-of-10 code ! |10 !! |9 !! |8 !! |7 !! |6 !! |5 !! |4 !! |3 !! |2 !! |1 |- | 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || |1 |- | 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || |1 || 0 |- | 0 || 0 || 0 || 0 || 0 || 0 || 0 || |1 || 0 || 0 |- | 0 || 0 || 0 || 0 || 0 || 0 || |1 || 0 || 0 || 0 |- | 0 || 0 || 0 || 0 || 0 || |1 || 0 || 0 || 0 || 0 |- | 0 || 0 || 0 || 0 || |1 || 0 || 0 || 0 || 0 || 0 |- | 0 || 0 || 0 || |1 || 0 || 0 || 0 || 0 || 0 || 0 |- | 0 || 0 || |1 || 0 || 0 || 0 || 0 || 0 || 0 || 0 |- | 0 || |1 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 |- | |1 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 || 0 |} | |}
# 내용주
refs= Johnson counter circuits with single states decoded in this way can be found in the original IBM MDA and CGA video display adapter designs, in the timing sequencer logic: one or two 74x174 hex D-type flip-flop ICs are wired as a shift register, fed back with inversion to form a Johnson counter, and 2-input NAND 게이트s (in the MDA) or XOR 게이트s (in the CGA) are used to decode states used as signals such as +RAS (Row Address Strobe [to DRAM]) and S/-L (Shift / NOT Load). Source: IBM Personal Computer Options & Adapters Technical Reference, Monochrome Display and Printer Adapter, logic diagrams; IBM Personal Computer Options & Adapters Technical Reference, Color Graphics Monitor Adapter, logic diagrams.