<aside> ❓ 플립플롭 = 1비트 기억소자
</aside>
1비트
는 a, b, c, d, 1, 2 같이 1개 단위의 문자를 뜻하기도 해요. 예외로 한글은 글자가 커서 ㄱ, ㄴ, 가, 저, 등등.. 1글자당 2비트
를 먹어요.
여튼, 우리가 지금까지 논리게이트를 이용해서 회로를 만든 것 처럼 플립플롭을 만들면
1비트를 기억할 수 있게 돼요. 1비트를 기억한다는게 잘 안와닿죠?SR 플립플롭
먼저 NOT 게이트를 만들어요.
그 다음에 NOT 게이트를 하나 더 붙여 이어서 연결을 시켜요.
자, 그럼 만약에 NOT에 0이 들어왔다고 쳐볼게요.
그럼 어떻게 돼요? 시간이 흘러도 NOT하고 NOT 사이에는 항상 1이라는 값이 있죠? 이렇게 1비트가 기억이 돼요. 이게 플립플롭의 기본 모습이다~ 라고 할 수 있어요.
이 회로를 좀 발전시켜서 어떤 형태의 모습으로 만들게 되냐면, 아래 회로도처럼 만들어지게 됩니다.
여기서
S
,R
이라고 하는것은 우리 0하고 1을 입력으로 줬던LOGICSTATE
기억하죠? 그거랑 같은 그냥 입력신호에요.그리고 중간에
클럭펄스
(CP)를 줍니다. 여기서 클럭펄스가 뭐냐면, 컴퓨터나 핸드폰, 스마트워치 등등과 같은 디지털 시스템에서 모든 동작을동기화
하기위해 사용하는 전자적 펄스에요. 전원을 껏다 켜는 것도, 지금 우리가 Zoom을 하고 있는데, 이 Zoom 프로그램을 실행시키고 끄는 것도 다 클럭펄스로 인해 생기는거에요. 쉽게 생각하면 0과 1의 신호중에 무조건 1을 주는 친구에요. 신호를 주는 소자.자 그럼 이어서 플립플롭 회로를 볼게요. 이거 빨간 동그라미로 친거 무슨회로죠? 아는 학생?
그쵸, NAND에요. 외우기 쉽게 설명했었죠? 논리게이트 모양이 D 모양이니까 AND로 외우시라고. 그리고 AND앞에 동그라미 붙은 이건? NOT이죠. 그래서 NAND에요.
자, AND 게이트 진리표가 어떻게되죠?
이렇게 되죠, 모두가 1일때만 1
그럼 NAND는 어떻게돼요?
그쵸, AND의 반대가 됩니다.
우리가 쓸 회로에서 NAND만 쓰죠.
자, 그럼 Q(큐)하고 Q_(큐바)는 뭐에요? 결과값이에요. 그러니까 어떤 회로냐면, S, R 두개의 신호를 주고 Q, Q_ 두개의 결과를 뽑아내겠다.
위에 표시한 디바이스랑, NAND 사용해서 회로로 그린거랑 같은의미에요~ 여기서 S는
Set
, R은Reset
을 의미해요.그래서 RS플립플롭 또는 SR플립플롭이라고 해요. 여기서 S랑 R에 어떤 값이 들어오냐에 따라 Q와 Q_의 값이 달라져요.
Q가 0이면 Q_는 1, Q가 1이면 Q_는 0이죠. 왜? Q위에 붙은 ㅡ(bar)가 무슨의미에요? NOT의 의미를 가지고 있죠.
자, 그럼 S랑 R에 어떤 값이 들어왔을 때 Q랑 Q_가 어떤 값을 띄는지 알아야겠죠.
입력 S, R에 들어올 수 있는 값이 뭐에요?
0 0
,0 1
,1 0
,1 1
총 4가지죠?여기서 현재상태를 $Q{n}$, 다음상태를 $Q_{n+1}$이라고 할게요.
여기서, S랑 R에
0 0
이 들어왔다고 해볼게요. 그리고 현재상태가0
이라고 가정해봐요. 그럼 Q는 0이고, Q_는? 1이죠, NOT이니까 반대로.
여기서 NAND 게이트는 뭐에요? 둘 다 1일때만 0이죠. 나머지 4개의 논리게이트도 다 NAND니까 다 똑같이 생각하면 돼요.
자 여기서 Clock Pulse가 발생해요. 아까 얘기했죠? 클록펄스가 발생한다는건 1이 들어간다는 의미입니다.
그럼 NAND 진리표대로 계산을 해볼까요?
Q와 Q_의 값이 변하지 않았어요. 그쵸?
그럼 이번엔 현재 상태가
1
이라고 가정해볼게요. 그럼 Q는1
, Q_는0
이 되겠죠?
마찬가지로 현재상태의 값와, 다음상태의 값이 1로 변하지 않았어요. 여기서 알 수 있는건 뭐다?
S와 R에 둘다
0 0
이 들어오게되면, 아무런 변화도 없다, 아무 동작도 하지 않는다. 라는것을 알 수 있어요. S와 R에 둘 다0 0
이 들어온다는게 무슨 뜻이에요? 아무것도 하지 않았다는 얘기에요. 조금 더 확실하게 이해해볼까요? 우리 그냥 집에 무드등이 있다고 예시를 들어보자구요. 그리고 무드등에는 전원을 껏다 켰다 할 수 있는 버튼이 있죠 보통?
믿기 힘들겠지만 병아리에요. 저희집에 있는 무드등인데, 이걸로 예시를 들어볼게요. S랑 R이라는 버튼을 가지고 병아리 무드등을 껏다켰다 할 수 있다고 해볼게요. 근데 둘 다
0 0
이라는게 무슨의미에요? 아무 버튼도 누르지 않는다는걸 의미하죠. 만약 무드등이 켜져있는 상태에서0 0
을 준다? 아무것도 하지 않으니까 계속 켜져있죠. 꺼져있는상태에서0 0
을 준다? 마찬가지로 아무것도 하지 않으니까 꺼져있죠. 그래서 현재상태Q와 다음상태Q_가 같은거에요. 상태는 변화 없음. 여기까지 말했으면 이해가 잘 되나요?자, 그럼 이제
0 1
과1 0
도 해봐야죠.
S가 0, R이 1일때, 그리고 현재상태 Q의 값이 0, Q_가 1일때 어때요? 마찬가지로 변화가 없어요. 자, 그럼 이제 현재상태 Q의 값이 1, Q_의 값이 0일때를 보자구요.
어때요 현재상태가 1에서 0으로 바뀌었죠?
여기서 알 수 있는것은 뭐다? R에 1이 들어오면 현재상태가 0이던 1이던 상태는
0
으로 바뀐다. 자 이것도 무드등으로 예시를 들어보자구요. 지금 S, R 중에 R만 1이 됐어요. 그쵸? R이 아까 뭐라고했죠?Reset
이라고했죠. 우리 기억을 리셋시키고 싶다 뭐 이런얘기 하잖아요? 말 그대로 Reset, Clear의 의미를 가지고있어요. 초기화, 없애다 등의 의미 그래서 R이 1이 올라가면? 현재 무드등이 켜져있던 꺼져있던 무드등을 끄겠다~ 0으로 만들겠다~ 라는 의미에요. 자 그럼 이번엔 S를 1로 올려볼거에요.S를 1로 올리고 현재상태Q가 0일때
자 이번엔 현재상태 Q가 0이었는데 1로 바뀌었어요. 그리고 현재상태 Q가 1이었을때도 해보자구요.
S가 1인상태에서는 현재상태 Q가 0이던 1이던 1이 나와요. S는 아까 뭐라고했죠?
Set
이라고 했죠. Set의 영어뜻이 그대로 뭐에요? 설정하다, 적용시키다 등의 의미를 가지고있죠. 이걸 통해 알 수 있는건 뭐다? 똑같은 예시로, 무드등이 켜져있던, 꺼져있건 무조건 키겠다~ 1로 만들겠다~ 이거에요. 자, 그럼 이제 마지막이에요. S와 R이 모두1 1
일 때.마찬가지로 현재상태 Q가 0일때부터 시작할게요.
자, 뭔가 이상해요. 현재상태 Q와 다음상태 Q_는 반대되는 상태여야하는데 둘 다 1이에요. 논리적으로 맞지않아요. 그쵸? 일단 그럼 현재상태 Q가 1일때도 해볼게요.
마찬가지에요. 현재상태Q가 1이어도 현재상태Q와 다음상태 Q_가 모두 1로 같아요. 논리적으로 말이 안되는 상황이에요. 그래서 S와 R이 모두
1 1
일 때는 무엇을 의미하냐면,사용할 수 없음
을 의미해요.RS플립플롭에서는 S랑 R이 둘 다
1 1
이 들어오는 경우를 사용하지 못해요.S R로 표현할 수있는 경우의수가 4개밖에 안되는데, 그중에 1개를 사용을 못한다니... 뭔가 손해보는 느낌이에요.
1 1
도 쓰고싶어. 그래서 나온게? JK플립플롭이에요.ㅎ... 여러분 JK플립플롭 설명하려고 하는데 다들 어때요 수업 들을만 해요? if(True): 그래요? 들을만 해요? 힘들다고 하면 이거만 하고 끝내려했는데 ㅎㅎ.. 그럼 더 진행해볼게요~ else: 어렵죠 이거 하나만으로도.. 그럼 오늘 수업은 이것만 프로테우스로 구현해보고 끝내볼게요. 이거 RS플립플롭 다음에 JK플립플롭, D플립플롭, T플립플롭, Master Slave플립플롭까지 있는데 다 RS플립플롭에서 파생돼서 나온거라 뒤에 나머지는 금방 끝나긴 해도, 여러분 지금 플립플롭 한번에 다 배우면 머리 터져요. 나머지는 다음주에 알려드리는걸로 하고, 간단하게 뭔지만 알려드릴게요.
SR플립플롭은
0 0
,0 1
,1 0
만 사용하는거 JK플립플롭은0 0
,0 1
,1 0
,1 1
모두 사용하는거 D플립플롭은0 1
,1 0
만 사용하는거 T플립플롭은0 0
,1 1
만 사용하는거Master Slave플립플롭은 위 4개의 플립플롭을 사용할 때, 너무 빠른 속도로 연산을 하다보니까 현재상태가 다음상태로 반영되지도 않았는데, 현재상태를 그대로 써서 연산에 문제가 생기는 것, 그걸 Race현상이라고 불러요. bit가 1bit씩 밀려버리는문제. 이러면 어떡해요? 결과값이 완전히 잘못나오게 되죠. 그래서 그걸 방지하고자 플립플롭을 2개를 연결해서 매우 정확하게, 안정성있게 플립플롭을 사용할 수 있게 해주는게 Master Slave플립플롭이에요.
이정도는 말만 듣고도 어렵지 않게 이해가 되죠? 31. 자, 그럼 프로테우스로 RS플립플롭, 또는 SR플립플롭. 같은말이에요~ 이 플립플롭을 구현 해 보고, 실습 마치도록 할게요. 32. 필요한 디바이스는 다음과 같습니다.
| CLOCK | CLOCKPULSE | | --- | --- | | LOGICPROBE | 출력 | | LOGICTOGGLE | 입력 | | NAND | NAND |
프로테우스 구현
맨 처음엔 실행을 시켜도 출력값에 뭐가 안나올거에요.
자 여기서 토글의 역할이 나옵니다. 우리는 원래
LOGICSTATE
로 클릭해서 0과 1을 줬었죠? 토글은 내가 클릭하고 있을 때만 신호가 들어오는거에요. 여기서 S의 역할을 하는 위에있는 토글로 신호를 한번 주면 현재상태Q의 값을 0으로 바꿔주고, R의 역할을 하는 아래에있는 토글로 신호를 한번 주면 현재상태 Q의 값을 1로 바꿔줍니다.현재상태가 0일때 R에 1을 줘볼게요. 어떻게 나와요? 현재상태가 0이 나오죠. 현재상태가 1일때도 R에 1을 줘볼게요. 그래도 0이 나오죠. 위에서 설명했던대로 R에 1을 주면
Reset
이기 때문에 모든것을 초기화시켜버려요. 현재상태를 0으로만 만들죠. 아까 예시로 무드등이 꺼지는 거에요.이번엔 현재상태가 0일때 S에 1을 줘볼게요. 어떻게 나와요? 현재상태가 1이 나오죠. 현재상태가 1일때도 S에 1을 주면, 현재상태는 1만 나오죠. 이것도 마찬가지로 Set은 뭐라했었죠? 설정하다. 적용시키다 라고 했어요. 아까 예시로 무드등이 켜진다고 비유했죠?
자 그럼 이번엔
1 1
을 줘볼게요. 토글 형식이라1 1
을 동시에 줄 수 없는데, 토글버튼 위에 보면 동그라미 표시가 하나 있어요. 그거 누르면 우리LOGICSTATE
처럼 눌러져요. 자 이렇게1 1
만들어볼게요. 그러면 어떻게 나오죠? 잠시 출력값으로1 1
이 나오다가 에러가 뜨는걸 볼 수 있어요.
과제