[無에서 시작하는 컴퓨터&과학]

[컴퓨터][19] 메모리 회로 - 1 (SR 래치(S-R latch), D 래치(D latch), JK플립플롭)

core-basic 2024. 9. 10. 23:12
728x90

※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.


처음에 컴퓨터는 산술/논리 연산을 자동화하는 것을 목적으로 설계되었다.

그리고 이후 두 번의 중요한 전환점을 거쳐 발전되었다.

첫 번째 전환점은 산술/논리 연산 결과를 재사용하는 것이 필요해짐에 따라

메모리 회로가 도입된 것이었고,

두 번째 전환점은 연산 과정을 자동으로 관리하고 제어하는 것이 필요해짐에 따라

제어 장치가 등장한 것이다.

이에 따라 이전 글들을 통해서

우선 산술/논리 연산 회로를 구현함으로써 최초의 컴퓨터를 구현해 볼 수 있었다.

 

[컴퓨터][18] 초기의 컴퓨터 : 산술/논리 연산 회로 총정리 (산술/논리 연산 회로 1~5)

※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다. 이전 글들을 다시 정리해 보면(1) 컴퓨터는 어떻게 동작하는지 원리 파악논리 게이트를 통해 컴퓨터가 동작한다

core-basic.tistory.com

그러나 산술/논리 연산 회로에는 두 가지 한계점이 있었다.

첫 번째는 산술/논리 연산을 진행할 때 중간값이나

결괏값을 저장하고, 재사용하지 못한다는 한계가 있었고,

두 번째는 산술/논리 연산 회로의 각 연산을 독립적으로 제어해야 하며,

연속적으로 연산하지 못한다는 한계점이 있었다.

 

그리고 두 가지 한계를 극복하는 과정은

컴퓨터 발전의 중요한 두 번의 전환점과 같았다.

 

이에 따라

우선 중간값이나 결괏값을 저장하며, 재사용하지 못한다는 한계를 극복하고,

컴퓨터 발전에 중요한 전환점 중 하나였던 메모리 회로에 대해 알아보겠다.

< 메모리 회로 >
(SR 래치, D 래치, JK플립플롭)


<메모리(memory)>

컴퓨터 분야에서도 메모리(memory)는 이름 그대로

기억을 하는 회로라 볼 수 있다.

메모리가 설계된 이유는 앞서 언급하였듯이

산술/논리 연산 회로의 결과를 저장하고, 재활용하여

나눗셈과 같은 복잡한 연산을 하기 위해 설계되었다.

 

그렇다면 메모리를 어떻게 구현할까?

해당 질문을 해결하기 위해 또 다른 질문들이 떠올랐다.

[1] “메모리는 정확히 무엇을 기억/저장하는 것인가”

[2] “저장한다는 것은 정확히 어떤 의미를 가지는가”

[3] “어떻게 저장하는 것인가”

 

따라서 위의 질문들을 해결해 가면서 메모리를 어떻게 구현해 보겠다.


< “메모리는 정확히 무엇을 기억/저장하는 것인가” >

메모리는 앞서 언급하였듯이 산술/논리 연산 회로의 결과를 저장하고자 설계되었다.

그리고 산술/논리 연산 회로의 결과는 비트(bit), 즉 0 또는 1에 해당된다.

더 구체적으로 보면 비트란 회로의 특정 지점에서의 전류의 상태를 뜻한다.

따라서 메모리는

어떤 회로의 특정 지점에서 전류가 흐르는지, 흐르지 않는지

그 상태를 저장하는 회로라 볼 수 있다.

 

더 나아가 회로의 상태를 숫자(0과 1)에 대응시키면,

숫자를 저장하는 회로로도 볼 수 있다.


< “저장한다는 것은 정확히 어떤 의미를 가지는가” >

메모리는 어떤 회로의 특정 지점에서

전류가 흐르는지, 흐르지 않는지 그 상태를 저장하는 회로라 볼 수 있었다.

그렇다면, 무엇을 저장하는지는 파악하였는데,

본질적으로 ‘저장’이란 무엇일까?

즉, 어떠한 상황일 때 우리는 ‘저장’이라는 단어를 적용할 수 있을까?

 

이에 대해 저장이란,

시간이 지나도 어떤 정보나 상태를 변함없이 유지하는 것을 의미한다.

하지만 회로에서는 전지나 전선 등에 문제가 있지 않으면

해당 회로는 그 상태를 무한히 유지할 것이다.

따라서

회로에서의 저장이란 단순히 상태를 유지하는 것을 넘어,

입력이 변하거나 없어졌을 때도, 이전의 상태를 유지하는 것을 의미한다.

즉, 메모리는 입력 신호가 변하거나, 사라져도

이전 상태를 지속적으로 유지하는 회로를 의미한다.

이때 이전 상태란 어떤 회로의 특정 지점에서

전류가 흐르는지, 흐르지 않는지 상태를 뜻한다.


< “어떻게 저장하는 것인가” >

