Altifigence Academy

16 / 37 · 개념

모듈러·포화 카운터와 종료 펄스

최댓값 처리 방식과 terminal-count 신호의 정확한 사이클을 설계합니다.

범위 초과의 정책은 세 가지가 다릅니다

같은 N비트 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기라도 최댓값에서 순환할지, 최댓값을 유지할지, 오류를 보고할지는 명세입니다.

Cnextwrap=(C+1) mod 2NC_{next}^{wrap}=(C+1)\bmod2^N
Cnextsat=min⁡(C+1,2N−1)C_{next}^{sat}=\min(C+1,2^N-1)

8비트에서 255 다음이 0인 모듈러 카운터와 255인 포화 카운터는 서로 다른 기능입니다. 음수와 양수가 필요한 누산기에서는 signed 범위와 양쪽 포화 경계까지 고려합니다.

각 열은 한 상승 에지상승 에지 클록이 0에서 1로 바뀌는 순간입니다. CLK=1인 구간 전체를 뜻하는 레벨과 구별합니다. 자세히 보기의 관찰 기록입니다. 입력은 에지 직전, 이름에 after가 붙은 상태는 갱신 직후 값입니다. 열의 정렬은 샘플 순서를 나타내며 물리적인 전파 지연전파 지연 입력이 바뀐 뒤 출력이 올바른 값으로 안정되기까지 걸리는 시간입니다. 논리식의 등가성과 시간 특성은 별개입니다. 자세히 보기을 그린 것이 아닙니다. 초기 count=8, reset=0, enable=1입니다. 같은 입력에도 modulo-10, 4비트 wrap, 4비트 포화는 서로 다른 궤적을 만듭니다.

최댓값 이후의 세 가지 정책
파형 데이터 보기
파형 데이터: 각 문자는 한 구간, 점은 이전 상태 유지, p는 클록 한 주기입니다.
신호파형버스 값
edge234523452E0 → E1 → E2 → E3 → E4 → E5 → E6 → E7 → E8
mod10 after2345234529 → 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7
wrap4 after2345234529 → 10 → 11 → 12 → 13 → 14 → 15 → 0 → 1
sat4 after2345234..9 → 10 → 11 → 12 → 13 → 14 → 15

modulo-M의 마지막 상태를 비교합니다

10회마다 펄스를 내고 싶으면 상태 0~9를 쓰고, enable이 있는 유효 에지만 셉니다. pulse는 '이 에지에서 9를 소비하고 0으로 돌아갔다'는 의미로 등록할 수 있습니다.

SystemVerilog
always_ff @(posedge clk) begin
  if (rst) begin
    count <= 4'd0;
    pulse <= 1'b0;
  end else begin
    pulse <= 1'b0;
    if (en) begin
      if (count == 4'd9) begin
        count <= 4'd0;
        pulse <= 1'b1;
      end else count <= count + 4'd1;
    end
  end
end

pulse의 기본 대입이 있어 다음 에지에 0으로 돌아옵니다. 단순히 count==9를 출력하면 enable이 0으로 멈췄을 때 여러 사이클 동안 1일 수 있습니다. 종료 상태와 완료 이벤트를 구분해야 합니다.

주기를 세는 기준

reset 뒤 count=0에서 시작해 enable=1인 에지를 10번 통과해야 첫 pulse가 나옵니다. 첫 에지를 0번으로 부를지 1번으로 부를지보다, 입력·상태·출력 표의 정의를 일관되게 사용하는 것이 중요합니다.

이 실습은 modulo-16 카운터입니다. 초기 1110에서 한 에지를 진행하면 1111, 다음 에지는 0000입니다. 1111에서 enable=0으로 정지시켜 보세요. 유지와 포화는 값이 같아 보여도 재개했을 때 다른 동작입니다. 포화 카운터라면 같은 조건에서 어떤 값이 되어야 하는지 비교하세요.

4비트 최대값에서 멈추거나 순환하기

동기 reset이 enable보다 우선합니다. enable=0이면 현재 값을 유지합니다. q=1110; q_next = (q + 1) mod 16

직접 생각해 보기

위 회로가 count=9, pulse=0일 때 en=0인 에지를 두 번 지나고 en=1인 에지를 지나면 count와 pulse는 어떻게 되나요?

해설 보기

정지한 두 에지 동안 count=9, pulse=0을 유지합니다. 세 번째 에지에서 count=0, pulse=1이 됩니다. 그다음 에지에는 기본 대입으로 pulse=0이 됩니다.

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