VHDL

Sequence Detector(순차검출기)

전자자연인 2021. 6. 9. 21:48
반응형

1011이 입력되면 1이 출력.

 

RESET : S0 초기화

 

S0 : 초기상태로 1011중 하나도 안들어온 상태

S1 : S0상태에서 1이 들어온 상태 (S0상태에서 0입력시 S0유지)

S2 : S0상태에서 10이 들어온 상태 

S3 : S0상태에서 101이 들어온 상태

S4 : S0상태에서 1011이 들어온상태 

  

 

2.소스코드 및 설명

 

 





 

12 : state 타입은 s0,s1,s2,s3,s4로 이루어진 것을 선언

13 : state타입의 present_state,next_state signal형 선언

 

19 : clk pulse가 상승신호일시

20 : rst=1 이면 present_state  s0

23 : 아닐 경우 present_state next_state를 전달해준다

28 : present_state D_in에관하여 process

29,30 : next_state s0부터 시작한다.

 

32: present_state case문으로 present_state의 상태에따라 결정하는 조건문

 

33~62 :  s0,s1,s2,s3,s4의 상태에 대해서 입력값 D_iN 1일 때와 0일 때 next_state가 어떤 값으로 가는지 state타입으로 적어준다, 1 0에 따라 next_state가 변하므로 D_in에 대하여 하나의 입력신호에 대해서 if문을 사용하여 next_state를 정해주고 나머지 입력 신호에 대해선 else를 사용

63: 나머지의 경우에 대해선 next_state s0을 전달해준다,

67 : p2 단계에서 D_in의 입력 신호에따라 next_state present_state에 전달 해주 었다. p3단게에서는 present_state에 전달된 state type의 값을 기술해준다.

 

69~75 S0 0이고,S1 0,S2 0,S3 0,S4 1 이값을 D_out에 전달해준다.

 

 

3.시뮬레이션 결과 및 설명

 

 

 

 

1. RST=1이므로 초기값은 s0이 되었다. 이제 clk pulse의 상승신호에 맞춰 상태가 변한다. 처음에 S0에서 D_in 0이 되었으므로 S0을 유지하고 그다음 clk pulse에서 0이므로 S0을 유지한다.

 

2. S0에서 CLK_PULSE에 맞춰 D_in에 값에 따라 S0 -> S1 (D_in 1)

S1 -> S2 (D_in 0) , S2-> S3(D_in 1), S3 -> S4(D_in 1) 까지 상태가 변하므로 S4에서 1이 검출된다. 1011일시 1이 검출된 것이다.

 

 

반응형