1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thực tập tốt nghiệp: Thiết kế hệ thống đèn giao thông tại ngã tư sử dụng FPGA (verilog language)

9 2,1K 20

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 605,08 KB
File đính kèm New folder.rar (777 KB)

Nội dung

báo cáo thực tập tốt nghiệp phần thiết kế hệ thống đèn giao thông cho ngã tư sử dụng chip FPGA XC2XL của xilinx và dùng ngôn ngữ lập trình phần cứng là verilog. Phần mềm mô phỏng là xilinx ISE 9.1. Báo cáo này chỉ bao gồm phần thiết kế giải thuật và phần mềm code cho hệ thống, chưa có phần thiết kế phần cứng do vấn đề về kinh phí

Trang 1

Báo cáo thực tập tốt nghiệp(tuần cuối)

SV :

Thầy hướng dẫn :

I Bài toán điều khiển đèn giao thông cho ngã tư

Có một ngã tư với 4 đường A,B,C,D 2 chiều như hình vẽ minh họa, yêu cầu đặt

ra là thiết kế hệ thống đèn giao thông tối ưu nhất cho ngã tư này

Ta thấy có tất cả 12 ngã rẽ ( lối đi thẳng cũng coi là 1 ngã rẽ) là AB, AC, AD,

BA, BC, BD, CA, CB, CD, DA, DB, DC

Sẽ có các ngã rẽ được đi đồng thời và các ngã rẽ không được đi cùng thời điểm

Nếu giữa 2 ngã rẽ không thể đi đồng thời hay xảy ra xung đột thì ta gán giá trị là 1 Do đó ta có bảng giá trị trạng thái sau :

AD

BA

CB

Trang 2

DB 1 1 1 1

DC

Hệ thống đèn giao thông tại ngã tư sẽ có các trạng thái sao cho mỗi trạng thái là 1 tập các ngã rẽ không xung đột với nhau

Từ bảng ta sẽ có các trạng thái sau :

State 1 : AB, AC,AD,BA,CB,DC

State 2 : BC,BD

State 3 : CA,CD

State 4 : DA,DB

Vậy hệ thống đèn giao thông tại ngã tư sẽ có 4 trạng thái hoạt đông luân phiên nhau Khi một trạng thái hoạt động thì 3 trạng thái còn lại sẽ bị cấm Dễ thấy các ngã rẽ AD, BA, CB, DC không xung đột với bất kì ngã rẽ nào khác cho nên state 1 sẽ rút gọn còn 2 ngã rẽ : AB và AC

Như vậy ta cần 4 cột đèn tín hiệu tại bên phải của mỗi con đường Mỗi cột đèn tín hiệu bao gồm một LCD hiển thị led 7 thanh 2 số, 3 led đơn hiển thị các mầu đỏ, vàng, xanh

Trên thực tế tại các ngã tư, ta thấy chỉ có 2 trạng thái đó là (state 1 + state 3) và (state 2 + state 4)

Điều này cũng dễ hiểu vì nếu ta chia làm 4 trạng thái như trên thì nếu một trạng thái muốn hoạt động thì sẽ phải chờ trong khoảng gấp 3 lần thời gian hoạt động của mỗi trạng thái kia Như vậy nếu thời gian đèn xanh của state1 là 30s thì thời gian đèn đỏ của nó là 90s, điều này là không khả thi

Vì vậy từ yêu cầu của bài toán và thực tế, hệ thống điều khiển đèn giao thông sẽ có các module sau :

- Counter

- Divider clock ( chia clock cho phù hợp với bài toán)

- Module xử lý trung tâm

- Module hiển thị(led đơn, led 7 thanh)

II Viết chương trình (ngôn ngữ verilog)

1.module divide clock : div_clk.v

module div_clk(input clk_100, output reg clk);

reg [26:0] tmp;

Trang 3

always @ (posedge clk_100)

begin

if (tmp<49999999) tmp <= tmp+1;

else tmp<=0;

end

always @ (posedge clk_100)

begin

if (tmp==49999999) clk<=!clk;

else clk<=clk;

end

endmodule

2.Module main : dengiaothong.v

module dengiaothong(input clk,rst,output reg [4:0] c,output reg [11:0] a);

always @ (posedge clk)

