저번 포스팅에서 Decoder/Encoder/Multiplexer에 대해 알아보고 설계해보았습니다. 저번 포스팅까지 Combinational Logic에 대해 알아보았다면 이번 포스팅에서부터 Sequential Logic에 대해 알아보겠습니다.
이전 포스팅에서 현재 input에만 의존하여 회로의 output이 결정되는 회로를 Combinational Logic이라고 했습니다. 그렇다면 Sequential Logic는 무엇일까요?
Sequential Logic은 현재 input과 더불어 이전 값의 state 따라 output이 결정되는 회로입니다. 위 회로는 Synchronous Sequential Circuit를 구현한 회로입니다. 회로를 보면 Combinational Logic과 다르게 Memory elements가 있는 것을 알 수 있는데 Sequentail Logic는 Memory elements가 있어서 이전 output을 보관할 수 있습니다. 이때 Memory elements는 Latch 혹은 Flip-Flop로 구현될 수 있고 Latch와 Flip-Flop는 이후 포스팅에서 다루도록 하겠습니다.
회로에 Memory elements로 Clock pulses가 들어가는 것을 확인할 수 있습니다. Synchronous Sequential Circuit는 Clock의 엣지(rising, falling)에 Memory elements가 update 되고 다음 엣지까지 해당 값을 store하게 됩니다.
Memory Elements는 Write, Read, Hold 연산을 수행할 수 있어야 합니다. Rising 엣지에 값을 update하는 회로가 있다고 가정하면 Rising 엣지에 값을 Write하고 다음 Rising 엣지까지 값을 Hold 할 수 있어야 합니다. 그리고 우리가 원할때 값을 Read 할 수 있도록 설계해야 합니다.
그렇다면 지금부터 Memory Elements를 구현해보겠습니다. 위에서 Memory Elements는 Write, Read, Hold 연산이 가능해야 한다고 했는데 Hold부터 알아보겠습니다.
Flip-Flop의 State를 Q라고 할때 우리는 위와 같이 Cross-Coupled Inverter을 사용해 Hold 연산을 할 수 있습니다. 하지만 이렇게 Flip-Flop을 구현하면 Write 연산은 수행할 수 없습니다. 즉 Cross-Coupled Inverter 회로는 0,1이라는 두 가지 state를 Hold 할 수 있는 회로입니다.
잠깐 NAND2와 NOR2에 대해서 다시 한 번 짚고 넘어가보겠습니다. 우리는 앞에서 배운 NAND2와 NOR2를 Inverter처럼 사용할 수 있습니다. Truth Table를 보면 NAND2는 한쪽 입력이 1일때 반대쪽 입력을 반전시키는 Inverter로 동작하고 NOR2는 한쪽 입력이 0일때 반대쪽 입력을 반전시키는 Inverter로 동작합니다. 또한 NAND2는 한쪽 입력이 0이면 출력은 무조건 1이고 NOR2는 한쪽 입력이 0이면 출력은 무조건 0입니다.
그렇다면 NAND2 혹은 NOR2를 사용하면 Write 연산을 구현할 수 있지 않을까요?
위 회로를 보면 NAND2의 한쪽 입력이 1일때 Cross-Coupled Inverter로 동작하는 것을 알 수 있습니다. 그리고 이때 Q = 0 입니다. 우리는 지금부터 Q를 1로 update 시키려고 합니다. 그러기 위해 NAND2의 한쪽 입력을 0으로 하면 Q = 1이 되고 Q' = 0 이 됩니다. 따라서 Q가 0에서 1로 update 된 것을 알 수 있고 이렇게 NAND2 혹은 NOR2를 이용하면 Write 연산을 구현할 수 있습니다. 그리고 우리는 이렇게 구현된 회로를 Latch라고 합니다.