순서논리회로에서는 입력뿐만 아니라 입력 시점의 회로 상태(LOW/HIGH)에도 영향을 받아 출력이 결정됩니다. 따라서 순서논리회로를 구성할 때는 회로의 상태를 저장할 수 있는 기억소자가 필요한데, 이 기억소자로 사용되는 것들 중 플립플롭, 래치
는 쌍안정 상태 중 하나를 갖게 되는 1비트 기억소자입니다.
지난 포스트들에서 다룬 조합논리회로는 입력들의 조합에 의해서만 출력이 결정되었습니다.
플립플롭
은 클록 신호에 따라 정해진 시점에서의 입력을 sample하여 출력에 저장하는 동기식 순서논리소자입니다. 래치
는 클록 신호에 관계없이 모든 입력을 계속 감시하다가 클록에 관계없이 언제든 출력을 변화시키는 비동기식 순서논리소자입니다.
플립플롭
에는 SR, D, JK, T 플립플롭이 있으며 기본적인 플립플롭 회로는 NOR 또는 NAND
게이트로 구성할 수 있습니다. 이때 이들을 NOR 게이트 래치, NAND 게이트 래치라고 합니다.
SR 래치는 S(set)과 R(Reset)
으로 표기되는 2개의 입력과 Q, Q'
로 표기되는 2개의 출력으로 구성되며 이 두 개의 출력이 서로 보수 상태가 되어야 정상 상태의 래치 회로가 됩니다.
NOR 게이트로 구성된 SR 래치의 회로도는 다음과 같습니다.
이미지 출처
https://www.geeksforgeeks.org/digital-logic/latches-in-digital-logic/
R 입력단의 출력이 S 입력에 연결되고, S 입력단의 출력이 R 입력에 연결됩니다. 이에 따른 진리표는 다음과 같습니다.
S | R | Q(t + 1) |
---|---|---|
0 | 0 | Q(t) 불변 |
0 | 1 | 0 |
1 | 0 | 1 |
1 | 1 | 부정 |
Q(t + 1)
는 입력이 인가된 이후의 상태,Q(t)
는 입력이 인가되기 전의 상태를 의미
이때 중요한 것으 S와 R입력이 모두 1인 경우인데, 이때는 서로 보수 상태가 아닌 부정의 상태(Q. Q'가 모두 0)가 되어 정상적으로 동작할 수 없어서 입력을 모두 1로 주는 것은 금지되고 있습니다. 또한 이러한 이유로 인해 SR 계열의 플립플롭, 래치가 잘 사용되지 않는 이유가 되기도 합니다.
NAND 게이트로 구성된 SR 래치 회로도와 진리표는 다음과 같습니다.
이미지 출처
https://www.geeksforgeeks.org/digital-logic/latches-in-digital-logic/
S | R | Q(t + 1) |
---|---|---|
0 | 0 | 부정 |
0 | 1 | 0 |
1 | 0 | 1 |
1 | 1 | Q(t) 불변 |
마찬가지로 입력이 모두 0일 때 부정 상태가 되므로 입력이 둘 다 0으로 되는 것은 금지됩니다.
위에서 본 SR 래치는 클록펄스(CP)와 무관하게 동작하기 때문에 비동기식 SR 플립플롭의 동작을 보여줍니다. 실제로 순서논리회로에서 대부분은 클록펄스에 동기화하여 사용합니다.
클록펄스
는 회로 내에서 동작하는 모든 장치들의 동작들을 동기화하기 위해 사용하는 신호입니다.
클록형 SR 플립플롭
은 NOR 게이트 SR 래치 회로 앞에 AND 게이트 2개를 연결하고 클록펄스를 연결한 소자입니다. 클록형 SR 플립플롭의 회로도, 진리표, 논리기호는 다음과 같습니다.
이미지 출처
https://worldofcomputing.net/digital-electronics/sr-flip-flop.html
CP | S | R | Q(t+1) |
---|---|---|---|
1 | 0 | 0 | Q(t) 불변 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 부정 |
이 진리표를 기반으로 SR 플립플롭의 특성표를 나타내면 다음과 같습니다.
Q(t) | S | R | Q(t+1) |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 부정 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 부정 |
구조상 클록형 SR 플립플롭은 피드백이 존재하고 클록펄스가 1인 상태에서 동작하게 됩니다. 이때 플립플롭의 동작보다 클록펄스의 지속시간이 길다면 예측하지 못한 동작이 발생하게 됩니다.
이러한 문제를 해결하기 위해 에지 트리거 edge trigger
를 사용하는 방법이 있습니다. 플립플롭에서 출력은 입력신호의 순간적 변화에 따라 결정되는데 이러한 변화를 트리거
라고 부릅니다. 앞에서 본 클록형은 1이면 계속해서 입력을 받아들이는 레벨형 트리거
를 수행합니다. 이와 다르게 에지 트리거
는 플립플롭 내부 구조를 변경하여 클록이 0 -> 1, 1 -> 0으로 변화하는 순간에만 입력을 받아들이는 방식입니다.위 기호도처럼 플립플롭에 들어가는 클록펄스에 검출기를 추가하여 변화하는 순간에만 입력을 받아들이도록 합니다.
D 플립플롭
은 SR에서 입력이 모두 1이되어 부정상태가 되지 않도록 보장하기 위한 변형된 플립플롭입니다.
회로도는 다음과 같이 입력 신호 D가 클록펄스에 동기되어 출력에 전달되는 형태를 취하고 있습니다.
다음은 D 플립플롭의 진리표과 진리표 기반의 특성표입니다.
CP | D | Q(t+1) |
---|---|---|
1 | 0 | 0 |
1 | 1 | 1 |
Q(t) | D | Q(t+1) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | 1 |
D 플립플롭 또한 펄스전이검출기를 추가하여 에지 트리거 D 플립플롭을 구현할 수 있습니다. 펄스의 상태 변화 시점에서 동작한다는 것 외에는 클록형과 동일합니다.
마찬가지로 JK 플립플롭
또한 SR의 입력이 동시에 1이 되지 않도록 개선한 플립플롭입니다. J가 S, K가 R에 대응되는 입력이 됩니다.
JK 플립플롭
의 가장 큰 특징은 J와 K가 모두 1인 경우 이전 출력의 보수상태가 된다는 점입니다. JK 플립플롭
의 기호, 회로도, 진리표, 특성표는 다음과 같습니다.
CP | J | K | Q(t+1) |
---|---|---|---|
1 | 0 | 0 | Q(t) 불변 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | Q(t)' toggle |
Q(t) | J | K | Q(t+1) |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
마찬가지로 JK 플립플롭 또한 에지 트리거로 구성할 수 있는데, 상태 에지에서의 변화한다는 점을 제외하면 클록형과 동일하게 동작합니다.
T 플립플롭
은 JK 플립플롭에서 입력 J와 K를 하나의 입력 T로 묶어서 동작하는 플립플롭입니다. 그렇기 때문에 T 플립플롭
은 JK 플립플롭에서 입력이 모두 0이거나 1인 경우만을 사용하는 플립플롭이라고 할 수 있습니다.
이러한 동작 특성으로 T 플립플롭은 이전 상태에 대해 토글을 수행하는 것 처럼 보여져서
토글 플립플롭
이라고 부르기도 합니다.
T 플립플롭의 회로도, 진리표, 특성표는 다음과 같습니다.
CP | T | Q(t+1) |
---|---|---|
1 | 0 | Q(t) |
1 | 1 | Q(t)' 토글 |
Q(t) | T | Q(t+1) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
지금까지 설명한 플립플롭들은 클록펄스가 동작하는 동안에만 플립플롭이 동작합니다. 이에따라 입력은 클록펄스에 동기되어 출력에 전달되기 때문에 동기 입력 플립플롭이라고 할 수 있습니다.
다음 기호와 같이 클록펄스와 관계없이 비동기적으로 변화시킬 수 잇는 비동기 입력 PRE(Preset), CLR(Clear)
입력을 사용하는 플립플롭도 있습니다.