VHDL là một ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ cao với nhiều ưu điểm vượt trội và được ứng dụng trong nhiều lĩnh vực mà quan tr ng nhất là trong các thiết bị logic có thể lập trình được như FPGA, PLD…Với việc vận dụng những kiến thức về VHDL qua các bài lab altera chúng em đã được làm trước đó kết hợp với các tài liệu tham khảo về lập trình VHDL nâng cao để ứng dụng làm game nhỏ là game bomberman.Em xin chân thành bày tỏ lòng biết ơn sâu sắc tới TS Phạm Ng c Nam, tới tất cảcác anh và các bạn tại lab ESRC, đặc biệt anh Vũ Quang Tr ng, anh Vũ Hữu Tiệp đã tận tình hướng dẫn cho nhóm chúng em, tạo điều kiện cho b n em nghiên cứu, học tập trong học kỳ hè. Những lời nhắc nhở, nhận xét của các anh đã giúp cho em tiến bộ rất nhiều và có thể thực hiện nột dung thực tập một cách tốt nhất. Do khả năng còn hạn chế và số lượng cổng logic trên DE1 là có hạn nên trong quá trình làm Game có thể không tránh khỏi những thiếu sót và giản lược. Mong các anh và các bạn chỉ bảo và đóng góp thêm ý kiến để nhóm em có thể hoàn thiện Project này một cách tối ưu nhất.
Trang 1Group 1- K54 – ESRC LAB Page 1
HA NOI UNIVERSITY OF SCIENCE AND TECHNOLOGY
SHOOL OF ELECTRONIC AND TELECOMMUNICATION
EMBEDDED SYSTEM AND RECONFIGURABLE COMPUTING LAB
VHDL TRAINING COURSE
2012 Project:
BOMBERMAN ON FPGA
Trainers:
Ngoc A Le Khanh V Nguyen Hai N Nguyen
Ha Noi, July 27, 2012
Trang 2Group 1- K54 – ESRC LAB Page 2
Mục Lục
A LỜI NÓI ĐẦU 4
B NỘI DUNG 5
1.Tổng Quan Đề tài 5
1.1 Đề tài 5
1.2 Yêu cầu của đề tài 5
1.2.1 Yêu cầu chức năng 5
1.2.2 Yêu cầu phi chức năng 5
1.3 Mô tả trò chơi 6
1.3.1.Mô tả cách chơi 6
1.3.2.Tính điểm 6
1.3.3.Kết thúc 7
1.4 Kế hoạch thực hiện và phân công công việc 7
1.4.1 Kế hoạch thực hiện 7
1.4.2 Phân công công việc 8
2 Giới thiệu Công nghệ sử dụng 8
2.1 Phần cứng 8
Kit DE1 8
2.2 Phần mềm Quartus II 9.1 10
2.3 Quy trình thiết kế FPGA với Quartus II 10
3 Sơ đồ khối của hệ thống 11
3.1.Bàn phím 12
Trang 3Group 1- K54 – ESRC LAB Page 3
3.2.Màn hình 12
3.3.ROM 12
3.4.Khối xử lý ( CU ) 12
4 Các bước xây dựng từng khối của GAME 12
4.1 PS2 Keyboard 12
4.1.1.Khối nhận dữ liệu PS2 12
4.1.2.Mạch giao tiếp với PS2 Keyboard 16
4.2 Khối VGA 19
4.2.1.Đồ h a 19
4.2.2 ộ điều khiển video 20
4.2.3 VGA text 25
4.3 Khối di chuyển 28
4.4 Khối đặt bom 29
4.5 Khối hiện thị TEXT 30
C KẾT LUẬN 34
1 Kết quả đạt được 34
2 Khó khăn 34
3 Đề Xuất 34
Phụ lục 35
Tài liệu tham khảo 36
Trang 4Group 1- K54 – ESRC LAB Page 4
A LỜI NÓI ĐẦU
VHDL là một ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ cao với nhiều ưu điểm vượt trội và được ứng dụng trong nhiều lĩnh vực mà quan tr ng nhất
là trong các thiết bị logic có thể lập trình được như FPGA, PLD…
Với việc vận dụng những kiến thức về VHDL qua các bài lab altera chúng em đã được làm trước đó kết hợp với các tài liệu tham khảo về lập trình VHDL nâng cao
để ứng dụng làm game nhỏ là game bomberman
Em xin chân thành bày tỏ lòng biết ơn sâu sắc tới TS Phạm Ng c Nam, tới tất cả các anh và các bạn tại lab ESRC, đặc biệt anh Vũ Quang Tr ng, anh Vũ Hữu Tiệp
đã tận tình hướng dẫn cho nhóm chúng em, tạo điều kiện cho b n em nghiên cứu,
h c tập trong h c kỳ hè Những lời nhắc nhở, nhận xét của các anh đã giúp cho em tiến bộ rất nhiều và có thể thực hiện nột dung thực tập một cách tốt nhất
Do khả năng còn hạn chế và số lượng cổng logic trên DE1 là có hạn nên trong quá trình làm Game có thể không tránh khỏi những thiếu sót và giản lược Mong các anh và các bạn chỉ bảo và đóng góp thêm ý kiến để nhóm em có thể hoàn thiện Project này một cách tối ưu nhất
Trang 5Group 1- K54 – ESRC LAB Page 5
1.2 Yêu cầu của đề tài
1.2.1 Yêu cầu chức năng
- Thực hiện trên KIT DE1 của ALTERA
- Màn hình hiển thị VGA 640x480 pixels
- Bàn phím chuẩn PS/2
- Audio codec W871 (trên kit)
- Ngôn ngữ VHDL sử dụng clock 50Mhz
1.2.2 Yêu cầu phi chức năng
- Yêu cầu giao diện đơn giản, dễ chơi, di chuyển mượt
- Tiết kiệm được tài nguyên trên kit de1 tối đa
Trang 6Group 1- K54 – ESRC LAB Page 6
1.3 Mô tả trò chơi
1.3.1.Mô tả cách chơi
- Bắt đầu mỗi ván đấu, người chơi 1 xuất hiện ở góc trên bên trái, người chơi 2 xuất hiện ở góc dưới bên phải của các bản đồ có sẵn Thời gian của ván đấu bắt đầu đếm ngược ( 200s )
Mỗi người chơi có 4 phím di chuyển:
Player 1 Player 2 Mô tả
Hinh 1 Các phím được sử dụng chơi
- an đầu mỗi người chơi chỉ có một mạng Sau khi bom nổ trúng người chơi, trò chơi kết thúc
- Mỗi lần ấn phím mỗi người chỉ đặt được 1 quả và bom tự nổ sau khi đặt là 3s
- Người chơi di chuyển với các bước đi là 1/4 ô đặt bom và không được
đi qua bom, gạch và đá
- Gạch bị phá vỡ khi bom nổ 1 lần, đá không bị phá vỡ
1.3.2.Tính điểm
- 20: Phá gạch
Trang 7Group 1- K54 – ESRC LAB Page 7
an đầu mỗi người chơi không có điểm nào, số điểm của mỗi người
sẽ được cập nhật trong mỗi ván và hiển thị lên màn hình
Tồng thời gian thực hiện: 01 tháng (27/7/2012 - 28/8/2012)
Báo cáo hàng tuần: sáng thứ 7 hàng tuần, trình bày các công việc hiện tại, thắc mắc cần giải đáp
Báo cáo cuối cùng: Thứ 7, 1/9/2012, báo cáo hoàn chỉnh và kết thúc
Trang 8Group 1- K54 – ESRC LAB Page 8
Tuần 3: 12/8/2012 - 18/8/2012
Đặt bom, bom nổ tạo ra lửa, phá gạch và giết được đối phương
Xây dựng text cho các màn chơi Tuần 4: 19/8/2012 - 25/8/2012
Ghép và hoàn thiện code
Test game, tìm lỗi phát sinh và sửa Tuần 5: 26/8/2012 - 1/9/2012
Viết báo cáo hoàn chỉnh và trình bày đề tài
1.4.2 Phân công công việc
Hoàn thiện spec và sơ đồ khối chung cho cả hệ thống : Cả nhóm
Hiển thị VGA, hoàn thiện màn chơi chính, ghép code : Khánh
Bắt phím, hiển thị text cho các màn chơi, ghép code : Ngọc
Viết báo cáo cuối cùng : Cả nhóm
2 Giới thiệu Công nghệ sử dụng
2.1 Phần cứng
Kit DE1
DE1 ( Development and Education ) là một phiên bản thu nhỏ của Kit DE2 Nó rất phù hợ để h c điện tử số, kĩ thuật máy tính và FPGAs Con chip Cyclon II 2C20 trên DE1 được thiết kế chyên để phục vụ cho mục đích giáo dục như trong các phòng lab của các trường đại h c, cao đẳng Nó phù hợp để làm nhiều bài tập trong các môn h c như điện tử số, kĩ thuật máy tính thông qua các ví dụ đơn giản
Trang 9Group 1- K54 – ESRC LAB Page 9
Thông số cơ bản của kit DE1:
Trang 10Group 1- K54 – ESRC LAB Page 10
2.2 Phần mềm Quartus II 9.1
Quartus II là công cụ chính được sử dụng trong quá trinh thực hiện đề tài Được cung cấp và cập nhật thường xuyên bởi Altera Đây là công cụ thiết kế tốt nhất cho các dòng chip FPGA của Altera bao gồm cả Cyclon II 2C20 có trên DE1
Là công cụ phân tích và tổng hợp thiết kế HDL, nó cho phép nhà phát triển thực hiện thiết kế của h , đồng thời cho phép phân tích thời gian, kiểm tra sơ đồ RTL, mô phỏng hệ thống và cấu hình sản phẩm một cách phù hợp nhất
2.3 Quy trình thiết kế FPGA với Quartus II
Dưới đây là quy trình thiết kế FPGA với các phần mềm thiết kế FPGA nói chung và Quartus II nói riêng:
Hinh 3 Design Flow
Trang 11Group 1- K54 – ESRC LAB Page 11
Nó bao gồm các bước cơ bản sau:
Design Entry – Mạch sau đã thiết kế sẽ được mô tả bởi các ngôn ngữ mô tả
phần cứng như VHDL hay Verilog, hoặc cũng có thể dùng sơ đồ Schematic
Synthesis – Công cụ tổ hợp sẽ tổ hợp mạch tạo ra một file netlist có chứa các
phần tử logic và các kết nối giữa chúng
Function Simulation – Chức năng của mạch sau tổ hợp sẽ được kiểm định
Fitting – Công cụ máy tính sẽ đặt các phần tử logic được định nghĩa trong file netlist xuống các phần tử logic trong con chip FPGA thực tế Đồng thời ch n ra
các đường dây để kết nối chúng với nhau
Timming Analysis – Phân tích trễ truyền dẫn trên các đường dây khác nhau
nhằm đưa ra các chỉ thị giúp cải thiện hiệu năng làm việc của mạch
Timming Simulation – Kiểm tra đồng thời cả về mặt chức năng lẫn thời gian
của mạch
Programming and Configuration – Thực hiện mạch trên con chip vật lý bằng
cách cấu hình các phần tử logic trên chip và thành lập các kết nối cần thiết
3 Sơ đồ khối của hệ thống
Hinh 4 SƠ ĐỒ TỔNG QUAN
CU
FONT
ROM
PS2 INTERFACE
VGA CONTROLER
KEYBOARD
MONITOR
Trang 12Group 1- K54 – ESRC LAB Page 12
Khối chịu trách nhiệm điều khiển toàn bộ hệ thống
4 Các bước xây dựng từng khối của GAME
4.1 PS2 Keyboard
Để điều khiển được hướng di chuyển của con rắn, nhập mức level để bắt đầu chơi hay để lưu tên nếu người chơi đạt điểm số cao… chúng ta phải sử dụng một keyboard
Hiện nay trên thị trường có 2 loại keyboard là keyboard cổng usb và keyboard cổng ps2.Trong snake game do nhóm thực hiện thì ps2 keyboard được ch n để
sử dụng Chúng ta sẽ lần lượt tìm hiểu về loại keyboard này cũng như thiết kế các khối cần thiết để có thể nhận được dữ liệu gửi từ keyboard một cách chính xác
4.1.1.Khối nhận dữ liệu PS2
- Giao tiếp vật lý cổng PS2:
Hinh 5 Cổng PS2
Trang 13Group 1- K54 – ESRC LAB Page 13
Một cổng ps2 có bốn chân : chân data ps2d, chân clock ps2c và hai chân nguồn là VCC và ground trong đó chân nguồn VCC được cung cấp bởi host
Dữ liệu từ keyboard tới host được truyền qua chân data một cách nối tiếp theo
chuẩn UART.Quá trình truyền dữ liệu bắt đầu với 1 bit start ,8 bit dữ liệu ,1 bit
Hinh 6 Mô tả một khối dữ liệu
Clock của bàn phím thì được truyền qua chân ps2c có tần số trong khoảng từ
10Khz tới 16,7 Khz, Tín hiệu ps2d phải ổn định ít nhất là 5 us trước và sau sườn lên và xuống của tín hiệu ps2c Ta có thể thấy được điều này qua hình mô tả vẽ :
Hinh 7 Vị trí các bit trong qua trình nhận dữ liệu
Trang 14Group 1- K54 – ESRC LAB Page 14
- Khối nhận dữ liệu PS2:
Để có thể thu lại được dữ liệu thay vì phải thiết kế một bộ lấy mẫu ta sẽ dung một mạch dò sườn xuống của tín hiệu ps2c làm điểm tham khảo.Đầu vào của mạch bao gồm tín hiệu ps2d và ps2c nhận từ keyboard ,tín hiệu clock của host ,một tín hiệu reset của hệ thống và một tín hiệu cho phép nhận dữ liệu từ bàn phím Đầu ra của mạch sẽ là 8 bit dữ liệu và một tín hiệu báo hiệu rx_done_tick.Tín hiệu này ở mức cao sau mỗi chu kì clock
Ta có sơ đồ khối của mạch nhận :
rx_en
dout (7 downto 0)
rx_done_tick
clk
Hinh 8 Sơ đồ khối mạch nhận dữ liệu
Sơ đồ ASM của khối nhận dữ liệu:
Trang 15Group 1- K54 – ESRC LAB Page 15
Rx_en=1 and Fail_edge=1
b<=ps2d (b>>1) n<= 9
n=0 b<= ps2d & (b>>1) Fail_edge=1
F Idle
dps
Load F
Hinh 9 ASM của mạch nhận
Về cơ bản, mạch hoạt động như sau:
Trang 16Group 1- K54 – ESRC LAB Page 16
- Trước tiên ở trạng thái chờ, mạch sẽ kiểm tra sườn xuống của tín hiệu clock của PS2 và nhận là start bit
- Sau khi xác định được start bit mạch sẽ nhận vào 10 bit tiếp theo bao gồm 8 bit dữ liệu, 1 bit chẵn lẻ và 1 bit stop
- Cuối cùng xuất ra 8 bit dữ liệu và chuyển về trạng thái chờ
4.1.2.Mạch giao tiếp với PS2 Keyboard
Trong mục này chúng ta sẽ đi tìm hiểu về cách mã hóa bàn phím đồng thời thiết kế một mạch để giải mã các lệnh gửi từ bàn phím tới Host
a Tổng quan về mã hóa bàn phím
Một bàn phím là ma trận các phím.Nó được nhúng một con vi điều khiển để điều
các hoạt động của bàn phím.Có 3 chế độ hoạt động của các phím có thể xảy ra là :
- Khi ta bấm một phím thì make code của phím đó được truyền
đi
- Khi ta giữ một phím với thời gian đủ lớn khoảng 0,5 s thì make code sẽ được truyền đi một cách lặp lại với một tốc độ xác định chu kì 100 ms
- Khi ta nhả phím thì break code của phím đó sẽ được truyền
Hình vẽ dưới đây sẽ cho ta thấy make code của các phím của keyboard
:
Trang 17Group 1- K54 – ESRC LAB Page 17
Hinh 10 Make code của các phím của keyboard
Đối với các phím thường thì make code của nó có kích thước là 1 byte còn đối với các phím mở rộng thì kích thước là từ 2 byte cho đến 4 byte PS2 keyboard sẽ truyền tuần tự code tùy theo hoạt động của phím Ví dụ ta bấm và nhả phím A thì đầu tiên make code được gửi vào sau đó là break code của nó :
b Mạch giao tiếp PS2 keyboard
Mạch giao tiếp PS2 keyboard làm nhiệm vụ l c lấy thành phần chính trong scan code thu được sau các hoạt động bấm và nhả phím.Đồng thời tạo ra một tín hiệu báo hiệu để bộ điều khiển có thể nhận ra được đâu là phím mở rộng (thông thường phục vụ cho mục đích chuyển động của con rắn ,ch n level chơi) đâu là phím thường (dùng trong việc lưu tên trong trường hợp người chơi đạt kết quả cao)
Có 2 cách để thu lại thành phần chính trong scan code từ hoạt động nhấn nhả phím
là bắt break code và bắt make code.Trong snake game mà nhóm thực hiện thì nhóm
đã ch n cách bắt make code sẽ chính xác hơn vì các lệnh sẽ được thực hiện ngay lập tức ngay sau khi được nhập tránh được khoảng thời gian trễ chờ nhả phím nếu chúng ta dùng cách bắt break code
Sơ đồ khối của mạch giao tiếp với PS2 keyboard :
Trang 18Group 1- K54 – ESRC LAB Page 18
dout done_tick
FIFO
wr
w_data r_data
rd got_tick
Key_code
got_key
Hinh 11 giao tiếp với PS2 keyboard
Điểm chú ý trong mạch này là tín hiệu got_key.Sau khi mạch nhận dữ liệu được gửi
từ PS2 keyboard cho đầu ra là dout và một tín hiệu báo hiệu là done_tick.tín hiệu đầu ra này sẽ được đưa tới một mạch FSM để xác định thành phần chính của code
mà ta cần thu lại để phục vụ cho các mục đích của chúng ta.Tín hiệu got_tick sẽ tích cực cao khi mạch FSM xác định được thành phần code cần đ c ,đồng thời cho phép ghi thành phần code này vào bộ FiFo chờ cho Control Unit xử lý
c sơ đồ khối giao tiếp với PS 2 ( * bắt nhiều phím)
- Test trên kit De1 với các led red và green Mỗi led sáng (tắt) tương ứng với 1 phím được nhấn (nhả) Phương pháp: “ Sử dụng 3 thanh ghi 8 bit “
- Trong bộ Ps2_check có chứa ba thanh ghi 8 bit
Trang 19Group 1- K54 – ESRC LAB Page 19
Hinh 12 ba thanh ghi 8 bit
- Ví dụ: Muốn bắt phím di chuyển sang trái
Left =„1‟ khi byte0 = x”6b”
Left =„0‟ khi byte0 = x”6b” , byte1= x”f0” và byte3 = x”e0”
- Dưới đây là bảng kết hợp màu từ 3 bit của VGA:
Xanh (G) Xanh dương B
Trang 20Group 1- K54 – ESRC LAB Page 20
Hinh 13 ảng kế hợp m i củ
b Cổng
- Cổng VGA có 5 tín hiệu tích cực bao gồm các tín hiệu đồng bộ theo phương
ngang và phương d c, h_sync và v_sync và 3 tín hiệu hình ảnh cho 3 màu đỏ, xanh,
xanh dương
- Hình ảnh là một tín hiệu tương tự, và bộ điều khiển video sử dụng một bộ chuyển đổi DAC để chuyển đổi tín hiệu số đầu ra thành mức tương tự mong muốn Nếu một tín hiệu hình ảnh N-bit thì tín hiệu này có thể được chuyển thành 2N mức tương tự
- Trong phần thảo luận , chúng ta dùng tín hiệu hình ảnh màu 3 – bit nên đầu
ra chúng ta sẽ thu được 23=8 màu cơ bản như được liệt kê trong bảng trên
4.2.2 điều khiển video
- Một bô điều khiển hình ảnh tạo ra các tín hiệu đồng bộ và các pixel dữ liệu đầu ra Sơ đồ như sau:
VGA_sync
Pixel generation circuit
Pixel generation circuit
h_sync v_sync
video_on
pixel_x pixel_y
External
data/control
rgb
VGA monitor
clock
Hinh 14 Sơ đồ khối củ ộ đi khi n
- Sơ đồ bao gồm:
Mạch đồng bộ, kí hiệu là VGA_sync
Mạch tạo pixel “Pixel generation circuit”
- Mạch VGA_sync tạo ra các tín hiệu đồng bộ và tín hiệu thời gian Tín hiệu
h_sync và v_sync được nối với cổng VGA để điều khiển chế độ quét theo phương
Trang 21Group 1- K54 – ESRC LAB Page 21
ngang và phương d c của bộ điều khiển Pixel_x và pixel_y là đầu ra của các tín
hiệu được giải mã từ bộ đếm ở bên trong Hai tín hiệu này xác định vị trí của pixel
hiện tại Mạch VGA_sync cũng tạo ra tín hiệu video_on để xác định khi nào thì kích
hoạt hay vô hiệu hóa tín hiệu hiển thị trên màn hình
- Mạch pixel generation circuit tạo ra 3 tín hiệu hình ảnh rgb Màu thu được
tương ứng với t a độ của các pixel hiện tại và các tín hiệu dữ liệu và điều khiển từ bên ngoài
a ạch đồng ộ
- Mạch này tạo ra các tín hiệu đồng bộ theo phương ngang h_sync và đồng bộ theo phương d c v_sync Trong đó :
h_sync: chỉ ra thời gian cần thiết để quét hết một hàng
v_sync: chỉ ra thời gian cần thiết để quét hết toàn bộ màn hình
- Trong phần thảo luận của chúng ta dùn màn hình có độ phân giải 640x480 với tốc độ pixel là 25Mhz, nghĩa là trong 1s màn hình xử lý 25M pixel
- Màn hình bao gồm vùng viền đen ở xung quanh màn hình và vùng nhìn thấy
ở giữa có hình chữ nhật Các trục t a độ và chiều dương của các trục như hình vẽ dưới đây:
border
Visible area
x
y O
h_video_on
h_sync
Left border
display
Right border
retrace
Left border
Hinh 15 Sơ đồ h i gi n q h o phương ng ng