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 |
|---|---|---|
| S0 | S0, hit=0 | S1, hit=0 |
| S1 | S10, hit=0 | S1, hit=0 |
| S10 | S0, hit=0 | S1, hit=1 |
각 열은 한 상승 에지의 관찰 기록입니다. 입력은 에지 직전, 이름에 after가 붙은 상태는 갱신 직후 값입니다. 열의 정렬은 샘플 순서를 나타내며 물리적인 전파 지연전파 지연 입력이 바뀐 뒤 출력이 올바른 값으로 안정되기까지 걸리는 시간입니다. 논리식의 등가성과 시간 특성은 별개입니다. 자세히 보기을 그린 것이 아닙니다. reset 후 S0에서 시작하고 valid는 모든 열에서 1입니다. 세 번째 비트에서 검출된 뒤 S1을 남기므로 다섯 번째 비트도 검출할 수 있습니다.
파형 데이터 보기
| 신호 | 파형 | 버스 값 |
|---|---|---|
| accepted bit | 10101 | |
| state after | 23452 | S1 → S10 → S1 → S10 → S1 |
| hit after | 0.101 |
등록된 검출 출력을 구현합니다
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
endmodulehit는 상태와 해당 에지에서 수락한 입력으로 계산한 값을 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기에 저장합니다. 단순 조합 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번째 검출을 놓칩니다.