Mục lục:

Trò chơi phản ứng FPGA: 10 bước
Trò chơi phản ứng FPGA: 10 bước

Video: Trò chơi phản ứng FPGA: 10 bước

Video: Trò chơi phản ứng FPGA: 10 bước
Video: Bài 1. Hướng dẫn thiết kế và mô phỏng FPGA với phần mềm ISE Design Suite tích hợp ISIM 2024, Tháng bảy
Anonim
Trò chơi phản ứng FPGA
Trò chơi phản ứng FPGA

Bởi Summer Rutherford và Regita Soetandar

Bước 1: Giới thiệu

Đối với dự án cuối cùng của chúng tôi cho CPE 133, chúng tôi đã thiết kế một trò chơi phản ứng trong VHDL cho bảng Basys3. Trò chơi này có thể được so sánh chặt chẽ nhất với trò chơi arcade "Stacker", nơi người chơi phải thả các khối vào đúng thời điểm. Bảng Basys3 được kết nối với một bảng mạch, có các đèn LED xen kẽ. Các đèn LED này sẽ thay đổi luân phiên ở một tần số cụ thể, tùy thuộc vào mức độ. Trò chơi này sử dụng bộ chia đồng hồ và màn hình 4 chữ số 7 phân đoạn, cũng như một cỗ máy trạng thái hữu hạn. Khi người chơi kích hoạt đúng công tắc khi đèn LED ở giữa sáng lên, người chơi sẽ chuyển sang cấp độ tiếp theo của trò chơi, tăng tần số của các đèn LED xen kẽ. Điều này làm cho mỗi cấp độ kế tiếp khó hơn cấp độ trước đó. Khi người chơi đánh bại thành công cấp độ 7, cấp độ cao nhất, một thông báo sẽ hiển thị trên màn hình phân đoạn và tất cả các đèn LED sẽ đồng thời nhấp nháy và tắt.

Bước 2: Vật liệu

Vật liệu
Vật liệu
Vật liệu
Vật liệu
Vật liệu
Vật liệu

Các tài liệu mà bạn sẽ cần là:

  • Bo mạch Digilent Basys3 với cáp micro USB
  • Breadboard
  • 5 đèn LED
  • 5 điện trở (chúng tôi đã sử dụng 220 ohms)
  • 11 dây nhảy
  • Máy tính với Vivado

Bước 3: Thiết kế hộp đen sơ đồ cấp cao nhất

Thiết kế hộp đen sơ đồ cấp cao nhất
Thiết kế hộp đen sơ đồ cấp cao nhất
Thiết kế hộp đen sơ đồ cấp cao nhất
Thiết kế hộp đen sơ đồ cấp cao nhất

Như bạn có thể thấy, sơ đồ khối cấp cao nhất của chúng tôi bắt đầu bằng cách lấy các đồng hồ cần thiết từ mô-đun con của chúng tôi, ClkDivide. Các đồng hồ này là đầu vào của các khối quy trình khác nhau. Về cơ bản, trò chơi phải nhận ra rằng khi người dùng bật công tắc một cách chính xác, các đèn LED phải bắt đầu luân phiên nhanh hơn và màn hình cần tăng lên một cấp. Sơ đồ khối có thể trông hơi điên rồ, nhưng đó là bởi vì có nhiều tín hiệu được thiết lập trong một quy trình nhất định và sau đó tín hiệu đó xác định một tín hiệu khác trong một khối quy trình khác.

Cuối cùng, đầu vào duy nhất mà trò chơi sử dụng là đồng hồ đầu vào trên bảng Basys3 chạy ở 100 Mhz, bảy công tắc trên bảng Basys3 và nút đặt lại. Đầu ra là cực dương cho màn hình bảy đoạn, bảy đoạn cho màn hình và đèn LED.

Bước 4: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

