สารบัญ:

เกม FPGA Asteroid: 7 ขั้นตอน (พร้อมรูปภาพ)
เกม FPGA Asteroid: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เกม FPGA Asteroid: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เกม FPGA Asteroid: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: การใช้ 7-segment บน cyclone iv fpga 2024, พฤศจิกายน
Anonim
เกมดาวเคราะห์น้อย FPGA
เกมดาวเคราะห์น้อย FPGA

สำหรับโครงการสุดท้ายของ CPE 133 เราตัดสินใจสร้างเกมดาวเคราะห์น้อยบน FPGA โดยใช้สวิตช์ปุ่มกดสองปุ่มและจอแสดงผล 7 ส่วน เกมดังกล่าวทำงานเพื่อให้ดาวเคราะห์น้อยวางไข่ในหนึ่งในสามแถวที่เลือกแบบสุ่ม และพุ่งเข้าหาเรือรบที่อยู่อีกด้านหนึ่งของหน้าจอ 7 ส่วน ปุ่มบนและปุ่มล่างสามารถใช้เพื่อเคลื่อนเรือของคุณให้พ้นทางของดาวเคราะห์น้อย เมื่อล้มเหลวในการทำเช่นนั้น จอแสดงผลจะอ่านว่า 'BAnG' สักครู่แล้วเริ่มเกมใหม่อย่างรวดเร็ว เพื่อให้ผู้ใช้ลองอีกครั้ง ต่อไปนี้เป็นคำอธิบายสั้น ๆ เกี่ยวกับวิธีการทำโปรเจ็กต์เพื่อให้ผู้ใช้ทุกคนสามารถทำซ้ำหรือปรับปรุงการออกแบบของเราได้

ขั้นตอนที่ 1: ภาพรวม

ภาพรวม
ภาพรวม
ภาพรวม
ภาพรวม

โครงการส่วนใหญ่ประกอบด้วย Finite State Machines (FSMs) ซึ่งใช้ตรรกะในการถ่ายโอน FPGA ระหว่างรัฐที่จัดเก็บและแสดงค่าต่างๆ ของตำแหน่งเรือและตำแหน่งหิน โมดูลหลักสองโมดูลคือ FSM ของเกมสำหรับหินและเรือ และตัวถอดรหัสการแสดงผลแบบไบนารีถึง 7 ส่วน FSM ซึ่งรวมเข้าด้วยกันโดยใช้แบบจำลองโครงสร้างที่เรียบง่ายมากใน VHDL

FSM ถูกสร้างขึ้นสำหรับตำแหน่งของเรือ ตำแหน่งของหิน และสำหรับตัวถอดรหัส 7 ส่วน จุดประสงค์ของ FSM ของเรือรบคือเพื่อให้เรือรบสามารถเคลื่อนที่ไปยังตำแหน่งที่ถูกต้องเมื่อผู้เล่นกดปุ่มขึ้นหรือลง จำเป็นต้องใช้ FSM เนื่องจากต้องจำตำแหน่งสุดท้ายเพื่อย้ายไปยังตำแหน่งที่ถูกต้อง

จุดประสงค์ของ FSM ของหินคือการย้ายหินไปยังตำแหน่งที่ถูกต้องโดยพิจารณาจากแถวที่มันอยู่และตำแหน่งสุดท้ายในแถวนั้น นอกจากนี้ยังติดตามตำแหน่งของโมดูลที่จะแสดงและสุ่มสุ่มเลือกแถวใหม่เพื่อให้ปรากฏบนต่อไป

FSM สำหรับตัวถอดรหัสการแสดงผล 7 ส่วนไม่เพียงแต่ใช้เพื่อแสดงเรือและหินเท่านั้น แต่ยังแสดง "BAnG" เมื่อตำแหน่งเรือรบและตำแหน่งหินเหมือนกัน

ขั้นตอนที่ 2: วัสดุ

