Altifigence Academy

29 / 37 · 개념

종합 설계: 겹치는 101 패턴 검출기

상태 최소화, 입력 유효성, 등록 출력과 독립 참조 검증을 하나의 설계에 적용합니다.

요구사항부터 고정합니다

입력 valid=1인 상승 에지상승 에지 클록이 0에서 1로 바뀌는 순간입니다. CLK=1인 구간 전체를 뜻하는 레벨과 구별합니다. 자세히 보기에서 bit_in 한 비트를 수락합니다. 최근 수락된 비트의 끝이 101이면 hit를 그 에지 이후 한 사이클 동안 1로 표시합니다. 겹치는 패턴을 허용하므로 10101에서는 세 번째와 다섯 번째 비트에 hit가 나와야 합니다. valid=0이면 상태는 유지하고 hit는 0, reset이면 상태와 hit를 초기화합니다.

필요한 과거 정보만 저장합니다

S0는 일치하는 접두부가 없음, S1은 끝이 1, S10은 끝이 10임을 뜻합니다. 101을 완성한 뒤 마지막 1은 다음 패턴의 시작이 될 수 있으므로 S1로 돌아갑니다.

현재 상태수락 비트 0수락 비트 1
S0S0, hit=0S1, hit=0
S1S10, hit=0S1, hit=0
S10S0, hit=0S1, hit=1

각 열은 한 상승 에지의 관찰 기록입니다. 입력은 에지 직전, 이름에 after가 붙은 상태는 갱신 직후 값입니다. 열의 정렬은 샘플 순서를 나타내며 물리적인 전파 지연전파 지연 입력이 바뀐 뒤 출력이 올바른 값으로 안정되기까지 걸리는 시간입니다. 논리식의 등가성과 시간 특성은 별개입니다. 자세히 보기을 그린 것이 아닙니다. reset 후 S0에서 시작하고 valid는 모든 열에서 1입니다. 세 번째 비트에서 검출된 뒤 S1을 남기므로 다섯 번째 비트도 검출할 수 있습니다.

10101에서 겹치는 두 검출
파형 데이터 보기
파형 데이터: 각 문자는 한 구간, 점은 이전 상태 유지, p는 클록 한 주기입니다.
신호파형버스 값
accepted bit10101
state after23452S1 → S10 → S1 → S10 → S1
hit after0.101

등록된 검출 출력을 구현합니다

SystemVerilog
module pattern_101 (
  input logic clk, rst, valid, bit_in,
  output logic hit
);
  typedef enum logic [1:0] {S0, S1, S10} state_t;
  state_t state;
  always_ff @(posedge clk) begin
    if (rst) begin
      state <= S0;
      hit <= 1'b0;
    end else begin
      hit <= 1'b0;
      if (valid) begin
        case (state)
          S0: state <= bit_in ? S1 : S0;
          S1: state <= bit_in ? S1 : S10;
          S10: begin
            state <= bit_in ? S1 : S0;
            hit <= bit_in;
          end
          default: state <= S0;
        endcase
      end
    end
  end
endmodule

hit는 상태와 해당 에지에서 수락한 입력으로 계산한 값을 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기에 저장합니다. 단순 조합 Mealy 출력처럼 에지 사이의 bit_in 변화에 즉시 반응하지 않습니다. 이 설계 예시는 일반 SystemVerilog로 검토하며, 제공된 단일 클록 실습 엔진의 지원 문법과 실행 증거는 별도로 확인해야 합니다.

합격 기준을 독립적으로 계산합니다

수락 비트만 모아 문자열을 만들고, 길이가 3 이상일 때 마지막 세 글자가 101인지 비교하면 참조 모델을 만들 수 있습니다. FSM상태 기계 저장된 상태와 입력으로 다음 상태와 출력을 정하는 모델입니다. 상태 전이, 출력, 리셋 규칙을 함께 정의합니다. 자세히 보기 상태 인코딩을 참조 모델에 복사할 필요가 없습니다.

  • 101 → hit 위치 3
  • 10101 → hit 위치 3, 5
  • 11101 → hit 위치 5
  • 1001 → 검출 없음
  • 1,0 뒤 reset, 그다음 1 → 검출 없음
  • 1,0 사이 또는 뒤에 valid=0 삽입 → 수락 번호 기준 결과는 동일

아래 비트열 실습은 연속 유효 입력의 기능을 확인합니다. reset·valid 정지·물리 타이밍까지 확인한 결과로 해석하지 마세요.

입력을 바꿔 확인하기

직접 생각해 보기

101 검출 후 S0로 돌아가도록 코드를 바꾸면 어떤 가장 짧은 입력열에서 원래 명세와 달라지나요?

해설 보기

10101에서 차이가 납니다. 올바른 회로는 3번째와 5번째 입력을 검출합니다. S0로 돌아가면 첫 검출의 마지막 1을 다음 패턴의 시작으로 재사용하지 못해 5번째 검출을 놓칩니다.

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