지금까지는 우리가 조합 논리 회로에 대해서 알아보았습니다. 논리식을 간소화하고, 카르노맵을 사용하며, 이진 디코더, 멀티플렉서 등 조합 논리회로의 부품을 살펴보았습니다. 조합 논리 회로는 모든 출력값이 "입력값"에만 의해서 결정되기에, 입력값이 같다면 항상 동일한 출력값이 나오게 됩니다. 그러나 순서 논리 회로는 "입력값"과 "회로의 상태", 이 2가지에 의해서 출력값이 결정이 되는 회로입니다. 즉, 출력값이 입력값에만 의존하지 않는다는 것입니다. 이제부터는 순서 논리 회로에 대해서 알아보고자 합니다.
플립플랍(Flip-Flop)
순서 논리 회로에서는 "회로의 상태"가 출력값에 영향을 끼치게 되는데, 회로의 상태를 저장하기 위해서 사용하는 회로가 바로 "플립플랍"입니다. 플립플랍은 1비트의 정보를 저장하며, 입력 신호가 변하기 전에는 현재의 상태를 그대로 유지합니다. 즉, 1비트의 정보를 저장하기 떄문에 0과 1, 두 가지 상태를 저장하며 현재 상태에서 다른 상태로 변환하거나 또는 현재 상태를 유지할 수 있습니다.
이러한 특성으로 인해 플립플랍은 메모리로서 활용될 수 있습니다.(기억 회로)
주로 활용되는 플립플랍은 다음과 같습니다. (이들에 대해서는 다음 포스팅에서 다루도록 하겠습니다.)
- SR 플립플랍 (Set / Reset)
- JK 플립플랍 (Set / Reset / Toggle)
- D 플립플랍 (Data or Delay)
- T 플립플랍 (Toggle)
안정과 불안정(Stable, Unstable)
회로의 상태를 저장하기 위한 회로가 플립플랍이라고 말했습니다. 그렇다면 회로의 상태에는 무엇이 있는지를 알아야합니다. 회로의 상태에는 두 가지가 있습니다. 바로 "회로가 안정(Stable)한 상태", "회로가 불안정(Unstable)한 상태"입니다.
"회로가 안정되었다는 것"은 시간이 지나도 회로의 값이 변하지 않는 것을 말합니다. 반면 "회로가 불안정하다는 것"은 시간이 지남에 따라 회로의 값이 변하는 것을 말합니다. "피드백"을 통해서 이러한 회로의 상태를 알 수 있으며 1비트의 정보를 저장하는 것이 가능합니다.
그런데 시간이 지나면 값이 변하는 회로를 메모리 역할로 사용할 수 있을까요? 당연히 불가능합니다. 메모리는 시간이 지나더라도 그 값이 변해서는 안되기 때문입니다. 그렇지만 사용자가 직접 메모리의 값을 바꾸고자 할 때는 바꿀 수 있어야 합니다. 그것이 바로 플립플랍의 역할입니다.
래치(Latch)
플립플랍을 자세히 살펴보기 전, 알아야 하는 회로가 있는데 그것은 바로 "래치(Latch)"입니다.
래치는 순서 논리 회로에서 한 비트의 정보를 저장하는 회로입니다. 어떤 신호가 회로에 공급되어 흐르다 신호가 끊기게 되면 회로의 신호 또한 끊기게 되는데, 래치도 플립플랍도 모두 그 신호를 잃지 않고 흐르게 합니다.
래치의 대표적인 종류 중 하나가 SR래치인데 이를 알아보겠습니다.
플립플랍의 값을 Set 또는 Reset 한다는 뜻에서 이름이 SR래치입니다. SR래치는 두 개의 입력과 두 개의 출력을 가지는데, 이때 두 개의 출력은 서로의 반대값을 가집니다. 특성표(진리표)를 살펴보면서 값을 해석해보도록 하겠습니다.
$S$ | $R$ | $Q$ | $\overline{Q}$ |
0 | 0 | 이전 값 | 이전 값 |
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | X | X |
S = 0, R = 0일 때
이전 상태의 출력값을 계속 유지함을 알 수 있습니다.
S = 1, R = 0일 때
S = 0, R = 1일 때
S = 1, R = 1일 때
$Q$와 $\overline{Q}$의 값이 동일하기 때문에, 부정 상태가 되어버립니다. 그렇기에 SR = 11 입력값은 SR 플립플랍에서 사용하지 않습니다.
클럭(Clock)
컴퓨터 내의 모든 부품은 클럭에 맞추어서 동작합니다. 컴퓨터 내부의 시계와도 같은 역할을 하는 것이 클럭이며, 여러 가지 컴퓨터 내부의 모듈들의 동기화를 이루며 동작하기 위해서 클럭 신호는 반드시 필요합니다.
위의 사진을 클럭 주기(Clock Period)라고 합니다. 클럭 주기가 짧을 수록 컴퓨터는 빨라지게 됩니다. 그러나 클럭 주기를 무작정 짧게 하면 오버클러킹(Over-Clocking), 시스템이 안정되게 작동하는 속도를 넘어섬으로 인해 정상적인 가동을 보장할 수 없고 회로의 동작이 망가질 수 있습니다.
클럭에 대한 얘기를 왜 하느냐? 바로 "플립플랍"과 아주 밀접한 영향을 가지고 있기 때문입니다. SR 래치와 SR 플립플랍은 모두 이진 셀로서 신호를 잃지 않고 흐르게 하는 특성이 있습니다. 그러나 핵심적인 부분에서 다른 것이 있는데 바로 SR 래치는 클럭을 사용하지 않으나 SR 플립플랍은 클럭을 사용한다는 것입니다. 즉, 플립플랍은 클럭이 들어올 때만 회로가 작동된다는 것입니다.
순서 논리 회로 (Sequential Logic Circuit)
플립플랍을 통해 회로의 상태를 저장하며, 조합 논리 회로와 함께 구성되는 회로가 바로 "순서 논리 회로"입니다. 순서 논리 회로의 특징은 다음과 같습니다.
- "입력값"과 "현재의 상태"를 통해 회로의 출력값이 결정됩니다.
- "피드백"을 가집니다, 회로의 출력 결과가 회로의 상태 변경을 위해 다시 사용됩니다.
- 플립플랍과 같은 "기억 회로"를 가집니다.
- "클럭"에 의해 동작합니다. 동일한 값이 들어오더라도 불안정할 수 있기에 클럭을 통해 회로의 동작을 제어해야 합니다.
동기 회로, 비동기 회로 (Synchronous, Asynchronous)
마지막으로 알아볼 것은 "동기"와 "비동기" 방식입니다. 순서 논리회로는 회로의 상태를 고려해야 하고, "클럭"에 따른 신호의 타이밍을 생각해야 합니다. 이로 인해 순서 논리 회로는 2종류로 나누어질 수 있는데, 바로 "동기식 순서 회로(Synchronous)"와 "비동기식 순서 회로(Asynchrounous)"입니다.
동기 순서 회로 (Synchronous)
클럭 펄스에 동기화되어 동작하는 회로를 "동기 순서 회로"라고 합니다. 모든 플립플랍이 클럭 펄스의 입력 시간에 맞춰 동작하는 것입니다.
비동기 순서 회로(Asynchronous)
클럭 펄스에 상관 없이 플립플랍의 입력이 변화하는 순서에 맞춰서 동작하는 회로를 "비동기 순서 회로"라고 합니다. 각각의 플립플롭이 이전의 플립플랍의 결과에 맞춰 차례로 동작하기에 첫 플립플랍을 위한 클럭 펄스만 필요합니다.