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

[컴퓨터][23] 제어장치 - 2 ( JK플립플롭과 클럭)

core-basic 2024. 9. 22. 01:13
728x90

※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.
※ 해당 게시글은 J. 클라크 스코트, 『그래서 컴퓨터는 어떻게 동작하나요?』, 지유록, 인사이트(2019) 책을 참고하였습니다. 


이전 글을 통해서

제어장치란 적절한 시점에 각 장치의 입출력제어기를 활성화하거나,

비활성화할 수 있도록 해줌으로써

각 장치가 모든 장치와 연결되어 있는 전선(Bus)으로

데이터를 전송할 수 있게 해 주거나,

버스(Bus)에 있는 데이터를 받을 수 있도록 조정해 주는 장치로,

추가로, 명령어를 해석하는 기능까지 갖춘 장치라는 것을 알 수 있었다.

그래서

각 장치의 입출력제어기를 효율적으로 조정하기 위해서는

산술/논리 연산 회로들을 통합할 필요가 있었다.

이에 따라 기존 산술/논리 장치 (Arithmetic and Logic Unit : ALU)를 구현하면서

각 연산 장치의 출력 제어기를 활성화하는 신호를

특정한 이진수에  대응시키는 디코더에 대해서도 알아보았다.

그리고 그러한 특정한 이진수가 OPcode라는 것도 알 수 있었다.

 

[컴퓨터][22] 제어장치 - 1 (디코더 그리고 산술/논리 장치(ALU : Arithmetic and Logical Unit ))

※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.컴퓨터는 처음에 계산을 자동화하기 위해 산술/논리 연산 회로로 설계되었지만나눗셈 연산과 같이 중간 결괏값

core-basic.tistory.com

그러면 이어서

제어장치가 각 장치의 입출력 제어기를 활성화 및 비활성화하는

적절한 시점은 언제인지,

그리고, 제어장치는 어떻게 적절한 시점에 입출력제어기를

조율할 수 있는지에 대해 알아보겠다.

< 제어장치 >
( JK플립플롭과 클럭 )


< 클럭 >

제어장치를 구성하는 요소 중 클럭을 설명하기 앞서서

제어장치의 동작과정을 간단하게 살펴보면 다음과 같다.

 

예를 들어 만약에 적절한 시점을 1초 간격으로 하여,

‘A레지스터’에 있는 값을 ‘B레지스터’에 있는 값과

AND 연산을 진행한다고 하였을 때

회로적인 관점에서 그 과정을 살펴보면 다음과 같다.

 

[0초 일 때]

제어장치는 명령어를 해석하여 AND 연산을 수행할 것을 결정한다.


[1초 일 때]

A 레지스터의 출력 제어기(E)를 활성화 함으로써,

버스에 A레지스터의 값을 전송한다.


[2초 일 때]

AND 장치의 입력제어기(S)를 활성함으로써,

버스에 있는 데이터를 입력받는다.


[3초 일 때]

AND 장치의 입력 제어기(S)를 비활성화한다.


[4초 일 때]

이후 A 레지스터의 출력 제어기(E)를 비활성화 함으로써,

최대한 정확하고 안전하게 데이터를 입력받는다.


[5초 일 때]

B레지스터의 출력 제어기(E)를 활성화 함으로써,

버스에 B레지스터의 값을 전송한다.


[6초 일 때]

다시 AND 장치의 입력제어기를 (S)를 활성화 함으로써,

버스에 있는 데이터를 입력받는다.


[7초 일 때]

AND 장치의 입력 제어기(S)를 비활성화한다.


[8초 일 때]

이후 B 레지스터의 출력 제어기(E)를 비활성화 함으로써,

최대한 정확하고 안전하게 데이터를 입력받는다.


[9초 일 때]

AND 연산을 진행한다.


[10초 일 때]

AND 장치의 출력 제어기(E)를 활성화하여 연산 결과를 출력한다.

: 버스에 연산 결과를 전송한다.

(실제 컴퓨터 회로 동작과정과는 다르나, 이러한 메커니즘을 통해 동작한다.)

 

예시에서 보았듯이 제어장치를 구현하기 위해서는

컴퓨터 회로 시스템 내부에서의 적절한 타이밍을 제공하는

마치 시계처럼 작동하는  장치가 필요하다.

이때 회로는 정확히 전자/전류 기반의 회로이므로,

전자/전류를 통해 시간을 표현할 수 있어야 한다.

 

그렇다면 시간이란 정확히 무엇이며,

전자/전류 회로로 어떻게 표현할 수 있을까?

시간이 무엇인지에 대해서는 여러 의견이 있지만

필자의 주관적인 생각으로는