วัสดุที่ใช้ในโครงการ ได้แก่

  • คณะกรรมการพัฒนา Basy3 จาก Digilent, Inc.
  • วิวาโด ดีไซน์ สวีท
  • sseg_dec.vhd (ไฟล์นี้จัดเตรียมไว้ให้เราใน Polylearn และเขียนโดย Bryan Mealy)
  • Clk_div.vhd (ไฟล์นี้จัดเตรียมไว้ให้เราใน Polylearn และเขียนโดย Bryan Mealy)
  • เครื่องจักรไฟไนต์สเตทสามเครื่อง (FSM)

ขั้นตอนที่ 3: การสร้างเกม

การสร้างเกม
การสร้างเกม
การสร้างเกม
การสร้างเกม
การสร้างเกม
การสร้างเกม
การสร้างเกม
การสร้างเกม

โมดูลเกมถูกสร้างขึ้นโดยใช้แบบจำลองพฤติกรรมเพื่ออธิบายสถานะของเรือรบและหินสำหรับ FSM ตามลำดับ ข้อดีของสิ่งนี้คือการสร้างแบบจำลองวงจรตามพฤติกรรมง่ายกว่ามากโดยอธิบายว่ามันทำอะไรมากกว่าที่จะหาส่วนประกอบทั้งหมดที่จำเป็นในการออกแบบฮาร์ดแวร์

สถานะของหินทำโดยใช้เครื่องกำเนิดตัวเลขสุ่มหลอกสำหรับตำแหน่งแรกของหิน เพื่อให้บรรลุสิ่งนี้ เราได้ให้กำเนิดนาฬิกาของมันเองซึ่งเร็วมากเมื่อเทียบกับความเร็วของเกม ในแต่ละขอบที่เพิ่มขึ้น ตัวเลขสามบิตจะเพิ่มขึ้น และค่าทั้งหมดสอดคล้องกับสถานะการเริ่มต้นหนึ่งในสามของเรือรบ ดังนั้น ค่าสามค่าจึงสอดคล้องกับตำแหน่ง 3 (บนขวา) สามค่าตรงกับตำแหน่ง 7 (ตรงกลาง) และสองค่าตรงกับตำแหน่งที่ 11 (ขวาล่าง)

เมื่อเกิดการสร้างแบบสุ่มและดาวเคราะห์น้อยได้รับสถานะเริ่มต้นแล้ว มันจะไหลในแนวนอนไปทางเรือโดยไม่หยุดชะงัก

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

นาฬิกาที่ใช้สำหรับตรรกะสถานะถัดไปของร็อคจะควบคุมความเร็วของเกม เราพบจากการลองผิดลองถูกที่ 9999999 คุ้มค่าสำหรับการนับสูงสุด

ตรรกะของเรือรบทำงานโดยเริ่มต้นในตำแหน่งตรงกลาง (ตำแหน่ง 4) ทางด้านซ้ายสุด หากกดปุ่มบนหรือปุ่มล่าง เรือรบจะเลื่อนขึ้นและลงในตำแหน่ง 0 และ 11 ที่สอดคล้องกับปุ่มที่ถูกกด

เพื่อให้การเคลื่อนไหวของเรือรบรู้สึกดีสำหรับผู้ใช้ เราไม่ได้ทำให้การเคลื่อนไหวของเรือไม่ตรงกัน เราใช้นาฬิกาสำหรับการเปลี่ยนแปลงสถานะ และเราใช้จำนวนสูงสุด 5555555

ขั้นตอนที่ 4: แสดงผล

ตัวถอดรหัสไบนารีถึง 7 ส่วนใช้ตัวแปรตำแหน่ง 4 บิตสำหรับเรือรบและดาวเคราะห์น้อย และแสดงภาพที่เหมาะสม (ทั้งเรือรบและหินหรือข้อความ “BAnG”)

ทำได้โดยตรวจสอบก่อนว่าทั้งสองมีค่าเท่ากันหรือไม่ จากนั้นจึงแสดงข้อความ "BAnG" หากการตรวจสอบคืนค่าเป็นจริง

หากค่าไม่เป็นจริง ตัวถอดรหัสจะแสดงเรือและหินโดยสลับไปมาระหว่างกันที่ความถี่สัญญาณนาฬิกาที่สูงมาก และหลอกตาให้มองเห็นราวกับว่ากำลังแสดงพร้อมกัน

