Verilog를 이용한 교통신호제어기(TLC) 설계
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

Verilog를 이용한 교통신호제어기(TLC) 설계에 대한 보고서 자료입니다.

목차

1. Smart TLC의 Block Diagram

2. Moore 스타일 State Diagram

3. Verilog 설계

4. Test Plan

5. 파형 설계

6. 결과 화면

7. 토의

본문내용

next_state = S0;
endcase
end
endmodule
4. Test Plan
구간 (nanoseconds)
경우
예상 결과
clear
X
P
hl
ll
pl
0
~
50
1
0
0
GREEN
RED
RED
시스템이 리셋된다. 처음 LI1(80 ns) 동안, 차와 보행자가 오지 않았다.
50
~
125
0
0
0
GREEN
RED
RED
국도에서 차가 180 ns에 센서에 감지된다. 이번 LI1은 205 ns까지이다.
125
~
180
0
0
0
GREEN
RED
RED
180
~
205
0
1
0
GREEN
RED
RED
고속도로 신호가 황색에서 적색으로 바뀐다. 차는 250 ns에 사라진다.
205
~
225
0
1
0
YELLOW
RED
RED
225
~
250
0
1
0
RED
GREEN
RED
250
~
265
0
0
0
RED
GREEN
RED
265
~
285
0
0
0
RED
YELLOW
RED
다른 차가 320 ns에 나타난다. 이번 LI1은 365 ns까지이다.
285
~
320
0
0
0
GREEN
RED
RED
320
~
365
0
1
0
GREEN
RED
RED
신호는 바뀌었지만 차는 완전히 사라지지 않았다.
그래도 신호는 잠시 후(LI2, 60 ns)에 바뀐다.
365
~
385
0
1
0
YELLOW
RED
RED
385
~
445
0
1
0
RED
GREEN
RED
445
~
465
0
1
0
RED
YELLOW
RED
465
~
500
0
1
0
GREEN
RED
RED
이제 차는 사라졌고, 보행자가 나타나서 버튼을 누른다. 이번 LI1은 545 ns까지이다.
500
~
510
0
0
0
GREEN
RED
RED
510
~
520
0
0
1
GREEN
RED
RED
520
~
545
0
0
0
GREEN
RED
RED
신호가 바뀐다. SI(20 ns)와 LI2가 지난 후, 신호는 원래 상태로 되돌아온다.
545
~
565
0
0
0
YELLOW
RED
RED
565
~
625
0
0
0
RED
RED
GREEN
625
~
750
0
0
0
GREEN
RED
RED
5. 파형 설계
Verilog 코드 - tb_sig_control.v
`timescale 1ns/1ns
`define CLK_PERIOD 10
`define TRUE 1'b1
`define FALSE 1'b0
module tb_sig_control;
wire [2:0] MAIN_SIG, CNTRY_SIG, PED_SIG;
reg CAR_SENSOR, PED_BUTTON;
reg CLOCK, CLEAR;
// Instantiate signal controller
sig_control SC(MAIN_SIG, CNTRY_SIG, PED_SIG, CAR_SENSOR, PED_BUTTON, CLOCK, CLEAR);
// Setup monitor
initial
$monitor($time, "Main Sig = %b Country Sig = %b Car_on_cntry = %b", MAIN_SIG, CNTRY_SIG, CAR_SENSOR);
// Setup clock
initial
begin
CLOCK = `FALSE;
forever #(`CLK_PERIOD/2) CLOCK = ~CLOCK;
end
// control clear signal
initial
begin
CLEAR = `TRUE;
#(5*`CLK_PERIOD)
CLEAR=`FALSE;
end
// apply stimulus
initial
begin
CAR_SENSOR = `FALSE;
PED_BUTTON = `FALSE;
#(18*`CLK_PERIOD) CAR_SENSOR = `TRUE; // 180 ns
#(7*`CLK_PERIOD) CAR_SENSOR = `FALSE; // 250 ns
#(7*`CLK_PERIOD) CAR_SENSOR = `TRUE; // 320 ns
#(18*`CLK_PERIOD) CAR_SENSOR = `FALSE; // 500 ns
#(`CLK_PERIOD) PED_BUTTON = `TRUE; // 510 ns
#(`CLK_PERIOD) PED_BUTTON = `FALSE; // 520 ns
#(23*`CLK_PERIOD) $stop; // 750 ns
end
endmodule
6. 결과 화면
0 ns ~ 250 ns
250 ns ~ 500 ns
500 ns ~ 750 ns
7. 토의
repeat 키워드를 사용하면 안 되기 때문에, 나는 이 키워드를 대체할 것을 생각해야 했다. 그래서 clock의 positive edge에서 숫자를 세는 변수는 선언했다. clear가 0일 때, cnt 변수는 숫자를 세기 시작한다. 이 변수가 지정된 숫자까지 정확하게 세어야 하는데 0부터 세기 때문에 지정된 숫자에서 1을 뺀 숫자까지 세도록 했다.
X가 LI1가 끝나기 전에 1이 되면, 즉 차가 센서에 감지되면 신호가 바뀔 때까지 그 자리에 있기 때문에 나는 이 X의 값이 계속 지속된다고 가정했다. 실제로, 이 부분은 그다지 어렵지 않았다. 그런데 횡단보도 신호등 부분은 조금 어려웠다. 왜냐하면 보행자는 신호등이 바뀔 때까지 버튼을 계속 누르고 있지 않기 때문이다. 그래서 나는 Ppushed라는 변수를 만들어서 보행자가 버튼을 눌렀는지에 대한 정보를 저장하도록 했다. 보행자가 버튼을 누르면 P는 잠시 동안만 1이 되지만 Ppushed는 LI1이 끝날 때까지 계속 1인 상태를 유지한다. 이렇게 하면 X와 같은 방식으로 처리할 수 있다.
가장 어려운 부분은 국도의 신호가 녹색일 때, 차가 사라지는 부분이다. 다른 부분과는 달리 이 경우 정해진 시간이 지나면 신호가 바뀌는 것이 아니라 차가 사라지면 바뀐다. 처음에는 cnt 변수가 숫자를 제대로 세지 않는 등 오작동을 일으켰다. 하지만 cnt_init이라는 변수를 새로 생성했더니, 이 문제가 해결되었다. Verilog 코드 위치상에서, 이전에는 cnt 변수가 숫자를 세는 곳과 0으로 리셋 되는 곳이 서로 달랐던 것이다. 아마도 이 때문에 그런 문제가 발생한 것으로 보인다.
원하는 결과를 얻기 위해서 상당히 오랜 시간이 걸렸지만, 그래도 결과는 성공적이었다.

키워드

TLC,   신호등,   Verilog
  • 가격2,000
  • 페이지수11페이지
  • 등록일2009.10.16
  • 저작시기2009.10
  • 파일형식한글(hwp)
  • 자료번호#557110
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니