순서 논리회로 (Sequential Logic Circuit)
순서 논리회로(Sequential Logic Circuit)는 입력과 내부 상태에 따라 출력값이 결정된다. 순서 논리회로는 입력과 출력, 내부 상태의 시간열(Time Sequence)로 표현된다. 신호의 타이밍에 따라 동기 순서 논리회로와 비동기 순서 논리회로로 구분된다.
- `동기 순서 논리회로`: 회로의 상태가 정해진 순간의 입력값에 따라서만 변하는 회로
- `비동기 순서 논리회로`: 회로의 상태가 어느 순간에나 입력이 변화하는 순서에 따라 변하는 회로
동기 순서 논리회로는 "클록 펄스(Clock Pulse)"라고 하는 특정 신호를 사용하는데, 이는 불연속적인 이산 순간에만 저장 요소의 내용을 변화시키는 신호를 말한다. 클록 펄스는 저장 요소가 펄스 도착 순간에만 입력값에 따라 변화되도록 시스템 전체에 제공되어야 한다. 클록 펄스를 가지는 동기 순서 논리회로는 "플립플롭(Flip-Flop)"이라고 하는 저장 요소를 사용한다.
비동기 순서 논리회로는 "시간지연소자(Time-Delay Device)"를 통해 상태를 저장한다. 시간지연소자를 이용하여 신호를 전달하려면 일정 시간이 걸리기에 시간지연소자는 기억 능력을 가진다. 그런데 논리게이트 자체적으로 지연장치가 필요없을 만큼의 전파지연시간을 가지기에 비동기 순서 논리회로의 저장요소는 충분한 전파지연시간을 가지는 논리게이트로 구성된다. 다만, 이렇게 구성된 순서 논리회로는 시스템이 예측하지 못하는 상태로 동작하거나 불안정한 상태가 되기도 하기에 자주 사용되지 않는다.
래치 (Latch)
래치(Latch)는 1비트의 이진 정보를 저장할 수 있는 가장 기본적인 저장 요소이다. 래치는 기본적으로 설정(Set)과 리셋(Reset) 두 가지의 주요 상태를 가진다. 입력의 변화에 따라 현재의 상태를 저장하며, 저장된 현재 상태는 클록 신호가 없어도 유지된다. 그리고 입력 신호가 변화하는 즉시 상태를 업데이트한다. 게이트나 구동 입력이 "1"일 때 출력 상태를 바꾼다.
TIP!
래치는 비동기 순서 논리회로에 속하며, 클록 펄스를 사용하지 않는다.
플립플롭 (Flip-Flop)
플립플롭(Flip-Flop)은 입력신호가 상태를 바꾸도록 지시할 때까지 저장된 1비트의 이진 상태를 유지하는 저장 요소이다. 래치와 달리 "클록 신호"에 따라서 출력 상태를 변화시킨다.
TIP!
플립플롭은 동기 순서 논리회로에 속하며, 클록 펄스를 사용한다.
플립플롭은 동작하는 방식에 따라서 "SR 플립플롭", "JK 플립플롭", 'D 플립플롭", "T 플립플롭" 이렇게 4종류로 나뉜다.
SR 플립플롭 (Set-Reset Flip-Flop)
SR 플립플롭은 설정(Set)과 리셋(Reset) 두 개의 입력과 한 개의 출력(Q)을 가지는 기억장치로, 주어진 입력에 따라 출력이 변경되며 이전의 상태를 유지하는 기능을 가진다. 이때, 플립플롭은 클럭 신호가 추가되어 클록이 활성화될 때만 입력을 받는다. (클록이 없으면 SR 플립플롭이 아니라 SR 래치가 된다.)
- `세트 상태(Set)`: $S = 1$, $R = 0$일 때, 세트 상태가 된다. (출력이 1이 된다.)
- `리셋 상태(Reset)`: $S = 0$, $R = 1$일 때, 리셋 상태가 된다. (출력이 0이 된다.)
- `무변화 상태(Hold)`: $S = 0$, $R = 0$일 때, 출력이 변화지 않고 이전 상태를 유지한다.
- `미정 상태(Invalid)`: $S = 1$, $R = 1$일 때, 잘못된 상태로 출력을 결정할 수 없는 미정 상태이다. (불안정한 상태)
다음은 "NAND 게이트를 기본으로 한 SR 플립플롭"과 "NOR 게이트를 기본으로 한 SR 플립플롭"의 논리회로도이다.
$C$ (Clock) | $S$ (Set) | $R$ (Reset) | $Q(t + 1)$ (상태) |
$0$ | X | X | 유지 (무변화 상태) |
$1$ | $0$ | $0$ | 유지 (무변화 상태) |
$1$ | $0$ | $1$ | $0$ (리셋 상태) |
$1$ | $1$ | $0$ | $1$ (세트 상태) |
$1$ | $1$ | $1$ | X |
이때, $Q(t)$는 입력신호가 주어지기 전의 상태, $Q(t+1)$은 입력신호가 주어진 이후의 상태를 의미한다.
D 플립플롭 (Data Flip-Flop)
D 플립플롭은 SR 플립플롭의 문제점을 개선한 플립플롭으로, $S$와 $R$이 동시에 1이 되는 미정 사태가 생기지 않도록 한다. D 플립플롭은 $C$(클록 신호)가 0일 때는, 입력값에 관계없이 D 플립플롭의 값은 변하지 않고 $C$가 1일 때만, 입력값이 출력에 나타난다.
- `세트 상태(Set)`: $D = 1$일 때, 세트 상태가 된다. (출력이 1이 된다.)
- `리셋 상태(Reset)`: $D = 0$일 때, 리셋 상태가 된다. (출력이 0이 된다.)
- `무변화 상태(Hold)`: 클록 신호가 $0$일 때, 출력이 변화지 않고 이전 상태를 유지한다.
D 플립플롭의 입력값은 그대로 출력값에 나타나기에 입력 데이터에 따라 출력이 결정된다. 제어입력이 있을 때는 출력은 입력 데이터에 따라 결정되나, 제어입력이 없으면 데이터 입력은 출력에 전달되지 못한다.
다음은 D 플립플롭의 논리회로도이다.
$C$ (Clock) | $D$ (Data) | $Q(t + 1)$ (상태) |
$0$ | X | 유지 (무변화 상태) |
$1$ | $0$ | $0$ (리셋 상태) |
$1$ | $1$ | $1$ (세트 상태) |
JK 플립플롭 (Jack-Kilby Filp-Flop)
JK 플립플롭 또한 SR 플립플롭의 문제점을 개선한 플립플롭으로, $S$와 $R$이 동시에 1이 되는 미정 상태가 생기지 않도록 한다. $J$와 $K$ 입력을 사용해서 $S$와 $R$의 역할을 수행한다. $J = 1$과 $K = 1$일 때, 출력은 반전(Toggle)된다.
- `무변화 상태(Hold)`: $J = 0$, $K = 0$일 때, 출력이 변화지 않고 이전 상태를 유지한다.
- `세트 상태(Set)`: $J = 1$, $K = 0$일 때, 세트 상태가 된다. (출력이 1이 된다.)
- `리셋 상태(Reset)`: $J = 0$, $K = 1$일 때, 리셋 상태가 된다. (출력이 0이 된다.)
- `반전 상태(Toggle)`: $J = 1$, $K = 1$일 때, 출력이 반전된다.
$J$와 $K$가 둘 다 동시에 1이 되는 경우, 한 클럭 펄스 후에는 현재 상태의 보수를 얻게 된다. $Q(t) = 1$이면, $Q(t+1) = 0$이 되고, $Q(t) = 0$이면, $Q(t+1) = 1$이 된다. 즉, 어떤 경우이든 플립플롭의 다음 출력 상태는 현재 상태의 보수가 취해진다.
다음은 JK 플립플롭의 논리회로도이다.
$C$ (Clock) | $J$ (Jack) | $K$ (Kill) | $Q(t + 1)$ (상태) |
$0$ | X | X | 유지 (무변화 상태) |
$1$ | $0$ | $0$ | 유지 (무변화 상태) |
$1$ | $0$ | $1$ | $0$ (리셋 상태) |
$1$ | $1$ | $0$ | $1$ (세트 상태) |
$1$ | $1$ | $1$ | 보수 ($\overline{Q}$) |
T 플립플롭 (Toggle Flip-Flop)
T 플립플롭은 JK 플립플롭에서 J와 K를 묶어 동일한 입력을 받도록 변형한 플립플롭으로, 입력이 1이면 출력이 반전(Toggle)되고, 0이면 이전 상태가 유지된다.
- `무변화 상태(Hold)`: $T = 0$일 때, 출력이 변화지 않고 이전 상태를 유지한다.
- `반전 상태(Toggle)`: $T = 1$일 때, 출력이 반전된다.
다음은 T 플립플롭의 논리회로도이다.
$T$ | $Q(t+1)$ (상태) |
$0$ | 유지 (무변화 상태) |
$1$ | 보수 ($\overline{Q}$) |
플립플롭 트리거링 (Flip-Flop Trigger)
플립플롭의 상태는 제어입력신호의 순간적인 변화에 따라 바뀐다. 순간적인 변화 즉, 입력값이 결과에 반영되는 순간을 "트리거(Trigger)"라고 한다.
트리거 방법
클록 펄스가 사용되는 플립플롭의 트리거 방법은 "레벨 트리거(Level Trigger)" 방식과 "에지 트리거(Edge Trigger)" 방식으로 나뉜다.
레벨 트리거(Level Trigger)
레벨 트리거 방법은 클럭 펄스의 전압이 높을 때 트리거하는 방식으로, 하이 레벨 트리거(High Level Trigger)와 로우 레벨 트리거(Low Level Trigger)로 나뉘며 클럭 신호가 하이 레벨로 유지되면 출력 상태가 변한다. 즉, 특정한 일이 발생하고 있는 도중에 발생하는 방식이며, 0과 1만 있는 상태에서 1인 경우 이벤트를 발생시키고, 0인 경우 이벤트를 발생시키지 않는다.
- `하이 레벨 트리거`: 플립플롭이 클럭 펄스의 하이 레벨에서 동작하는 경우 (전압 레벨이 높은 경우이며 상태가 1이다)
- `로우 레벨 트리거`: 플립플롭이 클럭 펄스의 로우 레벨이기에 동작하지 않는 경우 (전압 레벨이 낮은 경우이며 상태가 0이다)
에지 트리거(Edge Trigger)
에지 트리거 방법은 클럭의 값이 변하는 그 순간에만 동작하는 방식이다. 즉, 어떤 특정한 일이 발생하는 순간에 발생하는 방식이다. 에지 트리거 방식은 "상승 에지 트리거(Positive Edge Trigger)"와 "하강 에지 트리거(Negative Edge Trigger)"로 나누어지며, 레벨 트리거 방식보다는 에지 트리거 방식이 더 주로 활용된다.
- `상승 에지 트리거`: 클럭이 상승할 때 플립플롭이 동작하는 방식이며, 0에서 1로 변하는 순간(상승 에지, Rising Edge)을 검출한다.
- `하강 에지 트리거`: 클럭이 하강할 때 플립플롭이 동작하는 방식이며, 1에서 0으로 변하는 순간(하강 에지, Falling Edge)을 검출한다.
순서 논리회로 설계
순서 논리회로 설계 과정은 "설계명세로부터 상태표를 작성하고, 이로부터 플립플롭의 입출력 방정식을 도출하고 논리회로도를 그리는 과정"이다. 더 자세한 순서 논리회로의 설계 과정은 다음과 같다.
- 주어진 문제 설명이나 상태도로부터 상태표를 작성한다.
- 플립플롭의 종류, 이름, 개수를 결정한다.
- 상태표의 다음 상태로부터 플립플롭의 입력 방정식을 구한다.
- 상태표에 출력이 있는 경우. 출력 방정식을 구한다.
- 구한 입출력 방정식을 간소화한다.
- 간소화한 입출력 방정식을 이용하여 논리 회로도를 그린다.
순서 논리회로를 설계할 때, "상태"는 플립플롭의 상태를 의미하는데 상태가 2개인 경우에는 1개의 플립플롭이 필요하다. 일반적으로 상태가 $n$(단, $2^{k-1} < n \le 2^k $)개인 경우에는 $k$개의 플립플롭이 필요하다.