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í
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ó ngã tư với đường A,B,C,D chiều hình vẽ minh họa, yêu cầu đặt thiết kế hệ thống đèn giao thông tối ưu cho ngã tư Ta thấy có tất 12 ngã rẽ ( lối thẳng coi ngã rẽ) AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC Sẽ có ngã rẽ đồng thời ngã rẽ không thời điểm Nếu ngã rẽ đồng thời hay xảy xung đột ta gán giá trị Do ta có bảng giá trị trạng thái sau : AB AB AC AD BA BC BD CA CB CD DA DB 1 1 AC AD BA BC BD 1 1 1 1 CA 1 1 1 CB CD 1 DA 1 DB 1 1 1 1 1 DC DC Hệ thống đèn giao thông ngã tư có trạng thái cho trạng thái tập ngã rẽ không xung đột với Từ bảng ta có trạng thái sau : State : AB, AC,AD,BA,CB,DC State : BC,BD State : CA,CD State : DA,DB Vậy hệ thống đèn giao thông ngã tư có trạng thái hoạt đông luân phiên Khi trạng thái hoạt động trạng thái lại bị cấm Dễ thấy ngã rẽ AD, BA, CB, DC không xung đột với ngã rẽ khác state rút gọn ngã rẽ : AB AC Như ta cần cột đèn tín hiệu bên phải đường Mỗi cột đèn tín hiệu bao gồm LCD hiển thị led số, led đơn hiển thị mầu đỏ, vàng, xanh Trên thực tế ngã tư, ta thấy có trạng thái (state + state 3) (state + state 4) Điều dễ hiểu ta chia làm trạng thái trạng thái muốn hoạt động phải chờ khoảng gấp lần thời gian hoạt động trạng thái Như thời gian đèn xanh state1 30s thời gian đèn đỏ 90s, điều không khả thi Vì từ yêu cầu toán thực tế, hệ thống điều khiển đèn giao thông có module sau : Counter Divider clock ( chia clock cho phù hợp với toán) Module xử lý trung tâm Module hiển thị(led đơn, led 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; always @ (posedge clk_100) begin if (tmp