본문으로 건너뛰기
code0.HDL

상태와 레지스터

회로에 기억이 필요한 이유, 입력 D와 출력 Q를 가진 레지스터, 레지스터가 지금 가진 값과 다음 클록 에지 뒤에 가질 값의 차이를 다룹니다.

이 장에서 배울 내용

  • 조합 회로가 기억하지 못하는 이유와 레지스터가 더하는 것을 설명할 수 있습니다
  • 레지스터가 지금 가진 값(Q)과 에지 뒤에 가질 값(D)을 구분할 수 있습니다
  • 레지스터 하나와 직렬 레지스터 두 개의 상태표를 채울 수 있습니다
이 장에서 배우는 개념
  • 레지스터(D와 Q)
  • 현재 값과 다음 값
먼저 알아야 할 개념

1. 조합 회로는 기억하지 못합니다

앞 단원까지의 회로는 모두 조합 회로였습니다. 출력은 지금 들어온 입력만으로 정해지고, 입력이 바뀌면 출력도 함께 바뀝니다. "지난번 값에 1을 더한다"는 카운터는 조합 회로로 만들 수 없습니다. 지난번 값을 어딘가에 두어야 하는데 조합 회로에는 그런 자리가 없습니다.

여기서 다루는 동기 회로에서는 레지스터가 클록 에지 사이에 값을 저장합니다. 레지스터에 저장된 값을 회로의 상태라고 부릅니다. 상태가 있는 회로를 순차 회로라고 합니다.

구분출력을 정하는 것저장예
조합 회로현재 입력없음AND, 멀티플렉서, 가산기
순차 회로현재 입력과 저장된 값레지스터카운터, 상태 기계

2. 레지스터는 에지에서 D를 Q로 복사합니다

레지스터는 입력 D와 출력 Q를 가집니다. 클록이라는 신호가 0에서 1로 바뀌는 순간을 상승 에지라고 합니다. 이 단원의 레지스터는 상승 에지에서만 D의 값을 저장하고, 그 값을 다음 에지까지 Q에 유지합니다. 에지가 아닌 시간에 D가 아무리 바뀌어도 Q는 바뀌지 않습니다.

아래 실험에서 d를 바꾼 뒤 클록 에지를 눌러 보세요. d를 바꾸는 순간에는 q가 움직이지 않고, 에지를 누른 뒤에만 q가 d를 따라갑니다.

개념 실험 · dff

컴파일한 설계가 아니라 브라우저 안의 회로 모델입니다. 실제 도구 체인은 예제에서 실행됩니다.

입력

출력

q
0

아직 에지가 없습니다. 입력을 정한 뒤 클록 에지를 인가하세요.

표의 각 행은 에지 하나입니다. "에지 직전" 열은 에지가 일어나기 전 q의 값, "에지 직후" 열은 에지가 D를 복사한 뒤의 값입니다. 두 열을 비교하면 그 에지가 상태를 어떻게 갱신했는지 알 수 있습니다.

참고. 이 단원은 레지스터 하나에 클록 하나가 연결된 상승 에지 동기 설계만 다룹니다. 하강 에지에서 동작하는 레지스터, 에지와 무관하게 값을 바꾸는 비동기 리셋은 다음 단원과 각 언어 과정에서 필요한 곳에 설명합니다.

확인 문제

d가 0에서 1로 바뀌었습니다. q는 언제 1이 됩니까?

답

확인 문제

에지가 한 번도 없는 동안 d가 0, 1, 0으로 바뀌었습니다. q는 어떻게 됩니까?

답

3. 현재 값과 다음 값을 구분합니다

순차 회로를 설계할 때는 두 값의 역할을 구분합니다. 값을 유지할 때처럼 현재 값과 다음 값이 같을 수도 있습니다.

이름뜻어디에 있는가
현재 값레지스터가 지금 가진 값. Q에서 읽습니다레지스터 안
다음 값다음 에지에서 저장될 값. 현재 값과 입력으로 계산합니다레지스터 입력 D에 놓인 조합 논리

다음 값을 계산하는 부분은 조합 회로입니다. 에지가 오면 레지스터가 그 값을 저장하고, 그 순간부터 그것이 새 현재 값이 됩니다. 토글 회로가 가장 작은 예입니다. t가 1이면 다음 값은 현재 값의 반전이고, t가 0이면 다음 값은 현재 값 그대로입니다.

개념 실험 · toggle

컴파일한 설계가 아니라 브라우저 안의 회로 모델입니다. 실제 도구 체인은 예제에서 실행됩니다.

입력

출력

q
0

아직 에지가 없습니다. 입력을 정한 뒤 클록 에지를 인가하세요.

주의. 다음 값을 D에 놓는 순간 Q가 바뀌는 것이 아닙니다. Q는 에지에서만 바뀝니다. 같은 사이클 안에서 Q를 읽으면 아직 현재 값이 나옵니다. 이 한 에지의 차이는 오류가 아니라 레지스터의 정의입니다.

확인 문제

토글 회로의 현재 값 q가 1이고 t가 1입니다. 에지가 한 번 지나면 q는 무엇입니까?

4. 상태표 채우기

표를 직접 채워 봅니다. 아래 표의 d 열은 각 사이클에서 레지스터 입력에 놓인 값입니다. 각 사이클을 끝내는 에지가 지난 뒤 q가 어떤 값일지 적으세요. 비교 버튼은 처음 틀린 사이클을 알려 줍니다.

예측한 뒤 비교 · dff

비교하기 전에 모든 칸을 채우세요. 빈칸도 불일치로 처리합니다.

상태표
사이클d에지에서 샘플링한 입력q에지 직후
01
11
20
31
40
50

5. 변형: 레지스터 두 개를 이어 붙이면

레지스터 하나는 값을 한 에지 늦춥니다. 레지스터 두 개를 이어 붙이면 두 에지 늦어집니다. in 열을 보고 첫 레지스터 s1과 둘째 레지스터 s2가 에지 뒤에 가질 값을 적어 보세요. s2의 다음 값은 in이 아니라 s1의 현재 값입니다.

예측한 뒤 비교 · delay2

비교하기 전에 모든 칸을 채우세요. 빈칸도 불일치로 처리합니다.

상태표
사이클in에지에서 샘플링한 입력s1에지 직후s2에지 직후
01
10
20
31
41
50

6. 정리

  • 조합 회로는 기억하지 않습니다. 이전 값이 필요하면 레지스터가 필요합니다.
  • 레지스터는 상승 에지에서 D를 저장하고 다음 에지까지 Q에 유지합니다.
  • 현재 값은 Q에서 읽고, 다음 값은 조합 논리가 계산해 D에 놓습니다. 둘은 에지 하나만큼 떨어져 있습니다.
  • 레지스터를 이어 붙이면 그 수만큼 에지가 늦어집니다.

다음 장에서는 클록의 주기와 사이클, 레지스터를 정해진 값으로 되돌리는 리셋, 갱신을 멈추는 enable을 다룹니다.

확인 지점

이 장의 확인 문제에 답하세요