-
[문제해설] 10진 상향 비동기카운터를 JK 플립플롭으로 설계하시오.전자계산기조직응용기사/실기 필답형 기출문제 해설 2022. 10. 4. 05:54반응형
전자계산기조직응용기사 실기 필답형 기출문제 (논리회로-순차회로) - 2020년3회
10진 상향 비동기카운터를 JK 플립플롭으로 설계하시오.
- 문제 해설 -
조직응용기사의 논리회로 영역에서 출제된 필답형 기출문제 중에서는 본문제가 논리회로를 가장 깊게 다루고 있습니다. 깊게 다룬다는 표현은 문제 난의도를 의미하는 것은 아닙니다. 카운터 설계는 순차회로의 기본입니다. 조직응용기사에서 다루는 순차회로는 대부분 플립플롭의 기본 정도인데, 본 문제는 플립플롭을 이용한 설계이기 때문입니다.
우선 순차회로(sequential circuit)의 설계과정 다음과 같습니다.
1. 회로 동작 기술(記述)에서 회로의 상태 도표를 유도한다.
2. 필요하다면 상태의 개수를 줄인다.
3. 각 상태에 대해 2진수 값으로 지정을 한다.
4. 2진수로 코드화 된 상태표를 구한다.
5. 사용할 플립플롭의 종류를 선택한다.
6. 간단하게 플립플롭의 입력식과 출력식을 구한다.
7. 논리 도표를 그린다.위의 설계과정에 따라 본문제를 풀어보겠습니다.
1. 회로의 상태 도표를 유도한다.
첫 단계로 회로의 상태 도표를 유도하겠습니다. 상태 도표는 회로 동작의 기술(記述)에서 유도합니다. 문제에서 주어진 단서는 「10진 상향 비동기카운터」입니다.
'10진 상향'이란 10개의 상태 순서를 가지며, 9까지 센 다음 0으로 돌아오는 것을 말합니다.(ex: 0, 1, 2,..., 8, 9, 0, 1,...)
참고로 '10진 하향'은 거꾸로 세는 것을 말합니다.(ex: 9, 8,... , 2, 1, 0, 9,...)
'비동기'란 말은, 클럭 펄스에 모든 플립플롭과 동기화되지 않는 것을 말합니다.
그럼 '10진 상향 비동기카운터'란 0부터 9까지 세는 회로이며, 이때 각 플립플롭은 클럭 펄스와 동기화가 되지 않는 회로를 뜻합니다. 보통 BCD 리플 카운터(BCD ripple counter)라는 용어로 더 많이 사용합니다. BCD는 10진수를 표현할 수 있기에 쉽게 이해하실 것이고, 리플(ripple)은 물결이라는 뜻을 가지고 있는데 물결이 동시에 생기는 게 아니라 순차적으로 퍼져나가듯이 클럭 펄스와 비동기라는 의미로 이해하시면 됩니다. 비동기 카운터는 클럭 펄스가 하나의 플립플롭의 입력 펄스로만 사용되며, 나머지 플립플롭의 입력 펄스는 다른 플립플롭으로부터 출력 전이로 사용됩니다. 이와 반대인 동기식 카운터(synchronous counter)는 모든 플립플롭이 동일한 클럭에 의해 작동합니다. 지금까지 동기식 카운터는 조직응용기사에서 다룬 적은 없지만, 전자계산기기사를 준비 중이신 수험자는 따로 공부하시길 권합니다.
그럼 「10진 상향 비동기카운터」라는 회로 동작의 기술(記述)로부터 다음과 같이 상태도표를 유도할 수 있습니다.
2. 필요하다면 상태의 개수를 줄인다.
보통 설계를 하다 보면, 같은 표현이 중복되는 경우가 많은데 지금 설계 중인 '10진 상향 비동기 카운터'는 0에서 9까지의 상태를 표현하는 회로이며, 상태가 중복되는 경우는 없기에, 상태의 개수를 줄일 수 있는 것은 없습니다.
3. 각 상태에 대해 2진수 값으로 지정을 한다.
1단계에서 유도한 상태 도표의 각 상태에 2진수 값을 지정합니다. 문제에서 별다른 조건이 없으니, 그냥 BCD코드로 대응하면 다음과 같은 상태 도표를 그릴 수 있습니다.
위와 같이 BCD(Binary Coded dacimal) 코드로 대응시키면 'BCD 리플 카운터'라고 부릅니다. 상황에 따라서 2진수 값 대응은 임의적으로 해도 상관없습니다. 이때는 회로도 완전히 다르게 설계가 됩니다. 본풀이에서는 일반적인 'BCD 리플 카운터'로 설계하겠습니다.
4. 2진수로 코드화 된 상태표를 구한다.
3단계에서 만든 상태 도표를 이용해서 다음과 같은 상태표를 만들 수 있습니다.
위 상태표에서 'An'들은 플립플롭들을 명명한 것입니다. 10진 카운터는 3단계의 상태 도표에서 확인할 수 있듯이 4개의 비트로 표현해야 하며, 하나의 플립플롭은 1비트를 저장할 수 있으므로 4개의 플립플롭을 사용합니다. 이 4개의 플립플롭들의 현재 상태(Present State)에서 가진 값들이 클럭 펄스가 발생했을 때, 다음 상태(Next State)에서 가지는 값을 보여줍니다. 쉽게 말해 3단계의 상태 도표를 그냥 표로 만든 것입니다.
5. 사용할 플립플롭의 종류를 선택한다.
플립플롭을 선택할 때는 플립플롭들의 특성을 고려해 선택해야 됩니다. '10진 상향 비동기카운터'는 T 플립플롭으로 설계하는 것이 좀 더 간단하고 효율적이겠지만, 본문제에서의 조건이 JK 플립픕롭을 사용하여 설계하는 것이므로, 플립플롭의 종류를 선택하는 데는 고민할 필요가 없습니다.
우선 다음의 JK플립플롭의 특성표를 파악하겠습니다.
위의 플립플롭의 특성표를 활용하여, JK 플립플롭과 4단계에서 만든 상태표를 다음과 같이 합성시킵니다.
위는 JK플립플롭과 4단계에서 만든 상태표를 합성시킨 표입니다.
합성시키는 방법은 현재 상태(Present State)에서 다음 상태(Next State)의 값을 비교하여, 상태변화에 적절한 JK플립플롭의 입력값을 적는 것입니다. 예를 들어, 표 첫 번째 줄의 현재 상태는 0000이고, 다음 상태는 0001입니다. Q0 플립플롭의 값이 0에서 1로 반전(Complement)되었으므로, JK플립플롭 특성표에 따라 입력값은 11(JK)이고 나머지는 변동이 없으므로(No change)이므로 입력값은 00(JK)입니다. 이와 같은 방법으로 나머지 값들을 적습니다.
물론, JK플립플롭의 입력값들을 01(Reset)이나 10(Set)으로 하여 설계도 가능하지만, 우선은 00(No change)과 11(Complement)만 사용하여 단순화 시겠습니다.
6. 간단하게 플립플롭의 입력식과 출력식을 구한다.
5단계에서 만든 상태표로 식을 만들어야 합니다. 동기식의 경우, 모든 플립플롭이 하나의 클럭 펄스를 같이 사용하기 때문에, 클럭이 발생할 때마다 상태 도표로 식을 구해야 합니다. 그 방법은 조합 회로에서 맵핑하는 방법과 같습니다.
하지만, 비동기식의 경우, 각 플립플롭에 입력되는 클럭(CLK) 신호에 초점을 맞추어야 합니다. 그래서 5단계에서 JK 플립플롭의 입력 신호를 00과 11로 단순화시켰습니다.
식을 세우기 앞서, 트리거(trigger)에 대해서 정리하고 넘어가겠습니다.
처음 공부하실 때 순차 회로가 어려운 이유는 조합 회로와는 달리 플립플롭들의 이전 상태 값을 반영하여 작동을 하기 때문입니다. 그래서 플립플롭의 상태가 변하는 타이밍의 개념을 알고 있어야 합니다. 플립플롭은 입력값과는 별개로 클럭 펄스를 입력받아서 작동을 하는데, 이 클럭 펄스는 단순이 1이냐 0이냐가 아니라 클럭신호의 순간적인 변화를 제어신호로 사용합니다. 이 제어신호의 순간적인 변화를 트리거(trigger)라고 합니다.
위 그림은 클럭신호(CLK)의 변화에 따른 플립플롭의 상태변화입니다. 클럭신호가 1에서 0으로 변하는 순간에 플립플롭의 상태가 전이되고 있습니다. 바로 이 전이되는 순간을 트리거(trigger)이라고 합니다. 이 개념을 숙지하고 식을 세워보도록 하겠습니다.
우선 Q0의 CLK 입력식을 구해보겠습니다. Q0는 클럭이 발생할 때마다 값이 항상 반전됩니다. 그리고, 클럭 값을 직접 받습니다. 그래서 다음과 같은 식을 구할 수 있습니다.
Q0clk = CLK
다음은 Q1입니다. 보기 편하게 현재 상태(Present State)와 플립플롭 Input 중 Q1 만 따로 분리해서 살펴보겠습니다.
위의 상태표에서 Q1 입력값이 11 일 때의 공통된 상태 값을 찾아야 합니다.
단, 9에서 0으로 상태가 변화할 때는 제외합니다. 1001 이후의 상태는 사용하지 않는 비트이기 때문에 이를 처리하기 위하여 마지막에 다루겠습니다.
Q1에 11이 입력되어야 할 때는 A0가 항상 1일 때입니다. 그리고 이 값이 반영되어 작동할 때(트리거)는 A0의 값이 1에서 0이 될 때입니다. 트리거 발생할 때 A0의 값은 0입니다. 그래서 Q1의 클럭은 A0의 반전된 값을 입력하면 되기에 다음과 같은 식을 세울 수 있습니다.
Q1clk = (A0)'
이번엔 Q2입니다.
위 상태 도표에서 Q2가 11이 되는 시점과 A2의 상태가 변하는 시점을 살펴보면, A1이 1에서 0으로 변할 때입니다. 그래서 Q2의 클럭은 A1 값의
Q2clk = (A1)'
마지막으로 Q3입니다.
Q3은 A2가 1에서 0이 될 때입니다. 그래서 다음과 같은 식을 얻을 수 있습니다.
Q3clk = (A2)'
이로써, 4개의 플립플롭에 대한 논리식을 모두 구했습니다.
7. 논리 도표를 그린다.
마지막으로 논리도표를 그려야 합니다. 6단계까지 거치면서 4개의 JK플립플롭이 필요하다는 것을 알았고, 6단계에서 다음의 논리식들을 구했습니다.
Q0clk = CLK
Q1clk = (A0)'
Q2clk = (A1)'
Q3clk = (A2)'그럼 하나씩 그려가겠습니다.
위의 그림처럼 4개의 JK플립플롭을 배치하였습니다. 가장 왼쪽의 Q0의 출력 값을 가지는 플립플롭이 상태표의 A0에 해당하는 플립플롭이며, 논리식 Q0clk = CLK로 인해 CLK 신호를 직접 받습니다. 모든 JK입력은 11만 존재하므로, 신호 1을 모든 플립플롭의 JK입력신호로 넣었습니다. 이 풀이에서 플립플롭들은 CLR(clear) 입력을 가지지 않겠습니다.
논리식 Q1clk = (A0)', Q2clk = (A1)', Q3clk = (A2)'을 적용하여 Q1, Q2, Q3의 CLK 입력선을 넣으면 다음과 같습니다.
이제 마지막으로 9에서 0으로 넘어가는 부분입니다. 우선 그 부분의 상태표를 보겠습니다.
위 상태표를 보면, A0이 1에서 0으로 넘어갈 때, A3의 상태가 1이면 A3을 0으로 만들면 됩니다.
이때, A0는 원래 0으로 반전이 되니 신경을 안 써도 되지만, A0가 1에서 0으로 변환할 때, A1에 클럭신호가 입력이 돼서 상태가 반전됩니다. 우선 이를 막기 위해 다음과 같이 회로도를 변경하겠습니다.
위 그림은 플립플롭 Q1의 J입력을 Q3 값의 반전 값을 입력하고 있습니다. 그럼 Q3의 상태 값이 0일 때는 그 역수인 1이 계속 입력되고 있지만, Q3의 값이 1이 되면 플립플롭 Q1의 JK입력값은 01이 되어 상태 값은 0이 되게 됩니다.
마지막으로 해결해야 될 것은 A0이 1이고, A3이 1일 때 플립플롭 Q3의 상태 값을 반전시켜야 됩니다. 그런데 쉽게 떠오르지는 않네요. Q3의 상태 도표를 다시 한번 보겠습니다.
6단계에서 A2의 상태 값이 1에서 0으로 될때를 고려하여 식을 세웠습니다. 하지만, 다시 들여다보면, A3의 상태값이 1이 될때 특이점은 A2, A1, A0가 모두 1에서 0으로 전환될때 입니다. 그럼 이때에 Q3의 JK신호를 11로 하고, 그 외의 경우에는 JK신호를 01로 하여 0으로 만들면 됩니다. 회로도로 그리면 다음과 같습니다.
위의 회로도에서 붉은색은 Q3의 CLK신호입니다. 이는 Q0의 상태값이 1에서 0 변할 때 CLK신호가 발생하여 플립플롭 Q3가 작동하게 되는 것입니다.
그다음 파란색 부분은 Q1과 Q2의 상태 값을 AND게이트로 받아 두 값 모두가 1일 때 Q3의 J값을 1로 입력하는 것입니다.
이로써 A0, A1, A2가 모두 1에서 0으로 변환할 때, Q3의 JK값이 11이 되고, 나머지 모든 경우는 JK값이 01이 되어 항상 상태 값이 0이 되게 됩니다.
1000에서 1001이 되는 경우에는 A0가 0에서 1로 전환되는 시점이라 플립플롭 Q3에는 트리거가 발생하지 않아 작동하지 않고 상태 값 1을 유지하게 됩니다.
'10진 상향 비동기카운터'는 위와 다르게 다양한 방법으로 설계가 가능합니다. 그리고 플립플롭의 클리어 입력 신호를 사용하면 훨씬 더 간단하게 설계가 가능하기도 합니다.
본문제를 외우지 않고, 스스로 회로도를 설계할 수 있으면, 조직응용기사의 논리회로는 마스터했다고 해도 과언이 아닙니다. ^^ 이 정도면 전자계산기기사도 큰 어려움 없이 합격할 수 있는 수준이라 할 수 있기 때문에, 두 자격증 모두에 도전하시는 분은 회로도를 외우지 마시고, 스스로 설계할 수 있게 이해하시며 공부하시면 좋습니다.
https://youtube.com/playlist?list=PLboXycXmAIDt4ObBRPVj29BuD2d27oRnO
반응형'전자계산기조직응용기사 > 실기 필답형 기출문제 해설' 카테고리의 다른 글
[문제해설] 다음 수식 A/B*(C-D)+E 을 Postfix로 표현하시오. (0) 2022.05.03 [문제해설] 다음 논리식 X = AB + CD의 회로를 2입력 NAND 게이트 3개로 구성하시오. (0) 2022.04.26 [문제해설] 다음 2진수 값을 부분적으로 반전하고자 할 때 사용되는 논리게이트와 마스크 비트 값을 쓰시오. (0) 2022.04.19 [문제풀이] 다음 식을 카르노 맵을 이용하여 나타내시오. (8) 2022.04.05 [문제해설] 현재 CPU와 스택의 상태가 다음과 같다면 CPU가 스택에서 1바이트 데이터를 독출(POP)한 후 SP의 내용은 무엇인가? (0) 2022.03.20