Tải bản đầy đủ (.docx) (48 trang)

Xây dựng snake game trên nền tảng phần cứng DE1 từ altera

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (888.74 KB, 48 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ VIỄN THÔNG
PHÒNG THÍ NGHIỆM HỆ THỐNG NHÚNG VÀ VI MẠCH KHẢ TRÌNH

Xây dựng snake game trên nền tảng phần cứng
DE1 từ Altera

BÁO CÁO
Hà Nội

Snake Game


Bảng nội dung

Snake game – Group3–K53

Page 2


1 Lời cảm ơn
Chúng tôi xin bày tỏ sự cảm ơn tới những thành viên trong ESRCLab đã nhiệt tình
hướng dẫn, giúp đỡ chúng tôi hoàn thành đề tài này.

2 Tổng quan đề tài
2.1 Mục tiêu
-

Thiết kế và hoàn thiện snake game trên kit DE1.
Giao tiếp tốt với chuẩn VGA.
Hoàn thiện kĩ năng lập trình VHDL.


Hiểu rõ hơn về kit DE1.

2.2 Nền tảng cơ bản
-

Kiến thức cơ bản về FPGA.
Biết lập trình FPGA bằng ngôn ngữ VHDL.
Có kĩ năng đọc tài liệu ( cả tiếng anh và tiếng việt).
Kĩ năng tìm kiếm tài liệu trên mạng.

2.3 Yêu cầu hệ thống
2.3.1 Yêu cầu chức năng
-

Tần số làm việc 50MHz.
Màn hình hiển thị 8 màu cơ bản.
Tần số quét màn hình lớn hơn 24 fps.
Nhận phím từ bàn phím nhanh, kịp thời, đủ nút.

2.3.2 Yêu cầu phi chức năng
-

Giao diện đơn giản, dễ chơi.

2.4 Công việc cụ thể
 Giao tiếp giữa Kit DE1 với bàn phím thông qua chuẩn giao tiếp PS2.
 Xây dựng phần cứng xử lý game trên Kit DE1.
 Giao tiếp và hiển thị game lên màn hình.

Snake game – Group3–K53


Page 3


2.5 Kết quả đạt được
Hoàn thành game. Giao tiếp tốt với bàn phím, có khả năng gõ text từ bàn phím. Hiển thị
game lên màn hình với khung hình trên giây cao. Di chuyển của rắn mượt mà. Xử lý tốt
việc rắn ăn mồi, tăng chiều dài…

3 Giới thiệu công nghệ sử dụng
3.1 Phần cứng
3.1.1 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.
Thông số cơ bản của kit DE1:
 Bộ nhớ:
- 8Mb SDRAM.
- 512Kb SRAM.
- 4Mb Flash.
 Âm thanh.
- Hỗ trợ bộ codec 24 bit.
 Công tắc và chỉ thị.
- 10 công tắc chuyển và 4 nút bấm.
- 4 led 7 thanh.
- 10 LED đỏ và 8 LED xanh.
 Các kết nối
- VGA, RS-232, và PS2.

- 2 cổng mở rộng 40 chân.
- Khe cắm SD/MMC.
 Nguồn
- Có thể nguồn từ cáp USB hoặc thông qua cáp nguồn riêng.

Snake game – Group3–K53

Page 4


Hình 3.1 Kit DE1

Snake game – Group3–K53

Page 5


3.2 Phần mềm Quartus II
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.

3.2.1 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:

Snake game – Group3–K53


Page 6


Hình 3.2 Design Flow

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.

Snake game – Group3–K53

Page 7


• 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.

4 Sơ đồ khối hệ thống


Hình 4.1 Sơ đồ khối hệ thống

4.1 Bàn phím
Bàn phím với chuẩn giao tiếp PS2. Giao tiếp với khối xử lý thông qua khối PS2 Interface.

4.2 Màn hình
Màn hình được sử dụng là màn hình máy tính CRT hoặc LCD thông dụng được điều
khiển thông qua khối VGA Controller.

Snake game – Group3–K53

Page 8


4.3 ROM
Được sử dụng để chứa font hiển thị trong game. Là distributed ROM - được trình biên
dịch tổng hợp từ các phần tử logic có sẵn trong chip.

4.4 Khối xử lý ( CU )
Khối chịu trách nhiệm điều khiển toàn bộ hệ thống.

5 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.

5.1 Khối nhận dữ liệu PS2

5.1.1 Giao tiếp vật lý cổng PS2
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
Hình 5.1 Cổng PS2

dữ liệu bắt đầu với 1 bit start ,8 bit dữ liệu ,1 bit chẵn
lẻ và 1 bit stop

Hình 5.2 Mô tả một khối dữ liệu

Snake game – Group3–K53

Page 9


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ẽ :

Hình 5.3

5.1.2 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 :

Hình 5.4 Sơ đồ khối mạch nhận dữ liệu

Snake game – Group3–K53

Page 10


Sơ đồ ASM của khối nhận dữ liệu:

Hình 5.5 ASM của mạch nhận

Về cơ bản, mạch hoạt động như sau:
-

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.

Snake game – Group3–K53

Page 11


-


Cuối cùng xuất ra 8 bit dữ liệu và chuyển về trạng thái chờ.

5.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.

5.2.1 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 :

Hình 5.6 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ó :
1C F0 1C
Đối với phím mở rộng ví dụ nút up :

E0 75 F0 E0 75

Snake game – Group3–K53

Page 12


Nếu ta nhấn một phím đủ lâu sau đó nhả ra thì make code sẽ được gửi nhiều lần :
1C 1C 1C ….. F0 1C
Nếu nhiều phím được bấm cùng một lúc thì code gửi đi lần lượt là make code và break
code của 2 phím.ví dụ ta bấm 2 phím Shift và A cùng lúc thì coe gửi đi sẽ là :
12 1C F0 1C F0 12

5.2.2 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 :

Hình 5.7

Snake game – Group3–K53


Page 13


Đ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ý.
Sơ đồ FSM để bắt make code :

Hình 5.8

FSM được thiết kế để thu scan code thay vì break code của tất cả các phím được nhấn kể
cả các phím mở rộng. Ưu điểm là có thể nhận được phím ngay khi phím được nhấn
xuống nhưng đổi lại là mạch sẽ phức tạp hơn. FSM này khi đọc được E0 sẽ bỏ qua code

Snake game – Group3–K53

Page 14


này; Khi nhận được F0 thì sẽ bỏ qua F0 và đồng thời bỏ qua đoạn code nhận ngay tiếp
sau nó. Như vậy, FSM hoàn thành nhiệm vụ nhận scan code.
FSM thực hiện công việc trên như sau:
-

Ban đầu cho tín hiệu got_key và brk_flag bằng 0.
Khi nhận được một mã từ bộ thu, nó sẽ kiểm tra có phải là mã mở rộng E0 hay


-

không, nếu phải sẽ bỏ qua ( got_key <= 0) và trơ vệ trạng thái chờ.
Nếu không phải là E0, kiểm tra xem có phải là F0 hay. Nếu là F0 thì set cờ

-

brk_flag lên 1 và bỏ qua mã này và chuyển về trạng thái chờ.
Nếu không phải là E0 và F0, lúc này sẽ kiểm tra cờ brk_flag, nếu là 1 thì sẽ bỏ qua
đoạn mã, đồng thời xóa cờ brk_flag về 0. Nếu là 0 thì nhận đoạn mã này. Sau đó
chuyển về trạng thái chờ.

Ví dụ: khi ta nhấn và thả phím mũi tên lên ta sẽ có đoạn mã sau được truyền lần lượt:
E0 75 E0 F0 75
-

Khi nhận giá trị E0 đầu tiên, đây là mã mở rộng nên bỏ qua.
Khi nhận giá trị 75 tiếp theo, đây không phải E0 hay F0, đồng thời kiểm tra cờ

-

brk_flag cho giá trị 0 => nhận giá trị này => ta thu dược scan code.
E0 tiếp theo bỏ qua.
F0 tiếp theo bỏ qua và set cờ brk_flag lên 1.
Giá trị 75 cuối cùng, kiểm tra cờ brk_flag cho giá trị 1 => bỏ qua đồng thời xóa cờ
này về 0.

6 VGA
6.1 Đồ họa
6.1.1 Giới thiệu

-

VGA là viết tắt của “ video graphic array”, là một chuẩn đồ họa được giới thiệu trong
cuối những năm 1980 từ phía IBM cùng loại máy tính PS/2 .Trong các phần sau, chúng

Snake game – Group3–K53

Page 15


-

ta sẽ thảo luận về giao diện có độ phân giải 640 x 480 với 8 màu cơ bản của màn hình
CRT ( cathode ray tube).
Dưới đây là bảng kết hợp màu từ 3 bit của VGA:

Đỏ(R)
0
0
0
0
1
1
1
1

Xanh (G)
0
0
1

1
0
0
1
1

Xanh dương (B)
0
1
0
1
0
1
0
1

Màu
Đen
Xanh dương
Xanh
Lục lam
Đỏ
Đỏ tươi
Vàng
Trắng

6.1.2 Cổng VGA
-

-


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.

6.2 Bộ đ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:

Snake game – Group3–K53

Page 16


Hình 6.1: Sơ đồ khối của bộ điều khiển VGA
- 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 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.

6.2.1 Mạch đồng bộ VGA
-

-

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:

Snake game – Group3–K53

Page 17


Hình 6.2: Sơ đồ thời gian quét theo phương ngang
6.2.1.1 Tín hiệu đồng bộ theo phương ngang





Sơ đồ thời gian quét của tín hiệu đồng bộ theo phương ngang như hình 2. Một chu kì của
tín hiệu h_sync được chia làm 4 vùng:

Vùng hiển thị: là vùng mà các pixel được hiển thị trên màn hình.
Vùng quét ngược: là vùng mà các tia điện tử quay ngược lại về phía cạnh bên trái.
Vùng biên phải: là vùng màu đen bên phải, trong vùng này các tín hình ảnh bị vô hiệu
hóa không được hiển thị.
Vùng biên trái: là vùng màu đen bên trái và giống như vùng biên bên phải, trong vùng
này thì các tín hiệu hình ảnh không được hển thị.

Snake game – Group3–K53

Page 18


6.2.1.2 Tín hiệu đồng bộ theo phương dọc
-

Sơ đồ thời gian quét của tín hiệu đồng bộ theo phương dọc như sau:

Hình 6.3: Sơ đồ thời gian của tín hiệu quét theo phương
dọc.
-

Trong đó:
• Vùng hiển thị: là vùng mà các pixel được hiển thị trên màn hình.
• Vùng quét ngược: là vùng mà các tia điện tử quay ngược lại về phía cạnh
bên trái.
• Vùng biên trên: là vùng màu đen bên trên, trong vùng này các tín hình ảnh bị vô hiệu hóa
không được hiển thị.
• Vùng biên dưới: là vùng màu đen bên dưới và giống như vùng biên bên trên, trong vùng
này thì các tín hiệu hình ảnh không được hển thị.
6.2.1.3 Tốc độ pixel

-

Gọi p là số pixel trong 1 hàng ngang, l là số đường ngang trong 1 màn hình và s là số
màn hình hiển thị trong 1 s thì tốc độ pixel bằng p*l*s.
Chú ý: để màn hình không bị nhấp nháy thì s phải lớn hơn hoặc bằng 24.
Với màn hình có độ phân giải 640x480 và số màn hình hiển thị trong 1s là 60 hình/s thì p
= 800 pixel/line, l=525 line/screen, s=60 screen/second tốc độ pixel bằng 800x525x60
≈25M pixel/s.

6.2.2 Mạch tạo pixel
-

Mạch tạo pixel tạo ra tín hiệu màu 3 – bit rgb cho cổng VGA. Tín hiệu điều khiển và dữ
liệu từ bên ngoài chỉ ra nội dung cần hiển thị trên màn hình, pixel_x và pixel_y chỉ ra tọa
độ hiện tại của pixel. Có 3 loại mạch tạo pixel:

Snake game – Group3–K53

Page 19


-

-

-

• Sơ đồ kiểu bit – mapped .
• Sơ đồ kiểu tile – mapped .
• Sơ đồ kiểu object – mapped.

Trong sơ đồ kiểu bit – mapped, dữ liệu hiển thị trên màn hình được lưu trữ trong một ô
bộ nhớ. Mỗi pixel được lưu trữ trực tiếp trong bộ nhớ tạo thành từ nhớ ( memory word )
và tín hiệu pixel_x, pixel_y tạo ra địa chỉ của ô nhớ. Một mạch xử lý đồ họa liên tục cập
nhật màn hình và ghi dữ liệu vào ô nhớ. Một mạch thu liên tục đọc từ bộ nhớ và truyền
dữ liệu tới tín hiệu rgb. Sơ đồ bit – mapped thường được dùng để tạo màu. Nhược điểm
khi sử dụng sơ đồ này là tốn bộ nhớ.
Để giảm yêu cầu bộ nhớ, người ta dùng sơ đồ kiểu tile – mapped . Trong sơ đồ kiểu này,
chúng ta nhóm một tập bit để tạo thành 1 tile ( ô gạch ) và coi mỗi tile như 1 bit. Sơ đồ
này thường được dùng để tạo text.
Cuối cung, sơ đồ kiểu object – mapped thường được dùng để tạo ra các vật thể. Trong
các bào toán, chúng ta thường kết hợp cả 3 cách trên để tạo ra một màn hình hoàn chỉnh.
6.2.2.1 Sơ đồ kiểu object – mapped .
-

Sơ đồ khối :

Hình 6.2: Sơ đồ khối của mạch object – mapped.

Snake game – Group3–K53

Page 20


-

Sơ đồ khối bao gồm các mạch tạo ra các vật thể, một bộ mux để chọn vật thể hiển thị.
Mạch này thực hiện các chức năng sau:
• Giữ tọa độ của các vật thể và so sánh các tọa độ này với vị trí hiện tại mà pixel_x và
pixel_y cung cấp.
• Nếu vị trí hiện tại của vật thể ở trong vùng hiển thị thì mạch này sẽ chèn thêm tín hiệu on

của vật thể đó.
• Chỉ ra tín hiệu màu của vật thể.
- Bộ mux kiểm tra các tín hiệu on và xác định tín nào được truyền tới tín hiệu đầu ra rgb.
6.2.2.2 Sơ đồ kiểu bit – mapped
Trong kiểu sơ đồ này, mỗi pixel tạo thành 1 ô nhớ nên nhược điểm của phương pháp này
là rất tốn bộ nhớ. Cách tiếp cận này không yêu cầu thêm mạch để chuyển các tín hiệu
pixel_ x và pixel_y thành địa chỉ ô nhớ nhưng lãng phí nhiều bộ nhớ.
6.2.2.3 Sơ đồ kiểu tile – mapped
-

Sơ đồ kiểu này được dùng để tạo text và sẽ được thảo luận trong phần 2.

6.3 VGA text
6.3.1 Giới thiệu
-

Sơ đồ kiểu tile – mapped được dùng để tạo text và các kí tự . Mỗi tile được coi như một
siêu pixel . Phương pháp xây dựng các kí tự là coi chúng như các tile và thiết kế mạch tạo
pixel bằng phương pháp này.

6.3.2 Tạo text
-

Khi áp dụng phương pháp này, mỗi kí tự được coi như một tile, giá trị của một tile biểu
diễn mã của một vị mẫu cụ thể. Chúng ta sử dụng mã ASCII 7 – bit cho các kí tự.
Mẫu của các tile tạo nên font chữ của tập các kí tự. Có nhiều loại font chữ nhưng trong
phần thảo luận của chúng ta dùng font chữ có kích thước 8x16( 8 cột và 16 hàng ).

Snake game – Group3–K53


Page 21


Hình 6.3: Mẫu kí tự và font của kí tự
-

Các kí tự bao gồm phần số, các chữ cái hoa và chữ cái thường, các biểu tượng và nhiều kí
tự đồ họa đặc biệt.
Đối với màn hình có độ phân giải 640 x480 , khi sử dụng các tile có kích thước 8 x16 thì
mỗi hàng ngang chứa vừa 80 tile và mỗi hàng dọc chứa vừa đủ 30 tile. Khi đó ta có thể
coi màn hình có độ phân giải là 80 x 30.

6.3.3 Font ROM
-

Để thực hiện các kí tự mã ASCII, chúng ta sử dụng font ROM . Giả sử chúng ta thực hiện
128 kí tự đầu của bảng mã ASCII thì kích thước của ROM là 211 x 8. Trong đó, 7 bit có
trọng số cao nhất của 11 bit địa chỉ được dùng để xác định kí tự, 4 bit có trọng số nhỏ
nhất được dùng để xác định hàng trong một mẫu của kí tự. Hình 5 là địa chỉ và nội dung
ROM của kí tự A.
- Cách thực hiện như sau:
constant ADDR_WIDTH: integer :=ll;
constant DATA_WIDTH: integer:=8;
signal addr_reg: std_logic_vector (ADDR_WIDTH -1 downto 0);
type rom_type is array (0 to 2**ADDR_WIDTH-l)
-- ROM definition
constant RUM: rom_type :=
-- code x00 (blank space)
“00000000”, -- 0


Snake game – Group3–K53

Page 22


“00000000”, -- 1
“00000000”, -- 2
“00000000”, -- 3
“00000000”, -- 4
“00000000”, -- 5
“00000000”, -- 6
“00000000”, -- 7
“00000000”, -- 8
“00000000”, -- 9
“00000000”, -- a
“00000000”, -- b
“00000000”, -- c
“00000000”, -- d
“00000000”, -- e
“00000000”, -- f
...
begin
-- addr register to infer block RAM
process (clk)
begin
if (clk’event and clk = ‘1’) then addr-reg <=
end if ;
end process;
data <= ROM(to_integer(unsigned(addr_reg))) ;
end arch;


addr;

6.3.4 Mạch tạo text cơ bản
-

-

Mạch tạo pixel tạo ra các giá trị của pixel tương ứng với tọa độ của pixel hiện tại và các
tín hiệu dữ liệu/điều khiển bên ngoài. Mạch tạo pixel dựa trên sơ đồ kiểu tile – mapped
liên quan tới 2 giai đoạn. Ở giai đoạn thứ nhất dùng các bit cao của pixel_x và pixel_y để
tạo ra mã của một tile, và ở giai đoạn thứ hai dùng mã này và các bit thấp để tạo ra giá trị
của pixel.
Theo phương pháp này thì màn hình được coi như có độ phân giải 80x30 tile, mỗi tile là
một ô có kích thước 8x16. Đầu tiên, pixel_x và pixel_y sẽ chỉ ra tọa độ của vị trí tile hiện
tại. Mạch tạo kí tự sử dụng những tọa độ này kết hợp với các tín hiệu dữ liệu/ điều khiển
từ bên ngoài để tạo ra giá trị của tlie tương ứng với mã ASCII. Tiếp theo, mã ASCII này
sẽ làm 7 bit cao của địa chỉ của font ROM và chỉ ra vị trí của mẫu đang xét. Kết hợp với
4 bit thấp của tọa độ y để hình thành nên địa chỉ đầy đủ của font ROM. Đầu ra của font
ROM tương ứng với 8 bit hàng ngang của một mẫu, còn 3 bit có trọng số nhỏ nhất của
tọa độ x chỉ ra vị trí của pixel.

6.3.5 Tỉ lệ của Font
-

Trong sơ đồ kiểu tile – mapped chúng ta có thể điều chỉnh kích thước của các pixel.
Chẳng hạn, chúng ta có thể mở rộng từ font có kích thước 8x16 lên font có kích thước

Snake game – Group3–K53


Page 23


16x32. Để thực hiện được công việc này, chúng ta chỉ cần dịch phải tọa độ của pixel 1 bit
và bỏ đi bit có trọng số nhỏ nhất của pixel_x và pixel_y.

7 Các bước xây dựng game
Sơ đồ FSM của game:

Snake game – Group3–K53

Page 24


HÌnh 7.1. FSM của game

Sơ đồ ASM của game:

Snake game – Group3–K53

Page 25


×