그렇다면, 메모리 회로는 어떻게 구성되어 있어서

입력 신호가 변하거나, 사라져도 이전 상태를 지속적으로 유지할 수 있을까?

이에 대해 탐구한 결과 전류의 상태를 유지할 수 있는 회로는

크게 3가지 종류가 존재한다.

※ 이때 플립플롭은 입력에 클럭이라는 장치가 추가로 연결되었을 때 불리는 이름이다.

[1] S-R 래치 (S-R 플립플롭)
R(Reset) 버튼을 누르기 전까지 1(전류 흐름)이
한 번이라도 들어왔는지 상태를 확인하고 유지하는 회로

ex)
연산과정에서 자리올림이나, 0이 되는 경우 해당 상태를 유지하여
다음 명령어에서 참조할 때 이용된다.

 

[2] D 래치 (D 플립플롭)
Enable(Clock) 신호가 활성화될 때만 데이터를 저장 및 출력할 수 있다.
Enable(Clock) 신호가 비활성화될 때는 이전의 저장된 값을 유지하고 출력한다.

 

[3] J-K 플립플롭
입력에 클럭 장치를 추가하여 S-R 래치에 한계점을 극복한 회로이다.

이어서 각 회로에 대해 더 자세히 살펴보겠다.


< S-R래치 : Set-Reset Latch >

기본적인 S-R 래치 회로는

개의 입력 S(Set), R(Reset)과 하나의 출력(Q)을 가진다.

그리고 S-R래치의 목적은

S(Set)로부터 특정 회로의 상태를 입력받으며,

이때 R(Reset)이 누르기 전까지 S로부터 '1' 한 번이라도 들어왔는지

확인하고 유지하는 회로와도 같다.

 

그리고 이를 회로로 구현하면 다음과 같다.

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

그리고 이에 대한 S-R래치의 논리표는 다음과 같다.

입력 출력
S(A) : Set R(C) : Reset Q (B=(A NOR B)NOR C)
0 0 Q (이전 상태 유지)
0 1 0
1 0 1
1 1 0

 

이어서 S-R래치의 논리표에 대응되는 회로들을 살펴보면 다음과 같다.

< S(A) = 0, R(C) = 0 >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

SR래치 회로와 같이 출력이 다시 입력으로 연결되는 회로를 피드백 회로라고 한다.

S(Set)과 R(Reset) 중에 아무것도 누르지 않았으므로, 이전의 상태를 유지한다.
(초기상태는 0이므로 0 유지)

 

< S(A) = 0 or 1, R(C) = 1>

위의 그림을 통해서 R(C) : Reset 스위치가 활성화(1) 되면

출력을 0으로 초기화시킨다는 것을 알 수 있다. 

그리고,

S(A) 입력에 변화를 주어도, S-R래치는 출력:0을 유지하는 것을 확인할 수 있다.

즉, R(C)를 스위치를 누르면, S(A) 회로가 결과까지 흐르지 못하도록 차단한다.

이에 따라 결과가 0으로 저장된다.

 

< S(A) = 0 or 1, R(C) = 0>

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

위의 그림을 통해서 S(A) : Set 스위치는 1로 초기화시킨다는 것을 알 수 있다.

그런데 해당 회로에서

S(A) = 1이 되어 출력이 1(전류가 흐름)이 되면 입력에 영향을 주게 된다.

이에 따라 NOR 게이트는 두 입력 중 S(A)가 아닌 다른 하나(B)가 1이 되는 것이므로

NOR 게이트의 두 입력 중 하나인 S(A) 스위치를 계속 변화를 주어도,

이미 다른 입력이 1이기 때문에 결과가 바뀌지 않는다.

이에 따라, 결과가 ‘1’로 저장된다.

 

< S(A) = 1, R(C) = 1>

실질적으로 사용되는 S-R래치는 지금까지 알아본 회로와 다르다.

그래서 Set(A)과 Resst(C)이 모두 1인 경우 일반적으로는 불안정 상태이다.

해당 회로 역시 결국은

R(Reset) 버튼을 누르기 전까지 1(=전류 흐름=참)이 한 번이라도 들어왔는지

상태를 확인하는 회로이므로 S(A), R(C)가 모두 1이면 명제에 모순이 발생한다.

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

결국 상태를 유지하고, 저장하는 회로의 핵심은

출력값이 다시 입력으로 연결되는 피드백 회로를 통해

다른 입력이 변경되어도 출력에 영향이 가지 않도록 하는 것이다.

특히 NOR 게이트는 두 입력 중 하나가 1이면 출력 결과는 항상 0이 된다.NAND 게이트는 두 입력 중 하나가 0이면 출력 결과는 항상 1이 된다.따라서

피드백 회로와 NOR 또는 NAND 게이트를 사용하여,

출력이 한 번 결정된 후 그 출력이 다시 입력으로 피드백되도록 한다.

이 과정에서 게이트의 다른 입력이 변하더라도,

