VHDL

4-way Traffic controller VHDL

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

 

<b>  </b>

S0에선 북-남쪽이 초록불일 땐, 남북이 통행해야 하므로 동-서 는 빨간불이 되어야 한다

<b>  </b>

S1에선 북-남쪽이 황색일 때, 동서는 다음 초록신호를 기다려야 하므로 빨간불이 되어야 한다.

<b>  </b>

S2에서 서로 빨간불이 되어 횡단보도(예시)의 신호를 기다린다.

<b>  </b>

S3에선 동서쪽이 통행을 해야하므로 북쪽은 빨간색이 되어야한다.

<b>  </b>

S4에선 이제 다시 남북쪽이 통행하기위한 중간단계로 동서쪽은 황색불이고 남북은 빨간불이 되어야 한다.

S5에선 다시 서로 빨간불이 되어 다음 남-북의 통행신호가 되기를 기다린다.

 

 

2. 소스코드 및 설명

 

14: state type을 정해준다 (내용은 s0,s1,s2,s3,s4,s5)

 

16~21 : 각 신호에 관한 시간을 상수처리해주어서 선언한다.

 

23 : 이전과 다음에 관한 state signal형으로 선언해준다

 

24 : time_setting이란 타이밍을 신호로 선언하고 상수형의 0~5범위를 가지는 값을 선언한다.

 

27:rst clk에 관한 출력값을 설정해준다.

28:0부터5까지 정수범위를 가지는 cnt의 변수값을 지정해준다.

 

30:rst 1일시 이전상태는 s0을 전달 cnt0을 대입함.

33:clk신호가 상승신호시마다

34:cnt cnt+1 ,1씩증가하는 값을 대입해준다.

 

35:clk펄스의 신호에따라 cnt가 증가하며

cnt값이 time_setting의 값과 같아지면

next_state를 전달해주고 cnt 0으로 초기화한다.

 

 

42: pre_state 의 값에 따라 출력이 되는 process

 

44: pre_state의 관한 case

45~50 : s0 state일 때,

R,Y,G에 해당하는 2비트로직벡터값을 전달해준다.

상수형 정수5를 전달해주고 p1:process문에 의하여 clk펄스가 5번상승(cnt=5)가 되면

next_state s1을 전달해준다.

 

51~80번도 각 state (s1,s2s,3s4,s5)마다 RYG에 출력신호를 전달하고

상태에 맞는 time_setting값에 선언해준 상수형정수의 값을 전달하여 cnt값을 정한다음 cnt값을 초기화 한후 next_state에 다음 stata를 전달해주어 넘어간다.

 

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

 

 

 

출력 R,G,Y에 있어서 1비트의 자리는 남북, 0비트의 자리는 동서이다.

1은 점등을 의미하고 0은 소등을 의미한다.

 

1. rst 1일시 s0인 상태가 된다. S0은 남북이 초록, 동서는 빨간불이므로 G 1비트자리에 1(남북이초록),0비트의 자리에 0(동서는 초록불이안들어옴)이 되고

R 1비트 자리에 0(남북은 R에 점등이안됨), 0비트 자리에1 0(동서는 R에 점등) 이 된다. 5clock동안 유지된다.

 

2. 1번의 s0상태가 clk pulse 5clock동안 유지되고 다음에 s1의 상태가된다.

s1상태는 남북은 Yellow, 동서는 Red이므로 , Y 10 (남북 점등,동서 소등)가 되고 G는 둘 다 소등, R은 동서만 점등이므로 01이 유지된다. 2clock동안 유지된다

 

3. S1에서 2clock  S2로 변하므로 S2에선 동서남북이 모두 빨간불 이므로,

R 11, G,Y 00이 된다. 2clock동안 유지된 후 다음 S3로 넘어간다.

 

4. S3에선 동서가 통행이므로 G 0비트자리가 1이되고,

남북은 통행할수 없으므로 빨간불 R 1비트자리가 1이된다.

G = 01, R=10, Y=00이 출력 된다. 5clock동안 유지후 다음 상태로 넘어간다.

 

 

반응형