Mô-đun con của bộ chia đồng hồ này đã tạo ra một đồng hồ chậm hơn tùy thuộc vào giá trị mà chúng tôi đã ánh xạ tới nó trong tệp chính của chúng tôi. Chúng tôi đã sử dụng mô-đun con này để xác định Clk400, PushClk và newlck. Mô-đun con này lấy đồng hồ và bộ chia 32 bit làm đầu vào. Đồng hồ bị chậm lại được xuất ra. Có một khối xử lý cho dải phân cách và đồng hồ chạy chậm. Trong quá trình này là một biến tạm thời, mà chúng tôi gọi là đếm, sẽ đếm một biến mỗi khi một cạnh lên của đồng hồ đã nhập được nhấn. Khi nó đạt đến số chia, đồng hồ chạy chậm chuyển đổi và đếm sẽ đặt lại về 0.

Bước 5: Khối quá trình Shift

Khối quá trình thay đổi
Khối quá trình thay đổi

Khối quá trình Shift điều khiển chuyển động xen kẽ và tốc độ của các đèn LED. Trong danh sách độ nhạy là tín hiệu newclk và Stop. Dừng gây ra độ trễ ngắn khi người dùng vượt qua cấp độ. Nếu Dừng không cao, thì các đèn LED sẽ thay thế như bình thường dựa trên tốc độ của newclk. Mô hình xen kẽ này được điều khiển bởi hai biến: Theo dõi và đếm. Đếm xác định đèn LED nào sẽ được bật, trong khi Theo dõi xác định xem bộ đếm nên đếm lên hay đếm xuống. Có một tín hiệu khác, Final, chỉ áp dụng khi Level là “111”, cho biết người chơi đã đánh bại trò chơi. Cuối cùng xen kẽ giữa 0 và 1 mỗi cạnh đồng hồ để bật và tắt đèn LED liên tục. Đây chỉ là một yếu tố hình ảnh cho màn hình cuối cùng.

Quá trình thay đổi này là nơi hoàn hảo để bắt đầu cho dự án này. Nếu bạn có thể bố trí các đèn LED của mình xen kẽ một cách chính xác và nhất quán, thì từ đây bạn chỉ cần thêm hành vi khi lên cấp!

Bước 6: Máy trạng thái hữu hạn

Máy trạng thái hữu hạn
Máy trạng thái hữu hạn

Chúng tôi đã tạo một Máy trạng thái hữu hạn để ra lệnh cho hành vi khi công tắc đầu vào hoặc nút đặt lại được nhấn. Mỗi trạng thái là một “mức” và nếu công tắc được bật không đúng lúc hoặc được nhấn đặt lại, mức sẽ trở lại “000.” Ngược lại, nếu công tắc được bật đúng cách thì mức sẽ tăng lên cho đến khi đạt trạng thái cuối cùng, “111” và màn hình kết thúc xuất hiện. FSM dựa trên hai khối quá trình sync_proc và comb_proc. Sync_proc sử dụng đồng hồ mà chúng tôi gọi là PushClk. Đồng hồ này kiểm soát tốc độ của trạng thái tiếp theo trở thành trạng thái hiện tại. Đồng hồ này phải khá nhanh; chúng tôi đã chọn tốc độ nhanh hơn khoảng hai lần so với tốc độ đèn LED nhanh nhất của chúng tôi.

Chúng tôi đã triển khai mã này bằng cách sử dụng FSM cho các cấp; tuy nhiên, sau dự án này, chúng tôi nhận ra rằng cách sử dụng FSM hiệu quả hơn có thể là trạng thái đếm lên, trạng thái đặt lại hoặc trạng thái nghỉ. Nếu không có gì được nhấn, nó đang ở trạng thái nghỉ. Nếu thiết lập lại đang được nhấn hoặc trình phát bị rối, nó đang ở trạng thái đặt lại. Nếu được nhấn chính xác, nó sẽ ở trạng thái đếm ngược. Có nhiều cách khác để sử dụng FSM trong trò chơi này!

Bước 7: Kiểm soát khối quy trình hiển thị theo cấp độ

Kiểm soát khối quy trình hiển thị với mức độ
Kiểm soát khối quy trình hiển thị với mức độ