피드백된 출력이 기존 상태를 유지하게 만든다.

즉, 출력이 초기 결정된 상태를

지속적으로 유지할 수 있도록 유도하는 것이다.

그리고 이는 회로가 이전 상태를 '저장'하는 원리와 같다.


< S-R 래치 (S-R Latch) 발전 >

회로 설계가 발전하고, 더 복잡한 회로를 설계하다 보니

S-R 래치의 출력의 반대도 필요해짐에 따라 다음과 같이 변화하게 되었다.

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

즉, 기존의 R(Reset) 버튼을 누르기 전까지 1(=전류 흐름=참)이

한 번이라도 들어왔을 때의 상황을 이용할 수 있을뿐더러,

한 번이라도 들어오지 않을 때의 상황도 이용할 수 있는 것이다.

이는 더 많은 정보를 제공함으로써

기존의 용도뿐만 아니라 더 다양한 용도로 사용할 수 있게 되었다.

 

논리표와 그에 대응되는 회로는 다음과 같다.

입력 출력
S : Set R : Reset Q
0 0 Q (이전 값) Q̅ (이전 값)
0 1 0 1
1 0 1 0
1 1 0(출력 불안정) 0 (출력 불안정)

 

< S = 0, R = 0 >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< S = 0, R = 1 >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< S = 0 or 1, R = 0>

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< S =1, R = 1> 
Q와 Q̅ 출력이 모두 0이므로 Q과 Q̅의 관계가 모순이 된다.

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< S-R 래치 (S-R Latch) 기호 >


< D 래치 ( D Latch ) >

D래치는 S-R 래치를 기반으로 변형된 저장 회로이다.

S-R래치와 같이 두 입력 Enable:활성화(Clock)와 D:데이터(Data)를 가진다.

Enable(Clock) 신호가 활성화될 때만 데이터를 저장 및 출력할 수 있으며,

Enable(Clock) 신호가 비활성화될 때는 이전의 저장된 값을 유지하고 출력한다.

이에 대해 D 래치의 논리표를 살펴보면 다음과 같다.

입력 출력
D(Data) Enable(Clock) Q
0 0 Q (이전 값) Q̅ (이전 값)
0 1 0 1
1 0 Q (이전 값) Q̅ (이전 값)
1 1 1 0

S-R래치의 논리표와 비교하면

입력 출력
S : Set R : Reset Q
0 0 Q (이전 값) Q̅ (이전 값)
0 1 0 1
1 0 1 0
1 1 0(출력 불안정) 0 (출력 불안정)

(D, Enable) = (S, R) = (1,0) 일 때

S-R래치는 입력값 1을 그대로 저장하고 출력하지만,

D 래치는 Enable이 활성화되지 않는 이상 이전값을 수정하지 않는다.

그리고 이에 대한 회로를 살펴보면 다음과 같다.

< D = 0 or 1, E = 0 >

< NOR 게이트 등으로 구현 >

< NAND 게이트만으로 구현>

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< D = 0 or 1, E = 1 >

< NOR 게이트 등으로 구현 >

< NAND 게이트만으로 구현>

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

D래치 회로 핵심은 S-R래치와 같이

출력값이 다시 입력으로 연결되는 피드백 회로와

NAND 또는 NOR 게이트를 통해

다른 입력이 변경되어도 출력에 영향이 가지 않도록 하는 것이다.

즉, 회로의 출력이 한 번 결정되면,

다른 입력이 변해도 회로는 이미 결정된 출력을 계속 유지하게 된다.

 

< D 래치 (D Latch) 기호 >

< 클럭 장치 포함 : 플립플롭 >


 


< J-K 플립플롭 >

플립플롭은 앞서 언급하였듯이, 입력으로 클럭이라는 장치가 필요하다.

클럭에 대해 간단히 설명하면 일정한 주기로 0과 1의 신호를 보내는 장치이다.

자세한 내용은 다음에 탐구해 보겠다.

따라서 J-K 플립플롭 역시 간단한 회로도를 통해 알아보면 다음과 같다.

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

이처럼, S-R 래치의 경우 두 입력이 모두 1 일 때, 모순이 발생하는 불안정한 상태를 유지하였는데

클럭이라는 장치를 추가함으로써,

두 입력이 모두 1일 때는 클럭의 신호에 맞추어

Q와 Q̅가 값을 변경하면서 안정적인 상태를 유지할 수 있다.

 

< J(S) = 0, K(R) = 0 >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< J(S) = 0, K(R) = 1 >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< J(S) = 0 or 1, K(R) = 0 >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

< J(S) = 1, K(R) = 1 >

※ 해당 이미지는 Paul falstad 사이트를 통해 제작하였습니다.

 

 

이번 글은 요기서 마치며, 다음 주제는

실질적으로 위와 같은 래치들이 메모리 회로로써 어떻게 사용되는지

그리고 클럭이란 무엇인지에 대해 탐구해 보겠다.


※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.

728x90