컴퓨터 이론/컴퓨터 구성

[컴퓨터 구성] #9 플립플롭(Filp-Flop)과 그 종류 (SR, D, JK, T)

호무비 2023. 5. 1. 22:32
반응형

오늘은 플립플롭에 대해 배워보겠습니다. 플립플롭은 가장 기본이 되는 기억 소자입니다. 컴퓨터가 아무리 열심히 연산을 하더라도, 그 값을 저장할 수 없다면 무용지물일 것입니다. 따라서 플립플롭의 역할이 매우 중요합니다. 여태까지 배워왔던 조합회로와는 조금 결이 달라 헷갈릴 수 있으니, 하나씩 차근차근 알아보도록 하겠습니다.

 

※ 편의상 플립-플롭 사이의 하이픈(-)은 소제목을 제외하고 모두 생략하고 표기합니다.


순차 회로 (Sequential Circuits)

 

지난번 가산기 때 조합 회로를 공부하며 잠깐 언급했었는데요. 순차 회로는 조합 회로와 반대로 이전 입력값에 따라 출력값이 달라지는 회로입니다. 플립플롭이 대표적인 순차 회로라고 할 수 있습니다. (플립플롭이 순차 회로의 기본 요소가 되므로, 플립플롭을 포함하는 회로를 순차 회로라고 하기도 합니다.)

 

이전 입력값이 다음 출력값에 영향을 준다는 것은 기억 작용을 한다는 의미입니다. 이를 활용하면 기억 장치를 만들 수 있습니다.


플립-플롭 (Filp-Flop)

 

클럭 (Clock)

플립플롭은 1bit의 이진 데이터를 저장할 수 있는 기억 장치입니다. 플립플롭의 가장 큰 특징은 클럭 펄스 생성기(clock pulse generator)에 의해 생성되는 신호에 따라 작동한다는 것입니다.

 

클럭 기호(좌), 클럭이 생성하는 신호(우)

 

클럭은 위와 같이 0, 1이 반복되는 신호를 생성합니다. 클럭 속도는 기계마다 다르며, 빠를수록 좋은 성능의 CPU라고 할 수 있습니다. 1초에 0과 1이 한번 반복될 때 1Hz라고 하는데요, 위의 예시에서는 20ns에 한번 반복하므로 50MHz 정도의 속도임을 확인할 수 있습니다. 클럭을 도입하게 되면 회로를 동기적으로 작동시킬 수 있습니다.


SR 래치 (SR Latch)

본격적으로 플립플롭을 공부하기에 앞서, 가장 기본적인 기억 회로인 SR 래치를 살펴보도록 하겠습니다. S는 Set, R은 Reset을 의미합니다.

 

SR Latch

 

잘 보면 결과값인 Q와 Q'이 S, R과 함께 입력으로 들어가는 것을 확인할 수 있습니다. 이를 되먹임/피드백(Feedback)이라고 합니다. 이처럼 출력이 입력으로 전달되는 구조 때문에 이전 값을 저장하는 기억 작용이 일어나게 됩니다. 현재에는 S와 R에 입력이 없어 X로 표시됩니다.

 

여기서 S를 1로 하고 R을 0으로 하면 Set 되어 Q값이 1이 됩니다. NOR 게이트의 진리표를 생각해 보면 이해할 수 있습니다. 그림을 보며 더 자세히 알아봅시다.

 

SR Latch 작동 원리 설명

 