시스템에 변화가 있을 때,

변화 과정 중 특정한 두 순간 사이의 간격을 시간이라 생각한다.

 

이를 전자/전류 회로에 대입해 보면,

다음과 같이 두 가지 상태가 존재한다.

전류가 흐르는 상태(1),

전류가 흐르지 않는 상태(0),

그리고 이 두 가지 상태가 교대로 전환되는 것이.

그 회로의 시간의 흐름으로 볼 수 있다.

 

따라서, 시간은 한 상태에서 다른 상태로 변하는 간격을 의미하며,

이를 회로에서는 상태:0과 상태:1이 주기적으로 변하는 패턴으로 표현한다

그리고 그 주기가 회로의 시간의 단위가 될 수 있다.

 

이러한 개념을 바탕으로, 과학자들은 다음과 같은 클럭 회로들을 발명했다.

 

[ 1. NOT 게이트만을 이용한 피드백 루프 ]

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

 

[ 2. LC 오실레이터 ]

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

 

이처럼 0과 1을 주기적으로 나타내는 신호를 생성하는 장치를 클럭이라고 한다.

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

그런데 현대의 컴퓨터는 대부분

크리스털 오실레이터( crystal oscillator )를 이용한다고 한다.

크리스털(수정)에 전압을 가 할 경우 안정적이고 일정한 주파수를 발생한다.

해당 주파수를 다시 전기신호로 변환하여 컴퓨터의 클럭 신호로 사용한다.

이에 대한 자세한 설명은 전자공학적 개념이므로 생략하겠다.


< 출력 제어 클럭과 입력 제어 클럭 (clk_e, clk_s) >

그렇다면 제어장치는 클럭을 어떻게 이용하여

출력제어기와 입력 제어기를 조정할까?

이를 알아보기 위해 다시 제어장치 동작 과정의 일부분을 보면 다음과 같다.


[1초 일 때]

A 레지스터의 출력 제어기(E)를 활성화 함으로써,

버스에 A레지스터의 값을 전송한다.


[2초 일 때]

AND 장치의 입력제어기(S)를 활성함으로써,

버스에 있는 데이터를 입력받는다.


[3초 일 때]

AND 장치의 입력 제어기(S)를 비활성화한다.


[4초 일 때]

이후 A 레지스터의 출력 제어기(E)를 비활성화 함으로써,

최대한 정확하고 안전하게 데이터를 입력받는다.


이처럼 출력 제어기가 활성화한 이후

입력 제어기를 활성화하여 버스로부터 값을 받고,

이후 입력제어기를 비활성화가 이루어진 다음에서야

출력제어기를 비활성화하여 안정적으로 값을 받아들일 수 있도록 한다.

그렇게 하지 않고 출력 제어기를 먼저 비활성화할 경우

버스(Bus) 주변의 잡음으로 인해 다른 값을 입력받을 수 있기 때문이다.

 

이에 따라 클럭의 기본 주기 그래프가 아래와 같을 때,

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

출력 제어를 위한 클럭 주기 그래프와

입력 제어를 위한 클럭의 주기 그래프는 다음과 같아야 한다.

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

즉, 출력제어가 1이 되어있는 동안, 입력제어는 0에서 1로 활성화된 후

다시 1에서 0으로 비활성화가 이루어져야 한다.

이를 위해서는 기본 클럭보다 주기가 길고,

0과 1의 상태를  좀 더 오랫동안 유지할 수 있는 지연된 클럭이 필요하다.

예를 들어, 기본 클럭의 주기가 1초일 때,

주기가 2배 긴 클럭(clk_d)이 있을 경우, 그에 따른  주기 표는 다음과 같다.

  1초 2초 3초 4초 5초 6초 7초 8초
clk 1 0 1 0 1 0 1 0
clk_d 0 1 1 0 0 1 1 0
clk_e 0 1 1 1 0 1 1 1
clk_s 0 0 1 0 0 0 0 0

그리고 기본 클럭(clk)과 주기가 2배인 클럭(clk_d)을  논리게이트와 조합하면

합집합과 교집합을 생성하여 출력 제어 클럭과 입력 제어 클럭을 구현할 수 있다.

clk_e = (NOT clk_d)  NAND  clk

clk_s = clk_d  AND  clk

그리고 이는 출력 제어 신호가 활성화되어 있는 동안,

입력신호가 변할 수 있는 시간을 확보하게 된다.


< SR플립플롭과 JK 플립플롭 >

따라서  출력 제어 클럭과 입력 제어 클럭을 구현하기 위해서는

우선 지연 클럭(clk_d)을 구현해야 한다.

 

