30 / 63 · 개념
카운터의 다음 상태와 리셋 우선순위
카운터가 증가·유지·리셋·순환하는 조건을 정하고 각 에지 이후의 값을 계산합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
다음 상태 식으로 기능을 먼저 정합니다
비트 자유 증가 카운터에 동기식 reset과 enable을 추가하면 다음과 같습니다.
리셋리셋 상태를 명세한 초기값으로 돌리는 제어입니다. 동기식인지 비동기식인지, 다른 제어보다 우선하는지를 함께 정해야 합니다.을 가장 먼저 처리하고, enable이 0이면 값을 유지합니다. 아래 시각화에서는 enable을 바꿔 증가와 유지 동작을 비교할 수 있습니다.
초기 q=11에서 reset=1을 고르면 다음 상태만 00으로 바뀝니다. 다음 클록을 눌러 저장값이 바뀌는 시점을 확인하세요. reset을 해제한 뒤 값이 00→01→10→11→00으로 변하는지 확인하세요. enable=0일 때는 클록 에지만 계속되고 q는 유지되는지도 비교하세요.
동기 reset이 enable보다 우선합니다. enable=0이면 현재 값을 유지합니다. q=11; q_next = (q + 1) mod 4
에지별 예측표를 작성하기
초기 상태가 3이고 첫 에지에서 reset=1, 이후 reset=0인 2비트 카운터라면 에지 이후 값은 0, 1, 2, 3, 0입니다. reset을 클록 사이에 1로 바꿨더라도 상승 에지상승 에지 클록이 0에서 1로 바뀌는 순간입니다. CLK=1인 구간 전체를 뜻하는 레벨과 구별합니다. 자세히 보기 전에는 동기식 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기 값이 바로 0으로 바뀌지 않습니다.
| 에지 | 에지 직전 reset | 이전 C | 갱신 C |
|---|---|---|---|
| 1 | 1 | 3 | 0 |
| 2 | 0 | 0 | 1 |
| 3 | 0 | 1 | 2 |
| 4 | 0 | 2 | 3 |
| 5 | 0 | 3 | 0 |
각 열에는 한 상승 에지에서 관찰한 값을 기록했습니다. 입력은 에지 직전의 값이고, 이름에 after가 붙은 상태는 갱신 직후의 값입니다. 열은 값을 관찰한 순서대로 배치한 것이며, 실제 전파 지연전파 지연 입력이 바뀐 뒤 출력이 올바른 값으로 안정되기까지 걸리는 시간입니다. 논리식의 등가성과 시간 특성은 별개입니다. 자세히 보기을 나타내지는 않습니다. 초기 상태 3에서 시작해 첫 에지의 reset이 증가보다 우선합니다. 마지막 에지는 3에서 0으로 순환합니다.
파형 데이터 보기
| 신호 | 파형 | 버스 값 |
|---|---|---|
| edge | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count before | 23452 | 11 → 00 → 01 → 10 → 11 |
| count after | 23452 | 00 → 01 → 10 → 11 → 00 |
동기식 reset과 비동기식 reset 구분하기
always_ff @(posedge clk) 안의 if(rst)는 동기식 reset입니다. 이벤트 목록에 reset 에지를 추가하는 비동기식 reset과 동일하지 않습니다. 비동기 reset 해제에는 recovery/removal 등 별도 타이밍 조건이 있어, 단순히 더 빨리 0이 된다는 이유로 바꿔서는 안 됩니다.
주기적으로 펄스를 내는 카운터라면 어떤 상태에서 펄스를 낼지까지 정해야 합니다. 값이 최댓값인 동안 1인지, 0으로 순환하는 에지 이후 한 사이클 동안 1인지에 따라 출력식과 관찰 시점이 달라집니다.
직접 생각해 보기
3비트 카운터가 7입니다. 첫 에지에 rst=0, en=0, 다음 에지에 rst=0, en=1이면 각 상태는 무엇인가요?
해설 보기
첫 에지에서는 값을 유지해 7이고, 다음 에지에서는 3비트 표현 범위를 넘어 0으로 돌아갑니다. 8을 계속 유지하려면 더 넓은 폭이나 별도 포화·오류 정책이 필요합니다.