S가 1이므로 Q의 X가 어떤 값이라도 아래쪽 NOR(Q')는 무조건 0이 됩니다.(좌측 이미지) 이 값은 피드백되어 위쪽 NOR로 전달되고, 아까 R을 0으로 설정했으므로 Q값은 1이 됩니다.(우측 이미지) 이 Q값이 다시 아래로 전달되지만 더 이상 변동 사항이 없기 때문에 값은 여기에서 고정됩니다. 따라서 최종적으로 Q=1, Q'=0이 되는 것입니다.

 

S, R 값을 반대로 하면 Reset 되어 Q값이 0이 됩니다. 원리는 바로 설명한 것과 같습니다.

 

S와 R이 모두 0일 경우에는 이전의 Q값이 저장됩니다. Q가 1이었다고 해봅시다. 아래쪽은 그대로 0이고, 이 값이 위로 전달되지만, 00이므로 여전히 Q는 1입니다. 반대의 경우도 마찬가지입니다.

 

※ S, R이 모두 1인 경우는 사용하지 않습니다.


SR 플립-플롭 (SR Filp-Flop)

SR 플립플롭은 가장 기본적인 플립플롭입니다. 위에서 만든 SR 래치가 조금 변형된 구조입니다. 클럭이 연결되었다는 점만 제외하면 똑같이 동작합니다.

 

SR Filp-Flop 기호(좌), 회로 구성(우)

 

이처럼 AND 게이트로 클럭과 S, R 입력을 연결해주면 됩니다. 클럭 신호가 1이 될 때 S, R값이 전달되는 것을 확인할 수 있습니다.

 

오른쪽의 심볼을 비교해 보면 -▷와 같이 화살표 모양 부분이 있다는 것이 Latch와는 다른데요, 바로 이 부분이 클럭 신호가 들어오는 부분입니다.

 

S, R 값에 따른 기능을 정리한 특성표(Characteristic table)는 다음과 같습니다. 바로 위에서 살펴봤던 SR 래치와 같습니다. (Q(t)는 현재 상태, Q(t+1)은 다음 상태를 의미합니다.)

 

SR Filp-Flop 특성표


D 플립-플롭 (D Filp-Flop)

D는 Data를 의미합니다. 신호 전달이 늦어진다는 점에서(회로를 더 많이 거치므로) Delay의 의미도 있습니다. D 플립플롭은 SR 플립플롭에서 R을 사용하지 못하도록 막아놓은 회로입니다. 즉, 다음 클럭까지 D값을 기억하는 회로입니다.

 

D Filp-Flop 기호(좌), 회로 구성(우)

 

구조를 보면 S가 D로 바뀌어 있고, R이 D의 NOT으로 바뀐 것을 확인할 수 있습니다. 값을 넣어보면 쉽게 알 수 있지만, D=0일 때, Q=0, D=1일 때, Q=1이 됩니다.

 

D 플립플롭의 특성표는 다음과 같습니다.

 

D Filp-Flop 특성표

 

반응형

JK 플립-플롭 (JK Filp-Flop)

JK 플립플롭은 SR 플립플롭과 매우 유사합니다. SR에서 정의되지 않았던 11을 NOT 기능(=Toggle)으로 구현해 주었다는 차이점이 있습니다.

 

JK Filp-Flop 기호(좌), 회로 구성(우)

 

3입력 AND 게이트를 사용하여 Q값을 가져온다는 점이 SR과의 차이점입니다. 이에 따라 11일 때, 값이 반전되는 기능을 사용할 수 있습니다. 다만 race problem(경쟁 문제) 때문에 현재 위에 있는 회로를 그대로 사용하기에는 조금 어려움이 있습니다.

 

직접 회로 값을 체크해 가며 동작시키다 보면 11일 때 값이 고정되지 않고 이리저리 바뀌는 것을 확인할 수 있습니다. 부정 기능이 한 번만 동작하는 것이 아니라 계속 반복되는데, 그 과정에서 입력이 꼬이면서 잘못된 결과가 나오게 되는 것입니다. 이는 에지 트리거링이나 마스터 슬레이브를 사용하여 해결할 수 있는데, 추후 포스팅에서 다루도록 하겠습니다.

 

JK 플립플롭의 특성표는 다음과 같습니다. 특성표 역시 SR과 거의 똑같고, 11일 때 기능이 하나 추가된 것을 확인할 수 있습니다.

 

JK Filp-Flop 특성표


T 플립-플롭 (T Filp-Flop)

T는 Toggle을 의미합니다. 토글은 0, 1이 바뀐다는 뜻입니다. (On/Off) 즉, T 플립플롭은 T가 0이면 그대로, 1이면 Q를 반대로 바꾸는 장치입니다. JK 플립플롭에서 2가지 기능을 빼서 만들 수 있습니다.

 

T Filp-Flop 기호(좌), 회로 구성(우)

 

회로 구성 역시 JK 플립플롭의 변형입니다. T가 그대로 JK 양쪽의 입력이 됩니다. 이에 따라 0일 때는 그대로, 1일 때는 토글 기능을 수행합니다. T 플립플롭도 토글 기능을 가지고 있다 보니 race problem이 발생해 위의 회로 그대로 사용할 수는 없고, 조금 더 개선이 필요합니다. (물론 race problem이 토글만의 문제는 아니고, 자세한 설명은 나중에 기회가 된다면 포스팅으로 다루도록 하겠습니다.)

 

T 플립플롭의 특성표는 다음과 같습니다. JK 특성표에서 첫 번째와 마지막만 남은 형태입니다.

 

T Filp-Flop 특성표

 

(플립플롭 심볼(기호) 이미지 출처: https://commons.wikimedia.org/wiki/File:SR_(NAND)_Flip-flop.svg?uselang=ko)


여기표 (Excitation Table)

 

여기표는 플립플롭 종류에 따라 현재 상태 Q(t)에서 다음 상태 Q(t+1)로 변할 때 어떤 입력을 취해야 하는지 알려주는 표입니다. 앞으로 이 플립플롭으로 카르노맵도 만들고, 회로도 그려야 하고, 매번 일일이 생각해야 하는데, 여러모로 복잡하므로 이를 보기 좋게 정리해 놓은 것입니다. 위의 4가지 플립플롭에 대한 표는 다음과 같습니다.

 

Flip-Flop 여기표

 

예를 들어 Q(t)=0일 때 Q(t+1)=1로 만들고 싶다고 합시다. 그러면 SR 플립플롭에서는 S=1, R=0으로 설정하면 됩니다. D라면 D=1로 설정하면 되겠죠. JK라면 J만 1로 설정하면 되고 K는 don't care(무관항)입니다. T는 T=1로 설정하면 됩니다.

 

각 플립플롭의 특성과 기능을 생각하면 쉽게 이해할 수 있습니다. SR과 JK는 역시 유사하지만, 11이 정의된 JK는 토글 기능 덕분에 무관항이 더 많은 것을 알 수 있습니다. 예를 들어 0->1로 바꿀 때, J=1, K=0이면 1로 set 하는 기능이므로 잘 동작합니다. J=1, K=1일 때는 부정 연산을 하여 그 보수 값을 얻게 되는데 0의 부정은 1이니 역시 원하는 목적대로 1로 바꿀 수 있습니다. (더 많은 방법으로 같은 연산이 가능하므로 무관항이 늘어나는 것)

 

참고로 '여기(勵起)'라는 표현은 물리에서 전자의 들뜬 상태를 의미하는데요, 영어로는 excite라고 합니다. 이 excite라는 단어에는 전류를 일으킨다는 뜻도 있습니다. 즉, 클럭 신호(전류)를 일으켜 Q(t)에서 Q(t+1)로 바뀌는 것에서 이름을 따서 여기표(Excitaion Table)가 된 것 같습니다.


플립플롭에 대해 알아보았습니다. 처음으로 공부해 본 기억 장치였는데요. 레지스터 만드는 데 사용되니 잘 알아두시길 바랍니다.

 

직접 조사해서 작성하는 글이다 보니 일부 정확하지 않은 정보가 포함되어 있을 수 있습니다.

궁금한 사항이나 잘못된 내용이 있으면 댓글로 알려주세요~

구독과 좋아요, 환영합니다!

 

반응형