Cấp điều khiển khối quá trình Hiển thị. Các biến trong danh sách độ nhạy là Mức, Đặt lại và Clk400. Màn hình 7 phân đoạn bắt đầu bằng cách hiển thị ‘1’ cho cấp độ đầu tiên. Nó sẽ đếm đến 7 mỗi khi người dùng vượt qua một cấp độ để cho người dùng biết họ đang ở cấp độ nào. Khi người dùng đã vượt qua cấp độ 7, nó sẽ hiển thị “COOL” để biểu thị rằng người chơi đã đánh bại trò chơi. Màn hình “COOL” này chạy bằng đồng hồ 400 Hz mà chúng tôi gọi là Clk400. Nếu Đặt lại được nhấn, màn hình sẽ trở về “1.”

Bước 8: Điều khiển tốc độ đèn LED theo mức

Điều khiển tốc độ đèn LED theo mức
Điều khiển tốc độ đèn LED theo mức

Cuối cùng, Cấp kiểm soát tốc độ của đèn LED. Mức là tín hiệu duy nhất trong danh sách độ nhạy. D1 là tín hiệu đi vào quá trình Clock Divider để lấy newclk. Mỗi khi Cấp độ được thay đổi hoặc trạng thái thay đổi, quá trình sẽ chặn “Tốc độ”. Quá trình này xác định giá trị của D1. Có 8 giá trị xác định của D1 mà chúng tôi đã chọn dựa trên tốc độ chúng tôi muốn mỗi cấp chạy. D1 nhỏ hơn mỗi khi mức tăng để newclk chạy nhanh hơn.

Bước 9: Lắp ráp phần cứng

Lắp ráp phần cứng
Lắp ráp phần cứng

Chúng tôi đã kết nối breadboard với Basys3 bằng một trong các đầu nối pmod. Sáu trong số các cổng pmod được sử dụng để cắm vào đầu nối đực với cái, một cổng nối đất và năm cổng còn lại cho 5 đèn LED. Chúng tôi cũng đặt một điện trở cho mỗi đèn LED. Các điện trở này là 220Ω và ngăn các đèn LED không bị đoản mạch và cháy. Mặc dù mỗi đèn LED có một số điện trở, nhưng điện trở không đủ để cản trở điện áp từ nguồn.

Bước 10: Chúc bạn vui vẻ

Trò chơi này rất dễ chơi. Người chơi bắt đầu ở công tắc ngoài cùng bên phải 1 của bàn cờ, V17. Họ phải bật công tắc lên cao khi đèn LED ở giữa bật sáng. Sau đó, họ di chuyển một công tắc sang trái và làm điều tương tự! Nếu người chơi làm đến cùng, họ sẽ kết thúc ở lần chuyển thứ bảy, W14. Nếu họ đánh bại trò chơi, họ sẽ thấy một màn kết thúc thực sự thú vị!

Một điều cần lưu ý là khi tạo trò chơi này, tốc độ hoàn toàn phụ thuộc vào bạn! Nếu tốc độ chúng tôi đã chọn quá chậm, hãy tăng tốc độ và làm cho nó thậm chí còn khó khăn hơn! Cũng không có số cấp độ được thiết lập. Nếu bạn muốn làm cho nó có nhiều cấp hơn nữa, thì phải có những sửa đổi đối với FSM và các khối quy trình được xác định bởi Cấp, nhưng đây là những thay đổi rất đơn giản.

Chúng tôi cũng đã chọn sử dụng các công tắc trên bảng làm đầu vào của người dùng, nhưng điều này cũng có thể thực hiện được với một nút trên bảng Basys3; nút này sẽ loại bỏ sự cần thiết phải đặt lại các công tắc mỗi khi người dùng bắt đầu lại. Ban đầu chúng tôi sử dụng một nút, tuy nhiên, điều này gây ra lỗi trong việc xác định mức vì nó sẽ nhảy nhiều cấp nếu hai cạnh tăng của PushClk bị nhấn khi nút đang được giữ.

Dưới đây là video hướng dẫn cách chơi, trải qua 4 màn chơi đầu tiên và màn hình kết thúc cuối cùng.

Tệp chính của dự án này được bao gồm bên dưới.

Nguồn

Hướng dẫn tham khảo Basys3

Cảm hứng cho dự án - Trò chơi Arduino Stop It

Đề xuất: