Altifigence Academy

30 / 63 · 개념

카운터의 다음 상태와 리셋 우선순위

카운터가 증가·유지·리셋·순환하는 조건을 정하고 각 에지 이후의 값을 계산합니다.

다음 상태 식으로 기능을 먼저 정합니다

NN비트 자유 증가 카운터에 동기식 reset과 enable을 추가하면 다음과 같습니다.

Ck+1={0rk=1(Ck+1) mod 2Nrk=0, ek=1Ckrk=0, ek=0C_{k+1}=\begin{cases} 0&r_k=1\\ (C_k+1)\bmod2^N&r_k=0,\ e_k=1\\ C_k&r_k=0,\ e_k=0 \end{cases}

리셋리셋 상태를 명세한 초기값으로 돌리는 제어입니다. 동기식인지 비동기식인지, 다른 제어보다 우선하는지를 함께 정해야 합니다.을 가장 먼저 처리하고, 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
1130
2001
3012
4023
5030

각 열에는 한 상승 에지에서 관찰한 값을 기록했습니다. 입력은 에지 직전의 값이고, 이름에 after가 붙은 상태는 갱신 직후의 값입니다. 열은 값을 관찰한 순서대로 배치한 것이며, 실제 전파 지연전파 지연 입력이 바뀐 뒤 출력이 올바른 값으로 안정되기까지 걸리는 시간입니다. 논리식의 등가성과 시간 특성은 별개입니다. 자세히 보기을 나타내지는 않습니다. 초기 상태 3에서 시작해 첫 에지의 reset이 증가보다 우선합니다. 마지막 에지는 3에서 0으로 순환합니다.

2비트 카운터의 리셋과 순환
파형 데이터 보기
파형 데이터: 각 문자는 한 구간, 점은 이전 상태 유지, p는 클록 한 주기입니다.
신호파형버스 값
edge23452E0 → E1 → E2 → E3 → E4
reset10...
count before2345211 → 00 → 01 → 10 → 11
count after2345200 → 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을 계속 유지하려면 더 넓은 폭이나 별도 포화·오류 정책이 필요합니다.

선택은 이 브라우저에만 적용됩니다. 언제든 푸터에서 변경할 수 있습니다.