지연 클럭(clk_d)을 구현하는 방법은 여러 가지가 있지만

그중 기본 클럭에 주기가 2배인  지연 클럭(clk_d)은

JK플립플롭을 이용해서 구현할 수 있다.

 

JK 플립플롭은 기본적인 메모리 회로인 SR플립플롭에서 Set = 1, Reset=1 일 때

Q와 Q̅ 에 대해서 모순이 발생한다는 한계점을 보완한 메모리 회로이다.

[ SR 플립플롭 ]

S(Set) R(Reset) Qⁿ Q̅ ⁿ
0 0 Qⁿ⁻¹ Q̅ⁿ⁻¹
0 1 0 1
1 0 1 0
1 1 0 (모순 발생) 0 (모순 발생)

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

 

다음 표과 같이 JK플립프롭은 J(S)=1, K(R)=1 일 때

Qⁿ⁻¹의 반전된 상태를 출력하도록 설계되었다.

즉, SR 플립플롭은 이전 Qⁿ⁻¹ 만 사용했을 뿐 Q̅ⁿ⁻¹ 를 사용하지 않았는데

JK플립플롭은 Q̅ⁿ⁻¹ 를 사용함으로써

J(S)=1, K(R)=1 일 때의 모순을 보완했다.

J(S) K(R) Qⁿ Q̅ ⁿ
0 0 Qⁿ⁻¹ Q̅ⁿ⁻¹
0 1 0 1
1 0 1 0
1 1 Q̅ⁿ⁻¹ Qⁿ⁻¹

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

 

< 래치와 플립플롭 >

플립플롭과 래치는 둘 다 메모리 회로로 특정 상태를 저장하는 공통점이 있지만,

클럭의 사용유무와 상태 값을 저장하고 출력하는 시점이 다르다.

D래치와 D플립플롭을 예시로 설명하면

D래치는 E(Enable) 스위치가 계속 눌러진 상태에서도

새로운 값이 들어오면 해당값을 저장 및 출력할 수 있지만 (레벨 트리거 방식)

D플립플롭은 클럭을 이용하며,

E(Enable) 스위치가 눌리는 그 시점에 들어온 값만 저장하고 출력한다. (에지 트리거 방식) 


< JK플립플롭과 지연 클럭(clk_d) >

JK 플립플롭에서 J(S) = 1, K(R) = 1 일 때 다음 이미지와 같이

클럭 신호가 1 → 0 (하강 에지)이 될 때 Qⁿ = Q̅ⁿ⁻¹, Q̅ⁿ = Qⁿ⁻¹  동작하게 된다.

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

이를 표로 나타내면 다음과 같다.

[J = 1, K = 1] n = 1 n = 2 n = 3 n = 4 n= 5
clk 1 → 0 0 → 1 1 → 0 0 → 1 1 → 0
Qⁿ 0 (Q̅ⁿ⁻¹) 0 1 (Q̅ⁿ⁻¹) 1 0
Q̅ⁿ 1 (Qⁿ⁻¹) 1 0 (Q̅ⁿ⁻¹) 0 1

따라서 JK플립플롭은 J=1, K=1일 때

clk 클럭의 주기의 2배인 신호를 출력함으로써,

지연 클럭(clk_d)을 구현할 수 있다.


< 출력 제어 클럭과, 입력 제어 클럭 구현 >

다시, 기본 클럭(clk)과 지연 클럭(clk_d) 그리고

입출력 제어클럭(clk_e, clk_s)을 비교하면 다음과 같다

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

  1초 2초 3초 4초 5초 6초 7초 8초
clk 1 0 1 0 1 0 1 0
clk_d 0 1 1 0 0 1 1 0
clk_e 0 1 1 1 0 1 1 1
clk_s 0 0 1 0 0 0 0 0

clk_e = (NOT clk_d)  NAND  clk

clk_s = clk_d  AND  clk

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

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

 

 이렇게 구현된 출력 제어 클럭은 각 장치의 출력제어기에 연결하고,

입력 제어 클럭은 각 장치의 입력제어기와 연결하면,

정확하고, 안정적으로 값을 출력하고 입력받을 수 있다.

 

그러나 아직 문제가 남아있다.

지금으로서는 모든 장치의 출력 제어기가 동시에 활성화 및 비활성화되고,

마찬가지로 모든 장치의 입력 제어기도 동시에 활성화 및 비활성화될 것이다.

이에 따라

정확히 어떤 장치를 이용할 것인지 자동으로 해석하고 처리하는 과정이 필요하다.

 

 

따라서 다음 주제는 어떤 장치를 이용할 것인지 자동으로 해석하고

처리하는 회로에 대해 탐구해 보겠다.


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

728x90