begin

if(rst)

begin

c<=30;

a<=12'b100100001001;

end

else

begin

if(c>0)

begin

c<=c-1;

if(c==3) begin

if(a==12'b100100001001) a<=12'b010010001001; else if(a==12'b001001100100) a<=12'b001001010010; else;

Trang 4

end end

else

begin

c<=30;

if(a==12'b010010001001) a<=12'b001001100100;

else if(a==12'b001001010010) a<=12'b100100001001;

else;

end

end

end

endmodule

trong đó : c là số đếm từ 30 về 0 C= 3 thì đèn xanh nhảy về vàng và c=0 thì đèn vàng sẽ chuyển sang đèn đỏ

a là 1 chuỗi 12bit trong đó tính từ bit thấp sang bit cao sẽ lần lượt thể hiện trạng thái của cột đèn tại 4 đường A,C,B,D với các màu tương ứng là đỏ vàng xanh

3.Module chia số c thành 2 số là số đơn vị và hàng chục : twosep.v

module twosep(input [4:0] c, output reg [3:0] dv,ch);

always @ (c)

begin

if(c<10)

begin

dv<=c;

ch<=0;

end

else if((c>=10)&&(c<20))

begin

ch<=1;

dv<=c-10;

end

else if((c>=20)&&(c<30))

Trang 5

dv<=c-20;

ch<=2;

end

else

begin

dv<=0;

ch<=3;

end

end

endmodule

4 Module giải mã led7thanh : seg7_dec.v

module seg7_dec(input [3:0] dv,ch,output reg [6:0] DV,CH); always @ (dv,ch)

begin

if (dv==0) DV<=7'b1000000;

else if (dv==1) DV<=7'b1111001;

else if (dv==2) DV<=7'b0100100;

else if (dv==3) DV<=7'b0110000;

else if (dv==4) DV<=7'b0011001;

else if (dv==5) DV<=7'b0010010;

else if (dv==6) DV<=7'b0000010;

else if (dv==7) DV<=7'b1111000;

else if (dv==8) DV<=7'b0000000;

else DV<=7'b0010000;

end

always @ (dv,ch)

begin

if (ch==0) CH<=7'b1000000;

else if (ch==1) CH<=7'b1111001;

Trang 6

else if (ch==2) CH<=7'b0100100;

else if (ch==3) CH<=7'b0110000;

else if (ch==4) CH<=7'b0011001;

else if (ch==5) CH<=7'b0010010;

else if (ch==6) CH<=7'b0000010;

else if (ch==7) CH<=7'b1111000;

else if (ch==8) CH<=7'b0000000;

else CH<=7'b0010000;

end

endmodule

5.Module nối dây : top.v

module top(input clk_100,rst,output [11:0] a,output [6:0] DV,CH); wire clk;

wire [4:0] c;

wire [3:0] dv,ch;

div_clk div(

.clk_100(clk_100), clk(clk));

dengiaothong trafficlight(

.clk(clk), rst(rst), c(c), a(a));

twosep twosep_c(

.c(c), dv(dv), ch(ch));

seg7_dec dec_dv(

.dv(dv), DV(DV));

Trang 7

seg7_dec dec_ch(

.ch(ch), CH(CH)); Endmodule

III Kết quả

1.kết quả thực thi chương trình

2 RTL view

Trang 8

RTL đã thể hiện đúng như yêu cầu.

IV Kết luận

Về phần mềm đã chạy tốt, hệ thống có thể thực thi trên một kit CPLD hoặc FPGA bất kì của hãng Xilinx

Trang 9

Về phần cứng : chỉ cần gắn chân cho các đầu ra của chương trình tương ứng với các chân trên kit và sau đó nạp chương trình là có thể chạy được

Nhưng do kit XC2XL của hãng Xilinx không hỗ trợ chuẩn USB mà dùng chuẩn giao tiếp song song nên gây khó khăn trong việc thực thi cũng như nghiên cứu nên chúng em quyết định sẽ không làm đồ án liên quan tới kit này nữa Vậy mong thầy xem xét về phần thực tập này của chúng em và cho chúng em một hướng đi khác phù hợp hơn

Ngày đăng: 05/09/2016, 22:10

TỪ KHÓA LIÊN QUAN

w