Đây là một trong số công trình nghiên cứu về Game Flappy Bird và nó được thực hiện bằng cách lập trình. Mình đã dùng ngôn ngữ FPGA để thực hiện. Kết quả chạy hoàn toàn ok. Các bạn có thể dùng nó làm một trong số những ứng dụng trong thực tế hoặc đồ án, luận văn tốt nghiệp. Các bạn có thể tham khảo toàn bộ code mình viết trong file đính kèm (Full Code).
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA ĐIỆN ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ VIỄN THÔNG
ĐỒ ÁN MÔN HỌC 2
LẬP TRÌNH GAME FLAPPY BIRD TRÊN
KIT FPGA SPARTAN-3E
Ngành Công Nghệ Kỹ Thuật Điện Tử Truyền Thông
Sinh viên:
GVHD: Th.S NGUYỄN ĐÌNH PHÚ
TP HỒ CHÍ MINH – 12/2016
Trang 2LỜI CẢM ƠN
Lời đầu tiên, em muốn gửi lời cảm ơn chân thành đến giáo viên, ThS.Nguyễn Đình Phú, trong thời gian qua, đã hướng dẫn và giúp đỡ em trong quá trình thực hiện đồ án Những lời nhận xét, góp ý và hướng dẫn của thầy đã giúp em có một định hướng đúng trong quá trình thực hiện đề tài, giúp em thấy được những ưu, khuyết điểm của đề tài và từng bước khắc phục
để ngày một tốt hơn, giúp em có thể hoàn thành đồ án này.
Đồng thời em cũng muốn gửi lời cảm ơn sâu sắc đến gia đình và bạn bè
đã động viên, cổ vũ tinh thần trong suốt quá trình học tập và thực hiện đồ án.
Bên cạnh đó, em muốn nói lời cảm ơn đến những giáo viên đã đứng trên bục giảng truyền đạt kinh nghiệm, kiến thức trong suốt những năm học
đã qua.
Một lần nữa, em xin gửi lời cảm ơn sâu sắc đến bố mẹ, thầy cô và bạn
bè, những người luôn ở cạnh động viên, giúp đỡ và cổ vũ tinh thần cho em.
Tp Hồ Chí Minh, ngày 20 tháng 12 năm 2016
Sinh viên
Trang 3
MỤC LỤC
Trang 4ASIC lập trình được đã xuất hiện từ lâu dưới dạng PLD (Programmable LogicDevice), nhưng vai trò của các dạng ASIC này là không nhiều vì số lượng cổngtrên Chip rất ít dẫn tới chức năng của các PLD này cũng nghèo nàn và thường chỉ
sử dụng với những nhiệm vụ rất hạn chế trong toàn hệ thống Kể từ năm1980,Các công ty sản xuất PLD hàng đầu đã đẩy mạnh quá trình nghiên cứu vềFPGA và nhanh chóng cho ra các thế hệ FPGA với số lượng cổng và tốc độ ngàycàng cao Các FPGA hiện nay có số lượng cổng đủ lớn để có thể thay thế cả một
hệ thống bao gồm lõi CPU, Bộ điều khiển bộ nhớ (Memory Controller), cácngoại vi như SPI,Timer, I2C, GPIO, PWM, Video/Audio Controller… (nghĩa làtương đương với các SoC hiện đại)
Trước đây, khi muốn chế tạo ra 1 con Chip Vi Xử Lý Người ta phải thiết kếChip ở mức logic sử dụng các ngôn ngữ mô tả phần cứng, Để kiểm tra công đoạnnày người ta sử dụng những phần mềm mô phỏng Sau đó thiết kế phải được tổnghợp dựa trên các thư viện cấp thấp của hãng mà bạn sẽ sản xuất con Chip của bạnsau này, sau đó là quá trình kiểm tra timing (định thời) cho toàn bộ thiết kế đểđảm bảo thiết kế của bạn sẽ hoạt động ở tần số yêu cầu.Tất cả các công đoạn nàyđều chỉ có thể kiểm tra bằng các phần mềm mô phỏng (Điều này dẫn tới nguy cơxảy ra sai xót rất lớn khi chuyển thiết kế sang môi trường Chip thực ) Sau đó bạn
sẽ gởi thiết kế của mình tới công ty sản xuất Chip và phó mặc cho số phận, mộtchip mẫu giá vài triệu đô la sẽ được chuyển cho bạn, và sau đó bạn bắt đầu quátrình test chip trong môi trường thực, nếu thất bại, khả năng lớn là bạn sẽ phải
Trang 5thực hiện lại hoàn toàn qui trình thiết kế như đã nói ở trên, và cứ mỗi lần nhưvậy, bản sẽ phải bỏ sọt rác nhiều triệu đô la và khoảng thời gian nghiên cứu rấtlớn, quy trình này làm cho các đất nước nghèo như việt nam không thể tham giavào các cuộc chơi của các đất nước giàu có trong thế giới của ASIC Nhưng vớiFPGA,bạn không những có thể rút ngắn thới gian thực hiện ASIC mà còn giảmchi phí nghiên cứu tối đa do quá trình kiểm tra thiết kế không những được kiểmtra bằng các phần mềm mô phỏng mà giờ đây còn có thể chạy trên các Chip thựctrong mội trường có thể nói là gần với môi trường ASIC thực nhất Khả năng táicấu hình cho phép bạn sửa đi sửa lại thiết kế cho đến khi đạt yêu cầu mà khôngtốn một xu nào.
Flappy Bird (tạm dịch là "chú chim vỗ cánh") là một trò chơi điện tử trên nềnAndroid và iOS do Nguyễn Hà Đông, ở Hà Nội,Việt Nam, phát triển vào tháng 5năm 2013, và do GEARS Studios, một studio phát triển game quy mô nhỏ, hoạtđộng độc lập có trụ sở tại Việt Nam, phát hành Ban đầu trò chơi được phát hànhvào tháng 5, 2013 trên nền iPhone 5, sau đó nâng cấp cho hệ máy iOS6 và mớihơn vào tháng 9, 2013
Vào tháng 1, 2014, trò chơi đứng đầu bảng thể loạt miễn phí trên iTunes AppStore của Mỹ và Trung Quốc và sau đó là trên UK App Store khi nó được mệnhdanh là "trò Angry Birds mới" Vào cuối tháng 1, Flappy Bird là ứng dụng đượctải về nhiều nhất trên App Store cũng như trên Google Play
Đây là một trò chơi điện tử thú vị và không quá khó để lập trình do vậy tôiquyết định thực hiện đề tài viết game “Flappy Bird“ trên kit FPGA SPARTAN-3E Đề tài nhằm mục đích giúp hiểu rõ hơn về cách thức hoạt động cũng như quytrình để tạo ra một con chip có thể điều khiển màn hình VGA một cách độc lậpbằng kit FPGA, ngoài ra đề tài còn mang tính giải trí cao, giúp giải tỏa căngthẳng và kích thích niềm đam mê lập trình
1.3.1 Tình hình ngoài nước
Bộ nhớ tĩnh đầu tiên dựa trên FPGA (thường được gọi là SRAM trên nềnFPGA) được đề xuất bởi Wahlstrom vào năm 1967 Sau đó bản thương mại của
Trang 6FPGA được Xilinx giới thiệu vào năm 1984 Lúc này nó gồm có một mảng củacác khối logic có thể tái cấu hình – Configurable Logic Blocks (CLBs) và cácđầu vào ra – I/O (input/output) Chip FPGA đầu tiên chứa 64 CLBs và 58 I/Os.Ngày nay, FPGA có thể chứa khoảng 330,000 CLBs và khoảng 1100 I/Os Phầnlớn các sản phẩm FPGA trên thị trường hiện nay đều dựa trên công nghệ SRAMvới 2 hãng sản xuất lớn nhất là Xilinx và Altera Ngoài ra còn có các hãng khácsản xuất FPGA nhưng với mục đích chuyên dụng (Atmel, Actel, Lattice,SiliconBlue, ).
Từ lâu tại các nước tiên tiến FPGA đã được nghiên cứu phát triển nhanhchóng, công nghệ này góp phần quan trọng trong các ứng dụng nhúng mà đôi khicác công nghệ khác không thể thay thế được Ứng dụng của FPGA bao gồm: xử
lý tín hiệu số DSP, các hệ thống hàng không, vũ trụ, quốc phòng, tiền thiết kếmẫu ASIC (ASIC prototyping), các hệ thống điều khiển trực quan, phân tíchnhận dạng ảnh, nhận dạng tiếng nói, mật mã học, mô hình phần cứng máy tính,máy đánh cờ (Máy đánh cờ Hydra có 32 bộ vi xử lý cộng thêm FPGA đã chiếnthắng kiện tướng quốc tế Michael Adams trong năm 2005
1.3.2 Tình hình trong nước
So với các nước tiên tiến trên thế giới, nước ta bắt đầu tiếp cận và ứng dụngcông nghệ FPGA sau một khoảng thời gian khá dài Tuy nhiên trong những nămgần đây, nhờ sự mở của của nền kinh tế thị trường và đầu tư mạnh mẽ của nhànước, công nghệ FPGA đang dần trở lên lớn mạnh.Hiện nay có khá nhiều cáccông ty chuyên về thiết kế vi mạch và phát triển hệ thống nhúng dựa trên côngnghệ FPGA được đặt tại nước ta như : Renesas, Marvell, Uniquify,AppliedMicro (AMCC), Intel, ESilicon (SDS), Synapsys, TMA Solutions,
ATVN(Arrive Technology), AWAH, Grey Stones, Splendid, … đây hứa hẹn là
cơ hội đầy triển vọng giúp nước ta có thể bắt kịp các nước trong lĩnh vực thiết kế
vi mạch
Các nhiệm vụ của đồ án:
Trang 7Để thực hiện được đề tài Lập trình game flappy bird hiển thị trên màn hìnhWXGA 1360 X 768 sử dụng board mạch FPGA spartan-3E, đồ án được chia rathành các nội dung chính sau đây:
Nội dung 1: Khảo sát phần cứng và phần mềm
• Tìm hiểu về các loại màn hình hiển thị và màn hình WXGA 1360 X768
• Tìm hiểu về chip Xilinx FPGA SPARTAN XC3S250E và StarterBoard
Spartan-3E-• Sơ lược về ngôn ngữ mô tả phần cứng VHDL
Trang 8Để thực hiện các thử nghiệm, đề tài sử dụng :
Màn hình ống phóng tia âm cực CRT (Cathode Ray Tube)
Màn hình tinh thể lỏng LCD (Liquid crystal display)
Màn hình Plasma
Màn hình cảm biến
Màn hình OLED
Theo kích thước: được đo bằng đơn vị inches (theo đường chéo)
Hiện có các loại màn hình 14 inches, 15 inches,17 inches, 21 inches …
Theo Màu sắc
- Màn hình MonoColor (đơn sắc: đen trắng)
- Các màn hình màu theo các chuẩn phổ biến ngày nay:
VGA (Video Graphics Array): 640x480 pixels
SVGA (Super VGA): 800x600 pixels
XGA (Extended Graphics Array): 1024x768 pixels
SXGA (Super XGA): 1280x1024 pixels
UXGA (Ultra XGA): 1600x1200 pixels
QXGA (Quad XGA): 2048x1536 pixels
QSXGA (Quad SXGA): 2560x2048 pixels
QUXGA (Quad UXGA): 3200x2400 pixels
WXGA (Wide XGA): màn hình rộng 1366x768 pixels
WSXGA+ (Wide SXGA+): màn hình rộng 1680x1050 pixels
Trang 9WUXGA (Wide UXGA): màn hình rộng 1920x1200 pixels
WQUXGA (Wide QUXGA): màn hình rộng 3840x2400 pixels
Hình 2.1 : Phân loại màn hình màu theo độ phân giải
Trang 10a Giới thiệu chung
Hình 2.3 Màn hình WXGA 1360 X 768 Bảng 2.1 : Một số thông số kỹ thuật của màn hình vi tính LG 19M35A
b Các thông số điều khiển
Để có thể điều khiển hiển thị trên màn hình ta cần biết : Cách thức hoạt động,đồng bộ, các thông số như tần số xung đồng bộ ngang, tần số xung đồng bộ dọc,thời gian refresh màn hình dưới đây là các thông số cần thiết để thực hiện :
Bảng 2.2 : Các thông số điều khiển màn hình vi tính LG 19M35A
Trang 11Ver Pixels 768 Lines
Hor Sync Polarity POSITIVE HBlank = 24.1% of
(1.06xHA)Ver Addr Time 16.097 (msec) = 768 lines = 4.1
Trong phần sau của đồ án sẽ sử dụng các thông số điều khiển này để thựchiện việc điều khiển hiển thị màn hình LCD
Trang 122.2 TÌM HIỂU VỀ CHIP XILINX FPGA SPARTAN XC3S250E
VÀ SPARTAN-3E-STARTER BOARD
2.2.1 Khái niệm
Field-programmable gate array (FPGA) là một loại mạch tích hợp cỡlớn dùng cấu trúc mảng phần tử logic mà người dùng có thể lập trình được.(Chữ field ở đây muốn chỉ đến khả năng tái lập trình "bên ngoài" của người sửdụng, không phụ thuộc vào dây chuyền sản xuất phức tạp của nhà máy bán dẫn)
Vi mạch FPGA được cấu thành từ các bộ phận:
Các khối logic cơ bản lập trình được (logic block)
Hệ thống mạch liên kết lập trình được
Khối vào/ra (IO Pads)
Phần tử thiết kế sẵn khác như DSP slice, RAM, ROM, nhân vi xử lý FPGA cũng được xem như một loại vi mạch bán dẫn chuyên dụng ASIC,nhưng nếu so sánh FPGA với những ASIC đặc chế hoàn toàn hay ASIC thiết kếtrên thư viện logic thì FPGA không đạt đựợc mức độ tối ưu như những loại này,
và hạn chế trong khả năng thực hiện những tác vụ đặc biệt phức tạp, tuy vậyFPGA ưu việt hơn ở chỗ có thể tái cấu trúc lại khi đang sử dụng, công đoạn thiết
kế đơn giản do vậy chi phí giảm, rút ngắn thời gian đưa sản phẩm vào sử dụng
Còn nếu so sánh với các dạng vi mạch bán dẫn lập trình được dùng cấu trúcmảng phần tử logic như PLA, PAL, CPLD thì FPGA ưu việt hơn các điểm: tác
vụ tái lập trình của FPGA thực hiện đơn giản hơn; khả năng lập trình linh độnghơn; và khác biệt quan trọng nhất là kiến trúc của FPGA cho phép nó có khảnăng chứa khối lượng lớn cổng logic (logic gate), so với các vi mạch bán dẫn lậptrình được có trước nó
Thiết kế hay lập trình cho FPGA được thực hiện chủ yếu bằng các ngôn ngữ
mô tả phần cứng HDL như VHDL, Verilog, AHDL, các hãng sản xuất FPGA lớnnhư Xilinx, Altera thường cung cấp các gói phần mềm và thiết bị phụ trợ cho quátrình thiết kế, cũng có một số các hãng thứ ba cung cấp các gói phần mềm kiểunày như Synopsys, Synplify Các gói phần mềm này có khả năng thực hiện tất
Trang 13cả các bước của toàn bộ quy trình thiết kế IC chuẩn với đầu vào là mã thiết kếtrên HDL (còn gọi là mã RTL).
2.2.2 Lịch sử phát triển
FPGA được thiết kế đầu tiên bởi Ross Freeman, người sáng lập công tyXilinx vào năm 1984, kiến trúc mới của FPGA cho phép tích hợp số lượng tươngđối lớn các phần tử bán dẫn vào 1 vi mạch so với kiến trúc trước đó là CPLD.FPGA có khả năng chứa tới từ 100.000 đến hàng vài tỷ cổng logic,[1]trong khiCPLD chỉ chứa từ 10.000 đến 100.000 cổng logic; con số này đối với PAL, PLAcòn thấp hơn nữa chỉ đạt vài nghìn đến 10.000
CPLD được cấu trúc từ số lượng nhất định các khốiSPLD(Simpleprogrammable devices, thuật ngữ chung chỉ PAL, PLA) SPLD thường là mộtmảng logic AND/OR lập trình được có kích thước xác định và chứa một sốlượng hạn chế cácphần tử nhớđồng bộ (clocked register) Cấu trúc này hạn chếkhả năng thực hiện những hàm phức tạp và thông thường hiệu suất làm việc của
vi mạch phụ thuộc vào cấu trúc cụ thể của vi mạch hơn là vào yêu cầu bài toán.Kiến trúc của FPGA là kiến trúc mảng các khối logic, khối logic, nhỏ hơnnhiều nếu đem so sánh với một khối SPLD, ưu điểm này giúp FPGA có thể chứanhiều hơn các phần tử logic và phát huy tối đa khả năng lập trình của các phần tửlogic và hệ thống mạch kết nối, để đạt được mục đích này thì kiến trúc của FPGAphức tạp hơn nhiều so với CPLD
Một điểm khác biệt với CPLD là trong những FPGA hiện đại được tích hợpnhiều những bộ logic số học đã sơ bộ tối ưu hóa, hỗ trợ RAM, ROM, tốc độ cao,hay cácbộ nhân cộng(multiplication and accumulation, MAC), thuật ngữ tiếngAnh làDSP slicedùng cho những ứng dụng xử lý tín hiệu số DSP
Ngoài khả năng tái cấu trúc vi mạch toàn cục, một số FPGA hiện đại còn hỗtrợ tái cấu trúc cục bộ, tức là khả năng tái cấu trúc một bộ phận riêng lẻ trong khivẫn đảm bảo hoạt động bình thường cho các bộ phận khác
Trang 142.2.3 Kiến trúc
Cấu trúc tổng thể của một FPGA được minh họa ở hình sau
Hình 2.4 : Kiến trúc tổng quan FPGA
a Khối logic
Phần tử chính của FPGA là các khối logic (logic block) Khối logic được cấuthành từ LUT và một phần tử nhớ đồng bộflip-flop,LUT(Look up table) là khốilogic có thể thực hiện bất kì hàm logic nào từ 4 đầu vào, kết quả của hàm này tùyvào mục đích mà gửi ra ngoài khối logic trực tiếp hay thông qua phần tử nhớflip-flop
Trong tài liệu hướng dẫn của các dòng FPGA của Xilinx còn sử dụng kháiniệmSLICE, 1 Slice tạo thành từ gồm 4khối logic, số lượng các Slices thay đổi
từ vài nghìn đến vài chục nghìn tùy theo loại FPGA
Trang 15Nếu nhìn cấu trúc tổng thể của mảng LUT thì ngoài 4 đầu vào kể trên còn hỗtrợ thêm 2 đầu vào bổ sung từ các khối logic phân bố trước và sau nó nâng tổng
số đầu vào của LUT lên 6 chân Cấu trúc này là nhằm tăng tốc các bộ số họclogic
Hình 2.5 : Khối logic của FPGA
b Hệ thống mạch liên kết
Mạng liên kết trong FPGA được cấu thành từ các đường kết nối theo haiphương ngang và đứng, tùy theo từng loại FPGA mà các đường kết nối được chiathành các nhóm khác nhau, ví dụ trong XC4000 của Xilinx có 3 loại kết nối:ngắn, dài và rất dài Các đường kết nối được nối với nhau thông qua các khốichuyển mạchlập trình được (programmable switch), trong một khối chuyểnmạch chứa một số lượng nút chuyển lập trình được đảm bảo cho các dạng liênkết phức tạp khác nhau
Trang 16Hình 2.6 : Hệ thống mạch liên kết của FPGA
c Các phần tử tích hợp sẵn
Ngoài các khối logic tùy theo các loại FPGA khác nhau mà có các phần tửtích hợp thêm khác nhau, ví dụ để thiết kế những ứng dụng SoC, trong dòngVirtex 4,5 của Xilinx có chứa nhân xử lý PowerPC, hay trong Atmel FPSLICtích hợp nhânAVR…, hay cho những ứng dụng xử lý tín hiệu số DSPtrongFPGA được tích hợp cácDSP Slidelàbộ nhân cộngtốc độ cao, thực hiện hàmA*B+C, ví dụ dòng Virtex của Xilinx chứa từ vài chục đến hàng trăm DSPslicesvới A, B, C 18-bit
d Block RAM
Ngoài ra những FPGA của Xilinx còn có block RAM, có thể mường tượngnhư là bộ nhớ nhỏ nằm trong FPGA Những FPGA này tuy nhỏ (khoảng vài chục
kí lô bit cho đến vài triệu bit tùy theo loại FPGA) nhưng có thể dùng để tạo một
bộ nhớ nhỏ nhưROM,FIFO
2.2.4 Ứng dụng
Trang 17Ứng dụng của FPGA bao gồm: xử lý tín hiệu số DSP, các hệ thống hàngkhông, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC(ASIC prototyping), các hệthống điều khiển trực quan, phân tích nhận dạng ảnh, nhận dạng tiếng nói, mật
mã học, mô hình phần cứng máy tính, máy đánh cờ (Máy đánh cờ Hydracó 32
bộ vi xử lý cộng thêm FPGA đã chiến thắng kiện tướng quốc tếMichaelAdamstrong năm 2005.)
Hình 2.7 : Một con robot sử dụng FPGA EPXA1 cũa hãng Altera
Do tính linh động cao trong quá trình thiết kế cho phép FPGA giải quyết lớpnhững bài toán phức tạp mà trước kia chỉ thực hiện nhờ phần mềm máy tính,ngoài ra nhờ mật độcổng logiclớn FPGA được ứng dụng cho những bài toán đòihỏi khối lượng tính toán lớn và dùng trong các hệ thống làm việc theo thời gianthực
2.2.5 FPGA của XILINX
Xilinx có 2 họ FPGA chính là Spartan và Virtex và có nhiều loại khác nhautrong mỗi họ
Trang 18Ví dụ : Spartan 3, Spartan 3E, Spartan 6, Spartan 6 Lower Power, Virtex 4Virtex II và Virtex II Pro.
Trong đó Virtex 4, Virtex II và Virtex II Pro là các FPGA platform (nền) bởi
vì chúng tích hợp nhiều chức năng như bộ nhớ, vi xử lý, bộ thu phát, các phầncứng khác và các lõi mềm IP Các họ FPGA thường khác nhau về mật độ tíchhợp và các thông số kỹ thuật Hầu hết các thiết bị FPGA của Xilinx có cấu trúctruyền thống , tuy nhiên Virtex II Pro X có cấu trục gọi là khối module chỉ địnhứng dụng ASMBL ( Apllication Specific Modular Block) có trên 1 tỉ transistortrong 1 chip đơn
a. Chip Xilinx FPGA SPARTAN XC3S250E
Bảng 2.3 : Đặc điểm XC3S250E-4VQG100
Tổng số cổng : 250.000 cổng
Phần tử logic tương đương: 5.508 phần tử Phần tử logic tương đương là
sự kết hợp các Look-up table và các phần tử lưu trữ Có các tính năng bổ xung hơn slide như khả năng nhân nhiều bit, thực hiện logic, cổng số học
Khối logic cấu hình - Configurable Logic Blocks(CLB) : 612 khối Chứa các Look-up table mềm dẻo, thực hiện cộng logic các phần tử được lưu trữ,sử dụng như các Flip-Flop hoặc các mạch chốt CLB thực hiện một loạt các chức năng logic cũng như lưu trữ dữ liệu
Trang 19Hình 2.8 : Khối logic cấu hình ( CLB )
Tổng Slice: 2448
Mỗi CLB gồm 4 slice kết nối với nhau như hình sau :
Mỗi Slice được nhóm lại thành cặp , mỗi cặp được tổ chức như là một cột vớichức năng độc lập Cặp còn lại hỗ trợ chức năng logic và bộ nhớ
Cặp bên trái được kí hiệu là CLICEM, cặp bên phải được kí hiệu là CLICEL.Cấu tạo của mỗi cặp được thể hiện phía bên dưới
Trang 20Hình 2.10 : Cấu tạo Slice
Khối RAM được đặt cùng với bộ nhân trên đế trong một hoặc hai cột tùy vàothiết bị Hình bên dưới cho thấy số lượng khối RAM có trên mạch
Bảng 2.4 : Số lượng khối RAM có trên các dòng chip
Ngay bên cạnh khối RAM là khối nhận 18 bit, Phía trên 16 bit port A,bus đầuvào của port A được chia sẻ với bus đầu vào của bộ nhân, tương tự như vậy vớiport B, Phía trên 16 bit port B,bus đầu vào của port B được chia sẻ với bus đầuvào của bộ nhân
tính toán kết quả đầu ra
quản lý tần số xung clock hệ thống, dịch pha và góc nghiêng Trong chip Xilinx FPGA SPARTAN XC3S250E có tích hợp sẵn 4 DCM DCM hoạt động dựa trên vòng lặp delay-locked
DCM hỗ trợ 3 chức năng chính :
Trang 21• Loại bỏ chênh lệch clock : Xảy ra do xung clock trong hệ thống bị lệchtrong quá trình phân phối Điều này làm tăng thời gian thiết lập và thờigian yêu cầu Tăng thời gian đáp ứng của mạch, ảnh hưởng lớn tới mạch khi hoạt động ở tần số cao.
• Tổng hợp tần số : DCM có thể tạo ra tần số khác với xung clock đầu vào, dựa vào các bộ nhân tần và chia tần Đối với chip Xilinx FPGA SPARTAN XC3S250E tần số output có thể tùy chọn từ 5MHz đến 311MHz, việc lựa chọn tần số output phụ thuộc vào các hệ số chia và nhân(D và M) với D là hệ số chia (có thể chọn từ 1-32 trong phiên bản Xilinx ISE 13.2), M là hệ số nhân (có thể chọn từ 2-32) Tần số clock ngõ ra được tính theo công thức :
Trang 22Hình 2.11 : Spartan-3E-StarterBoard của hãng Xilinx
Các tính năng đặt biệt :
Các tính năng cụ thể
• Cấu hình Flash song song NOR
• Multiboot cấu hình FPGA từ NOR Flash PROM song song
• Cấu hình Flash SPI nối tiếp
• Hơn 10,000 tế bào logic(logic cell)
Cấu hình PROM Xilinx 4 Mbit Nền tảng Flash
Xilinx 64-macrocell XC2C64A CoolRunner ™ CPLD
64 MByte (512 Mbit) DDR SDRAM, giao diện dữ liệu x16, 100 MHz
16 MByte (128 Mbit) NOR Flash song song (Intel StrataFlash)
• Lưu trữ cấu hình FPGA
• Lưu mã MicroBlaze / shadowing
16 Mbits của SPI flash nối tiếp (STMicro)
• lưu trữ cấu hình FPGA
• MicroBlaze mã shadowing
Màn hình LCD 2 hàng, 16 cột
Cổng PS / 2 chuột hoặc bàn phím
Trang 23 Cổng màn hình VGA
10/100 Ethernet PHY (yêu cầu Ethernet MAC trong FPGA)
Hai 9-pin cổng RS-232 (DTE- và DCE-style)
FPGA / CPLD download / giao diện gỡ lỗi USB On-board
Xung Clock 50 MHz
SHA-1 1-wire EEPROM nối tiếp cho bitstream chống sao chép
Kết nối mở rộng Hirose FX2
Ba Digilent 6-pin kết nối mở rộng
Bốn-đầu ra, SPI dựa trên Digital-to-Analog Converter (DAC)
Hai đầu vào, SPI dựa trên Bộ chuyển đổi tương tự sang số (ADC) có thểlập trình tái khuyếch đại
Chipscope ™ SoftTouch cổng gỡ lỗi
Bộ mã hóa xoay kèm nút nhấn
Tám led đơn
Bốn switch
Bốn nút nhấn
SMA đầu vào xung clock
Ổ cắm DIP 8-pin cho xung clock phụ
2.3.1 Giới thiệu
VHDL là viết tắt của cụm từ Very High Speed Intergrated Circuit HardwareDescription Language - ngôn ngữ mô phỏng phần cứng cho các mạch tích hợptốc độ rất cao VHDL là ngôn ngữ mô phỏng phần cứng được phát triển dùng chochương trình VHSIC (Very High Speed Intergrated Circuit) của Bộ quốc phòng
Mỹ Mục tiêu của việc phát triển VHDL là có được một ngôn ngữ mô phỏngphần cứng tiêu chuẩn và thống nhất cho phép phát triển thử nghiệm các hệ thống
số nhanh hơn cũng như cho phép dễ dàng đưa các hệ thống đó vào ứng dụngtrong thực tế Ngôn ngữ VHDL được ba công ty Intermetics, IBM và TexasInstruments bắt đầu nghiên cứu phát triển vào 7/1983 Phiên bản đầu tiên đượccông bố vào 8/1985 Sau đó VHDL được đề xuất để tổ chức IEEE xem xét thànhmột tiêu chuẩn Năm 1987, đã đưa ra tiêu chuẩn về VHDL – tiêu chuẩn IEEE-1076-1987
VHDL được phát triển để giải quyết các khó khăn trong việc phát triển, thayđổi và lập tài liệu cho các hệ thống số Như ta đã biết, một hệ thống số có rấtnhiều tài liệu mô tả Ðể có thể vận hành bảo trì sửa chữa một hệ thông ta cần tìmhiểu tài liệu đó kỹ lưỡng Với một ngôn ngữ mô phỏng phần cứng tốt việc xem
Trang 24xét các tài liệu mô tả trở nên dễ dàng hơn vì bộ tài liệu đó có thể được thực thi để
mô phỏng hoạt động của hệ thống Như thế ta có thể xem xét toàn bộ các phần tửcủa hệ thống hoạt động trong một mô hình thống nhất
Trước khi VHDL ra đời, có nhiều ngôn ngữ mô phỏng phần cứng được sửdụng nhưng không có một tiêu chuẩn thống nhất Các ngôn ngữ mô phỏng phầncứng đó được phát triển để phục vụ các bộ mô phỏng chạy chúng Vì các ngônngữ mô phỏng phần cứng đó được các nhà cung cấp thiết bị phát triển, nên mangcác đặc trưng gắn với các thiết bị của nhà cung cấp đó và thuộc sở hữu của nhàcung cấp
Trong khi đó, VHDL được phát triển như một ngôn ngữ độc lập không gắnvới bất kỳ một phương pháp thiết kế, bộ mô phỏng hay công nghệ phần cứngnào Người thiết kế có thể tự do lựa chọn công nghệ, phương pháp thiết kế trongkhi vẫn sử dụng một ngôn ngữ duy nhất
2.3.2 Cấu trúc ngôn ngữ của VHDL
VHDL là ngôn ngữ cho phép mô tả các thiết bị phần cứng số trừu tượng, nókhông dựa vào công nghệ thiết bị phần cứng số, phương pháp được sử dụng đểthiết kế thiết bị số, mà những khái niệm, mô hình trừu tượng của thiết bị phầncứng số được đưa ra như là nền tảng của ngôn ngữ Do đó dùng VHDL cho phép
mô tả được hầu hết các hệ thống phần cứng số Các mô hình trừu tượng gồm:
Mô hình hoạt động (a Model of Behavior)
Mô hình thời gian (a Model of Time)
Mô hình cấu trúc (a Model of Structure)
Để thực hiện mô tả cho một hệ thống số nào đó cần thực hiện theo các bướcnhư sau:
Phân tích yêu cầu của hệ thống số cần phải thiết kế hoặc cần phải mô tả
Phân tách hệ thống thành những khối con
Xác định mô hình mô tả phù hợp cho mỗi khối con hoặc cho cả hệ thống
Sử dụng ngôn ngữ VHDL để mô tả hệ thống số theo các mô hình đã xácđịnh
Như vậy việc nắm chắc cấu trúc, cú pháp, các mô hình mô tả của ngôn ngữ làrất quan trọng, quyết định chủ yếu đến thành công trong việc mô tả hệ thống sốcần thiết kế VHDL cũng có nhiều điểm giống như một ngôn ngữ lập trình bậc
Trang 25cao, có cấu trúc, có cú pháp riêng, có cách tổ chức chương trình, có từ khóa, cóphương pháp biểu diễn số liệu riêng
2.3.3 Cấu trúc một mô hình hệ thống mô tả bằng VHDL
Thông thường một mô hình VHDL bao gồm ba phần: thực thể, kiến trúc vàcác cấu hình Trong một số trường hợp mô hình còn có thêm phần các môitrường kiểm tra
a Thực thể (Entity)
Khai báo thực thể trong VHDL là câu lệnh định nghĩa các chỉ tiêu phía ngoàicủa một phần tử hay một hệ thống Các thông tin có trong phần khai báo thực thểcho phép kết nối phần tử (hệ thống) mà thực thể đó đại diện với các phần tử (hệthống) khác Thực chất việc khai báo thực thể chính là khai báo giao diện của hệthống với bên ngoài
b Kiến trúc (Arrchitecture)
Một khai báo thực thể đều phải đi kèm với ít nhất một kiến trúc tương ứng.VHDL cho phép khai báo nhiều kiến trúc cho một thực thể Một khai báo kiếntrúc có thể bao gồm các khai báo về các tín hiệu bên trong, các phần tử bên trong
hệ thống, hay các hàm và thủ tục mô tả hoạt động của hệ thống Có hai cách mô
tả kiến trúc của một phần tử (hệ thống) đó là mô tả theo mô hình hoạt động hay
mô tả theo mô hình cấu trúc Tuy nhiên một hệ thống có thể bao gồm cả mô tảtheo mô hình hoạt động và mô tả theo mô hình cấu trúc
c Cấu hình
Việc khai báo cấu hình tương tự như việc liệt kê các phần của bản thiết kế.Khai báo cấu hình thực chất là chỉ ra kiến trúc nào được gắn với thực thể nào.Như vậy các kiến trúc khác nhau có thể cùng được gắc với một thực thể Ðiềunày cho phép thay đổi bản mô tả ở thời điểm mô phỏng hay tổng hợp hệ thống.Việc khai báo cấu hình là tuỳ chọn, cũng có thể sử dụng cấu hình mặc định doVHDL cung cấp, khi đó kiến trúc được khai báo cuối cùng cho một thực thể sẽđược gắn với thực thể đó
d Môi trường kiểm tra (testbench)
Trang 26Một trong các nhiệm vụ rất quan trọng là kiểm tra bản mô tả thiết kế Kiểmtra một mô hình VHDL được thực hiện bằng cách quan sát hoạt động của nótrong khi mô phỏng Thông thường các bộ mô phỏng có cung cấp khả năng kiểmtra, nhưng cũng có thể xây dựng một môi trường kiểm tra VHDL Môi trườngkiểm tra có thể hiểu như một mạch kiểm tra ảo Môi trường kiểm tra sinh ra cáctác động lên bản thiết kế và cho phép quan sát hoặc so sánh kết quả hoạt độngcủa bản mô tả thiết k
2.3.4 Cấu trúc chung của một chương trình
Sau đây là cấu trúc chung đơn giản của một chương trình mô tả VHDL:
Ví dụ cấu trúc 1 file mô tả cho một hệ thống phần cứng số dùng VHDL
Khai báo thư viện, mặc định cần khai báo thư viện IEEE (thư viện chuẩn
Khai báo các tham số generic nếu cần:
Generic( khai báo danh sách các tham số);
Port( Khai báo danh sách các cổng vào/ra);
End Tên_thực_thể;
Bắt đầu viết
Architecture Tên_kiến_trúc of Tên_thực_thể is
{Khai báo: kiểu dữ liệu, các component, các đối tượng constant, signal} Begin
{ Viết các mô tả dùng cấu trúc lệnh song song }
Process( danh sách tín hiệu kích thích nếu cần)
{Khai báo:kiểu dữ liệu, các đối tượng biến constant, variable }
Begin
{ Viết các mô tả dùng cấu trúc lệnh tuần tự } End process;
Trang 27{ Viết các mô tả dùng cấu trúc lệnh song song hay process khác }
End Tên_kiến_trúc;
Để có thể tiến hành viết chương trình, biên dịch, tổng hợp và cấu hình lên kitFPGA, đồ án sử dụng phần mềm ISE phiên bản 13.2 do hãng Xilinx cung cấp
Hình 2.12 : Giao diện chương trình ISE khi mới khởi động
Để tiến hành viết chương trình ta tiến hành các bước sau :
Bước 1: Tạo project mới
Trên thanh menu nhấn New->Project một hộp thoại New Project Wizard hiện
ra, ta nhập tên project muốn tạo và nhấn phím next
Trang 28Hình 2.13 : Giao diện cửa sổ New project wizard
Tiếp theo, ta chọn các thông số ứng với chip sẽ thực hiện việc cấu hình, cácthông số quan trọng như Family, Device, Package, VHDL Source AnalysisStandard… Sau khi chọn xong các thông số ta nhần phím next, việc tạo mộtproject mới đã hoàn thành
Trang 29Hình 2.14 : Giao diện cửa sổ Project Setting Bước 2: Tạo file nguồn mới
Project khi mới tạo sẽ chưa có file nguồn chứa chương trình, vì vậy ta sẽ tạo
ra các file nguồn này như sau : Nhấn vào menu Project-> New Source, cửa sổNew Source Wizard hiện ra, lựa chọn VHDL Module và nhập tên cho source sau
đó nhấn phím next
Trang 30Hình 2.15 : Giao diện cửa sổ New Source Wizard
Tiếp theo, cửa sổ Define module hiện ra, ta đặt tên cho các tín hiệu vào, racho module cũng như hướng của các tín hiệu đó Nếu tín hiệu là một Bus ta tíchvào check box Bus và đặt MSB, LSB cho tín hiện ứng với chỉ số cao nhất và thấpnhất của Bus tín hiệu Sau đó nhấn phím next, quá trình thêm source file mới đãhoàn thành
Trang 31Hình 2.16 : Giao diện cửa sổ Define Module Bước 3: Thên source file đã có sẵn
Ngoài việc thêm các source mới như đã thực hiện ở bước 2, ta có thể thêmvào project các source file có sẵn như sau : Nhấn vào menu Project-> AddSource, cửa sổ add source hiện ra, ta chọn tới file source cần thêm vào project vànhấn nút open, như vậy việc add source file cho project đã hoàn thành
Trang 32Hình 2.17 : Giao diện cửa sổ Add Source
Ngoài phần mềm trên, đồ án còn sử dụng một phần mềm nhỏ để tính toán giátrị DCM như sau : Ta chỉ cần chọn tần số clock ngõ vào và ngõ ra, sau đó nhấnphím next, phần mềm sẽ tín toán các hệ số với sai số nằm trong phạm vi chophép
Hình 2.18 : Giao diện chương trình tính hệ số cho DCM
Trang 33CHƯƠNG 3
LẬP TRÌNH
3.1 BÀI TOÁN ĐẶT RA
3.1.1 Giao diện trò chơi
Game được hiển thị trên màn hình WXGA 1366 X 768 với giao diện đượcchia làm 2 phần như sau :
Phần hiển thị chú chim flappy bird và chướng ngại vật
Chú chim flappy bird xuất hiện tại giữa màn hình và không dịch chuyển quahai bên trái-phải, khi người chơi bấm nút hoặc sau một thời gian nhất định sẽ tựđộng bay lên hoặc rơi dần xuống với tốc độ nhanh dần Game sẽ thiết kế tốc độrơi gồm 9 cấp độ, khi người chơi bấm nút tốc độ rơi sẽ được reset về mức 1 vàtăng dần khi người chơi không bấm nút
Trướng ngại vật lần lượt xuất hiện từ bên góc trái màn hình và chạy sang bêngóc phải màn hình gồm 2 trướng ngại vật ( ống trên và ống dưới ) khoảng cáchgiữa 2 cặp trướng ngại vật bất kì là cố định Trong quá trình dịch chuyển tốc độcủa các trướng ngại vật là cố định , tung độ của các ống là ngẫu nhiên Mỗi mộtthời điểm sẽ có hai cặp trướng ngại vật xuất hiện
Khi chim bay qua một cặp ống, điểm sẽ được tăng lên Ngược lại, nếu chimchạm vào ống bất kì hoặc chạm vào 2 cạnh trên dưới điểm sẽ reset về 0 và tròchơi kết thúc
Phần hiển thị điểm
Phần hiển thị điểm nằm bên góc phải màn hình, bao gồm dòng chữ cho biếtthông tin nó hiển thị và điểm số của người chơi hiện đạt được
Trang 34Hình 3.1 : Giao diện chương trình
3.1.2 Hệ thống điều khiển
Sử dụng nút nhấn để chơi game, khi nút được nhấn chú chim sẽ bay lên caohơn, tùy vào tốc độ nhấn chú chim bay lên các khoảng khác nhau, cụ thể tốc độnhấn như sau :
Nhấn một lần trong 0.5s
Nhấn hai lần trong 0.5s
Nhấn ba lần trong 0.5s
Đồng thời, khi nhấn nút tốc độ rơi xuống của chim sẽ được reset về mức 1
3.2 LƯU ĐỒ GIẢI THUẬT
3.2.1 Lưu đồ tổng quát
Trang 35Hình 3.2 : Lưu đồ tổng quát chương trình
3.2.2 Điều khiển màn hình WXGA 1360 X 768
a Cổng VGA
Cổng VGA gồm có 5 tín hiệu active gồm: tín hiệu đồng bộ ngang, tín hiệuđồng bộ dọc, 3 tín hiệu video Red, Green, Blue
Trang 36Hình 3.3 : Cổng VGA
Khi ta cấp tín hiệu điều khiển màn hình, cần cung cấp thời gian đồng bộ chínhxác, như vậy tín hiệu được gửi tới mới được nhận dạng là video và hiển thị trênmàn hình
Hình 3.4 : Xung đồng bộ ngang và dọc tích cực dương
Hình 3.5 : Xung đồng bộ ngang tích cực dương và dọc tích cực âm
Trang 37Hình 3.6 : Xung đồng bộ ngang và dọc tích cực âm
Hình 3.7 : Xung đồng bộ ngang tích cực âm và dọc tích cực dương
Hình 3.8 : Xung đồng bộ trong một chu kỳ quét toàn màn hình
Như vậy, xung đồng bộ ngang bắt đầu tích cực tại đầu mỗi dòng và duy trìmức tích cực trong thời gian Hor Sync Sau đó xung đồng bộ ngang duy trì ởmức không tích cực, cho tới khi bắt đầu hiển thị dòng tiếp theo
Trang 38Xung đồng bộ dọc bắt đầu tích cực tại vị trí bắt đầu khung hình mới, duy trìmức tích cực trong thời gian Ver Sync Sau đó xung đồng bộ dọc duy trì ở mứckhông tích cực, cho tới khi bắt đầu hiển thị khung hình mới.
Tạo khối xung quét ngang và dọc
Từ phân tích trên, ta xây dựng hai bộ đếm được ghép nối tiếp, bộ đếm cơ sở
là bộ đếm cho xung quét ngang (kí hiêu HS) với xung clock đầu vào có tần sốđúng bằng tần số pixel của màn hình (85.5MHz) lấy từ DCM Bộ đếm thứ 2 làxung quét dọc (hay còn gọi là bộ đếm hàng kí hiệu VS) VS sẽ được tăng lên 1đơn vị sau khi mỗi hàng được đếm xong
Hình 3.9 : Lưu đồ tạo khối xung quét ngang và dọc
3.2.3 Đối tượng chim
Trang 39Game hoạt động trên thời gian thực, các đối tượng như chim, trướng ngại vật
sẽ thay đổi vị trí sau những khoảng thời gian nhất định Để định được khoảngthời gian đó, ta dựa vào xung cấp của hệ thống (85.5MHz) Sau khoảng 16ms( thời gian lựa chọn ) tọa độ của chim được cập nhật theo trạng thái của nó, vi
dụ : nếu người sử dụng không bấm nút cho chim bay lên biến TT_rot liên tụctăng lên từ 1-9 làm tốc độ rơi của chim sẽ tăng lên TT_rot * 3 px, chim rơi xuốngtheo trục dọc màn hình nhanh dần Khi người sử dụng nhấn nút chim sẽ bay lêntheo 3 mức độ TT_bay = 0.1.2 ứng với độ dời lên trên theo trục dọc màn hình100px, 140 px và 180 px
Lưu đồ cho đối tượng chim Lưu đồ cho chức năng chim bay lên
và chim rơi xuống