ขั้นตอนที่ 5: นำทุกอย่างมารวมกัน

วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน

เรารวม FSM ของเรือและของร็อคไว้ใน FSM ขนาดใหญ่อันเดียวที่เราต่อเข้ากับจอแสดงผล FSM อินพุตของเกมคือปุ่มขึ้นและปุ่มลงบนบอร์ด BASYS3 และนาฬิการะบบ ผลลัพธ์คือเซ็กเมนต์และเวกเตอร์แอโนดเจ็ดเซกเมนต์-แสดง

อินพุตและเอาต์พุตเหล่านี้จะเห็นได้ในไฟล์ข้อจำกัดที่มีการจับคู่พอร์ต

ขั้นตอนที่ 6: การปรับเปลี่ยนในอนาคต

ในอนาคต การเพิ่มฟังก์ชันการเคลื่อนไหวของเรือรบในโครงการจะเป็นการปรับปรุงให้ดีขึ้น สามารถทำได้โดยการป้อนปุ่มเพิ่มเติม 2 ปุ่ม และปล่อยให้เรือรบเข้ารับตำแหน่ง (สถานะ) อื่นที่ไม่ใช่ 0, 4 และ 8 การปรับเปลี่ยนที่เป็นไปได้อีกอย่างหนึ่งคือการควบคุมเวลาสถานะถัดไปของดาวเคราะห์น้อย เพื่อให้มันเริ่มช้าและเพิ่มความเร็วโดย 1.5x ทุกครั้งที่มันพลาดเรือรบ จนกระทั่งถูกโจมตี โดยที่มันจะเริ่มต้นใหม่และช้าลงอีกครั้ง สิ่งนี้จะเพิ่มความยากของเกมและทำให้ผู้ใช้สนุกมากขึ้นหากมีการใช้งาน และสามารถทำได้โดยการสร้างตัวแปรสำหรับจำนวนสูงสุดของนาฬิกาสถานะถัดไปของหิน คูณตัวแปรนั้นด้วย 1.5 ทุกครั้งที่ดาวเคราะห์น้อยไม่ทำ ไม่ตี และรีเซ็ตเป็นค่าเริ่มต้นทุกครั้งที่หินกระทบ

ขั้นตอนที่ 7: บทสรุป

โปรเจ็กต์นี้ช่วยให้เราเข้าใจเครื่องจักรที่มีสถานะจำกัด นาฬิกา และการแสดงแบบโต้ตอบบนจอแสดงผลเจ็ดส่วนได้ดีขึ้น

สิ่งที่ใหญ่ที่สุดเกี่ยวกับเครื่องจำกัดสถานะคือสิ่งสำคัญคือต้องรู้ (จำ) ว่าคุณอยู่ในสถานะใดเพื่อย้ายไปยังสถานะที่ต้องการถัดไป แดกดันคำแนะนำชีวิตที่ดี คุณต้องรู้ว่าคุณจะไปที่ไหน

ด้วยการจัดการนาฬิกาที่แตกต่างกัน เราสามารถสร้างตัวเลขแบบสุ่ม ย้ายหินไปยังตำแหน่งถัดไป และจัดการการแสดงของเรือรบ หิน และข้อความเมื่อจบเกม

เราได้เรียนรู้ว่าไม่สามารถแสดงขั้วบวกมากกว่าหนึ่งตัวพร้อมกันได้ โมดูลที่ให้เราใช้ประโยชน์จากสายตามนุษย์สามารถมองเห็นความแตกต่างได้ถึงความถี่ที่แน่นอนเท่านั้น ดังนั้นจึงเลือกความถี่ในการสลับขั้วบวกที่สูงขึ้น การเห็นเรือและหินในเวลาเดียวกันนั้นแท้จริงแล้วเป็นการพาดพิงเนื่องจากแต่ละรายการถูกแสดงแยกกัน แต่เร็วมาก แนวคิดดังกล่าวถูกนำมาใช้เพื่อแสดงการเคลื่อนไหวของเรือ ก้อนหิน และข้อความ "BanG"

แนะนำ: