thiết kế và mô phỏng lại quá trình hoạt động của đèn giao thông tại giao lộ với ngôn ngữ HDL, phần mềm IDE của hãng xilinx, kit spartan 3. trên nền FPGA. FPGA(Fieldprogrammable gate array) là một công nghệ cho phép người dùng có thể cấu hình lại bộ xử lý một cách tùy biến theo từng ứng dụng cụ thể, nhằm giúp tiết kiệm tài nguyên và tăng tốc độ xử lý. Nó gồm nhiều mảng các cổng đã được chế tạo sẵn nhưng chưa được kết nối với nhau, người lập trình có thể kết nối chúng lại với nhau tùy theo từng thuật toán cụ thể cho từng ứng dụng. Đèn giao thông là một phần thiết yếu đối với tất cả mọi người khi tham gia giao thông, giúp điều tiết mật độ và phân luồng giao thông trên tuyến đường. Nhằm giúp tìm hiểu công nghệ FPGA một cách trực quan, chúng em đã sử dụng kít FPGA để mô phỏng lại quá trình hoạt động của đèn giao thông.
Trang 1MỤC LỤC
LỜI NÓI ĐẦU 2
CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI 3
1.1 Giới thiệu chương 3
1.2 Yêu cầu thực hiện 3
1.3 Ý tưởng thực hiện 5
CHƯƠNG 2 THỰC HIỆN Ý TƯỞNG 6
2.1 Giới thiệu chương 6
2.2 Thực hiện ý tưởng 6
2.3 Thực hiện trên phần mềm ISE của hãng Xilinx 8
CHƯƠNG 3 CHẠY THỬ VÀ CÁC KẾT QUẢ ĐẠT ĐƯỢC 13
3.1 Giới thiệu chương 13
3.2 Kết quả đạt được 13
3.3 Nhận xét về bản thiết kế 14
Trang 22
LỜI NÓI ĐẦU
FPGA(Field-programmable gate array) là một công nghệ cho phép người
dùng có thể cấu hình lại bộ xử lý một cách tùy biến theo từng ứng dụng cụ thể, nhằm giúp tiết kiệm tài nguyên và tăng tốc độ xử lý Nó gồm nhiều mảng các cổng
đã được chế tạo sẵn nhưng chưa được kết nối với nhau, người lập trình có thể kết nối chúng lại với nhau tùy theo từng thuật toán cụ thể cho từng ứng dụng
Đèn giao thông là một phần thiết yếu đối với tất cả mọi người khi tham gia giao thông, giúp điều tiết mật độ và phân luồng giao thông trên tuyến đường Nhằm
giúp tìm hiểu công nghệ FPGA một cách trực quan, chúng em đã sử dụng kít
FPGA để mô phỏng lại quá trình hoạt động của đèn giao thông
Trang 3CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI
1.1 Giới thiệu chương
Chương này sẽ giới thiệu một cách tổng quan về đề tài Đèn giao thông cùng với
ý tưởng thực hiện trên kít FPGA
1.2 Yêu cầu thực hiện
Như chúng ta đề biết đèn giao thông hoạt động bằng cách đưa ra một tín hiệu đèn đã được quy định sẵn trong một thời gian nhất định để người tham gia giao thông có thể thực hiện theo nhằm đảm bảo sự an toàn, ổn định trong các cuộc hành trình Đèn giao thông trên thực tế có nhiều tín hiệu điều khiển như tín hiệu đèn (ĐỎ, VÀNG, XANH), đồng hồ số hiển thị thời gian sang của một đèn, các tín hiệu chỉ hướng di chuyển, tín hiệu cảnh báo đối với người đi bộ …
Hình 1.1 Một số tín hiệu đèn giao thông
Trang 44
Hình 1.2 Một số hình ảnh thực tế
Nhưng trong báo cáo này chúng em chỉ mô phỏng lại hai tín hiệu quan trọng nhất đó là trọng thái đèn báo hiệu(ĐỎ, VÀNG, XANH) và hiển thị thời gian sang của đèn theo hai hướng khác nhau tại một điểm giao nhau của hai tuyến đường cùng mức ưu tiên
Giả sử hai tuyến đường mà ta đang xét nằm theo hai hướng là Đông-Tây và Bắc-Nam Hướng Đông-Tây gọi là hướng 1 còn hướng Bắc-Nam gọi là hướng 2
Do hai tuyến đường là cùng mức ưu tiên nên thời gian sang của từng đèn (ĐỎ, VÀNG, XANH) của mỗi hướng là như nhau, cụ thể:
Hình 1.3 Đèn giao thông đang xét
Thời gian đèn Đỏ sáng: 25s = t xanh + t vàng
Thời gian đèn Vàng sáng: 5s
Thời gian đèn Xanh sáng: 20s
Trang 5Và tất nhiên là khi hướng 1 đèn Đỏ(cấm đi) thì hướng 2 sẽ là Xanh(cho phép đi) rồi đến Vàng, sau đó đổi ngược lại
Bảng 1.1 Trạng thái đèn theo hai hướng
1.3 Ý tưởng thực hiện
Với giả thiết đề ra như trên thì nhóm có ý tưởng thực hiện như sau:
Sẽ tạo ra một module với các tín hiệu đầu ra và đầu vào như sau:
Đầu ra: gồm có 4 tín hiệu đó là mỗi hướng có một tín hiệu trạng thái đèn
và một tín hiệu số đếm hiển thị thời gian sang của đèn, cho nên hai hướng
sẽ là 4 tín hiệu
Đầu vào: sẽ phải có xung clock để module hoạt đông, có tín hiệu start để có
thể bật/tắt module, ngoài ra để đề phòng các sự cố thì cần thêm một tín hiệu
reset để có thể reset lại
Như vậy chúng ta có thể tưởng tượng nó giống một cái hộp đen với 4 tín hiệu đầu ra
và 3 tín hiệu đầu vào
Vấn đề bây giờ là chúng ta sẽ cho gì vào bên trong để với đầu 3 đầu vào trên thì tạo
ra được 4 đầu ra điều khiển đèn tại một điểm giao nhau của hai tuyến đường
Trang 66
CHƯƠNG 2 THỰC HIỆN Ý TƯỞNG 2.1 Giới thiệu chương
Trong chương này sẽ trình bày về lưu đồ máy trạng thái hữu hạn tổng quát được sử dụng, sẽ đi sâu vào cụ thể của từng khối của hộp đen để có thể thực hiện được bài toán đặt ra trên kit FPGA
2.2 Thực hiện ý tưởng
Với ý tưởng hộp đen được nêu lên ở chương 1 thì nhóm đã thảo luận và đưa
ra sơ đồ khối tổng quát bên trong hộp đen như Hình 2.1
Hình 2.1 Sơ đồ khối module
Với thời gian chuyển trạng thái đèn là 25s(đỏ), 20s(xanh), 5s(vàng) thì cần
có một bộ đếm với tần số đếm 1Hz (tức là chu kỳ 1s), bộ đếm này thì tùy theo ý tưởng chuyển trạng của từng người để chọn nhưng để đơn giản và dễ hiểu thì nhóm chọn bộ đếm 50(tức là bằng tổng thời gian sáng 3 đèn cộng lại), sau đó dùng cách là chia khoảng thời gian ra để phục vụ từng đèn Để thực hiện bộ đếm 50 thì có nhiều cách nhưng do nhóm đã có thiết kế sẵn bộ đếm 10 nên bộ đếm 50 thực hiện dựa trên
2 bộ đếm 10 ghép lại
Khối trạng thái đèn sẽ liên tục kiểm tra số đếm nhận được từ bộ đếm và so sánh, nếu số đếm thuộc khoảng thời gian của đèn nào thì xuất ra đầu ra đèn tương ứng sáng Theo hai hướng thì khoảng kiểm tra số đếm với trạng thái ban đầu là khác nhau còn về mặt nguyên tắc là giống nhau cho nên ở đây chỉ nêu lên hướng Bắc-Nam
Khối hiển thị số đếm(thời gian sang của từng đèn): mục đích của khối này là hiển thị thời gian mà một đèn sáng Ở đây do trên kít FPGA đã có 4 LED 7 đoạn sẵn và đã được nối chung bus dữ liệu(mã LED 7 đoạn hiển thị trên LED) cùng với 4 chân chọn LED, vậy nên cần một module phục vụ quá trình quét led Để đơn giản thì nhóm chọn giải pháp là dùng một bộ đếm 4 trạng thái kết hợp với một bộ MUX
Trang 7từ 4 sang 1 với độ rộng bus là 4bits để chọn led và đồng thời chọn số hiển thị lên led trước khi cho ra giải mà led 7 đoạn và hiển thị lên led
Hình 2.2 Lưu đồ chuyển trạng thái đèn hướng Bắc-Nam
Đếm 10
Đếm 10
Kiểm tra
50
clock clock
start
start reset
reset
reset start
thấp
4bits cao
4 /
4 /
4 /
4 /
1 /
1 /
1
Cờ tràn
Cờ tràn
1 /
Hình 2.3 Sơ đồ khối bộ đếm 50
Đếm 4
Hex2Led
/
7 /
4 /
4 /
4 /
4 /
4 /
6 /
8 /
Đếm
(1KHz)
AN: chọn LED
SEG: mã LED 7đoạn
2
Hình 2.4 Sơ đồ khối quét LED
MUX Chuyển đổi
(giải mã)
Trang 88
2.3 Thực hiện trên phần mềm ISE của hãng Xilinx
Trong báo cáo này sử dụng kít Spartan-6 SP601và phần mềm ISE của hãng
Xilinx để thực hiện
Để có thể thực hiện được cả một module lớn được nêu lên ở chương 1 và mục 2.2 của chương 2 thì ta cần đi thực hiện các module nhỏ rồi ghép chúng lại với nhau Ở đây số lớp kế thừa các module có thể lớn hơn 3 tùy theo cách chia module nhỏ
Đầu tiên là khởi động phần mềm ISE: Start=> All programs =>Xilinx ISE
Design suite 13.2=> ISE Design tools=> project Navigator
Tiếp theo là tạo một project trống để làm việc: vào File=>New project Sẽ
xuất hiện hộp thoại cho phép đặt tên project cũng như nơi lưu project
Hình 2.5.NEW PROJECT
Chọn NEXT chuyển sang hộp thoại tiếp theo
Trong mục Evaluation Development Board chọn Spartan-6 SP601 Evaluation
Platform
Trong mục preferred language chọn VHDL nếu viết bằng ngôn ngữ VHDL, chọn Verilog nếu viết bằng ngôn ngữ Verilog Và NEXT
Trang 9Hình 2.6 Chọn kít và ngôn ngữ
Chuyển qua hộp thoại tiếp theo, chỉ cần kích finish là hoàn thành tạo project
Nếu đã có sẵn các file nguồn thì chỉ cần thêm vào là đƣợc : vào project=> add
source hoặc Add copy of source
Nếu chƣa có sẵn file nguồn thì cần tạo các file nguồn cho Project: vào project =>
tên file nguồn
Trang 1010
Hình 2.7 tạo mới file nguồn
Tiếp theo chọn Next để chuyển sang hộp thoại tiếp theo Tại đây chọn các tín hiệu
đầu vào và đầu ra cũng nhƣ độ rộng bus của từng tín hiệu
Hình 2.8 Chọn các tín hiệu vào ra và độ rông bus
Chọn Next và finish để hoàn thành tạo file nguồn
Vấn đề còn lại là viết code cho file nguồn
Trang 11Sau khi viết xong code của từng file nguồn thì việc còn lại là sử dụng chúng trong các module lớn hơn Sau khi viết xong code của file nguồn thì cần kiểm tra đã
viết đúng hay chƣa, đúng theo ý muốn hay chƣa rồi tiến hành tạo file VHDL
Instantiation dung kế thừa các module Kích chuột vào file nguồn và chọn View HDL instantiation template(nhƣ hình)
Hình 2.9 tạo file VHI
Phần mềm sẽ tạo file vhi cho phép sử dụng thiết kế ở các module khác
Hình 2.10 nội dung file vhi
Trang 1212
Sau khi toàn bộ các module nhỏ đã được ghép thành công vào module lớn(tổng) và chạy không có lỗi thì cần nối dây ngoại vi cho thiết kế để có thể giao tiếp ngoại
vi(led, switch, button…) sử dụng file ucf nếu chưa có thì tiến hành lên mạng
download về còn nếu có rồi thì chỉ cần thêm vào(thêm tương tự file nguồn) và sữa tên lại cho đúng theo tên được sử dụng trong bản thiết kế
Hình 2.11 Chọn kết nối ngoại vi cho thiết kế
Cuối dùng là tạo file bit để có thể nạp xuống kít Chọn generate programming
file
Hình 2.12 tạo file bit
Để có thể nạp file bit xuống kít thì cần dùng thêm phần mềm:
digilent.adept.system_v2.15.3
Trang 13CHƯƠNG 3 CHẠY THỬ VÀ CÁC KẾT QUẢ ĐẠT ĐƯỢC
3.1 Giới thiệu chương
Trong chương này sẽ trình bày về các kết quả chay mô phỏng thiết kế trên
phần mềm ISE cũng như chạy thử trên kít Spartan-6 sp601 Qua đó rút ra các nhận
xét liên quan đến bản thiết kế
3.2 Kết quả đạt được
Sau khi viết code testbanch cho thiết kế và tiến hành chạy mô phỏng thì được kết quả như hình
Hình 3.1 kết quả mô phỏng
Nhận xét:
Như vậy dạng song tai các ngõ ra đúng như mục đích thiết kế khi cho tín hiệu vào ở đầu vào
Chạy trên kít:
Trang 1414
Hình 3.2 kết quả nạp xuống kít
Nhận xét:
chuyển trạng thái đèn đúng theo giả thiết
Thời gian đèn Đỏ sáng: 25s = t xanh + t vàng
Thời gian đèn Vàng sáng: 5s
Thời gian đèn Xanh sáng: 20s
Hiển thị số giây của từng đền đúng theo thiết kế
Quét led chạy ổn định, mƣợt, không có vạch sáng tại những vị trí không mong muốn, không nhấp nháy led ngay cả khi quay video bằng điện thoại
3.3 Nhận xét về bản thiết kế
Sau khi cho chạy mô phỏng và chạy trên kít thì rút ra một số kết luận từ các báo cáo của phần mềm cũng nhƣ thực tế diễn ra trên kít
Trang 15Hình 3.2 báo cáo tổng hợp về sử dụng tài nguyên phần cứng
Thông số đầu tiên là number of slice registers : dung 59 trong tổng số
18224 chiếm 1%, điều này có nghĩa là bản thiết kế dung ít number of slice
registers và đây là một thiết kế vào loại nhỏ
Thông số thứ hai là number of slice LUTs: dung 138 trong tổng 9112 chiếm 1%, điều này cũng cho thấy là bản thiết kế dung ít number of slice LUTs
Tiếp theo là các thông số tín hiệu đƣợc dung trong bản thiết kế
Hình 3.3 báo cáo về một số thông số của module