جدول المحتويات:

لعبة رد فعل FPGA: 10 خطوات
لعبة رد فعل FPGA: 10 خطوات

فيديو: لعبة رد فعل FPGA: 10 خطوات

فيديو: لعبة رد فعل FPGA: 10 خطوات
فيديو: Milton Guasti: Remaking Metroid 2 Solo & Get Shut Down by Nintendo - Funsmith Fireside Chats #7 2024, شهر نوفمبر
Anonim
لعبة رد فعل FPGA
لعبة رد فعل FPGA

بواسطة Summer Rutherford و Regita Soetandar

الخطوة 1: مقدمة

بالنسبة لمشروعنا النهائي لـ CPE 133 ، قمنا بتصميم لعبة رد فعل في VHDL للوحة Basys3. يمكن مقارنة هذه اللعبة بشكل كبير بلعبة الأركيد "Stacker" حيث يتعين على اللاعب إسقاط الكتل في الوقت المناسب. يتم توصيل لوحة Basys3 بلوح يحتوي على مصابيح LED بديلة. سوف تتناوب مصابيح LED هذه بتردد معين ، اعتمادًا على المستوى. تستخدم هذه اللعبة مقسم الساعة وشاشة العرض المكونة من 4 أرقام و 7 مقاطع ، بالإضافة إلى آلة الحالة المحدودة. عندما ينشط اللاعب المفتاح الصحيح بينما يضيء مؤشر LED الأوسط ، سيتقدم اللاعب إلى المستوى التالي من اللعبة ، مما يزيد من وتيرة مصابيح LED البديلة. هذا يجعل كل مستوى متتالي أصعب من المستوى السابق. عندما يتغلب اللاعب بنجاح على المستوى 7 ، أعلى مستوى ، ستظهر رسالة على شاشة المقطع وستومض جميع مصابيح LED في نفس الوقت وتنطفئ.

الخطوة 2: المواد

المواد
المواد
المواد
المواد
المواد
المواد

المواد التي ستحتاجها هي:

  • لوحة Digilent Basys3 مع كابل USB صغير
  • اللوح
  • 5 مصابيح LED
  • 5 مقاومات (استخدمنا 220 أوم)
  • 11 سلك توصيل
  • كمبيوتر مع Vivado

الخطوة 3: تصميم الصندوق الأسود لمخطط المستوى الأعلى

أعلى مستوى تخطيط تصميم الصندوق الأسود
أعلى مستوى تخطيط تصميم الصندوق الأسود
أعلى مستوى تخطيط تصميم الصندوق الأسود
أعلى مستوى تخطيط تصميم الصندوق الأسود

كما ترى ، يبدأ مخطط كتلة المستوى الأعلى لدينا بالحصول على الساعات المطلوبة من الوحدة الفرعية لدينا ، ClkDivide. هذه الساعات هي مدخلات في كتل العملية المختلفة. بشكل أساسي ، يجب أن تدرك اللعبة أنه عندما يقوم المستخدم بتشغيل المفتاح بشكل صحيح ، يجب أن تبدأ مصابيح LED بالتناوب بشكل أسرع ويجب أن ترتفع الشاشة إلى مستوى واحد. قد يبدو مخطط الكتلة مجنونًا بعض الشيء ، ولكن هذا بسبب وجود العديد من الإشارات التي تم إنشاؤها في عملية معينة ومن ثم تحدد هذه الإشارة إشارة أخرى في كتلة عملية أخرى.

في النهاية ، المدخلات الوحيدة التي تأخذها اللعبة هي ساعة الإدخال على لوحة Basys3 التي تعمل بسرعة 100 ميجا هرتز ، وسبعة مفاتيح على لوحة Basys3 ، وزر إعادة الضبط. ما يتم إخراجه هو الأنود للشاشة ذات الأجزاء السبعة ، والأجزاء السبعة للعرض ، ومصابيح LED.

الخطوة 4: CLKDivide

CLK قسمة
CLK قسمة
CLK قسمة
CLK قسمة
CLK قسمة
CLK قسمة

أنشأت الوحدة الفرعية لمقسم الساعة ساعة أبطأ اعتمادًا على القيمة التي قمنا بتعيينها لها في ملفنا الرئيسي. استخدمنا هذه الوحدة الفرعية لتحديد Clk400 و PushClk و newlck. تأخذ هذه الوحدة الفرعية ساعة ومقسّم 32 بت كمدخلات. يتم إخراج ساعة بطيئة. هناك كتلة عملية للمقسم والساعة البطيئة. في هذه العملية ، يوجد متغير مؤقت ، نسميه العد ، يتم احتسابه في كل مرة يتم فيها ضرب حافة صاعدة للساعة المدخلة. بمجرد وصولها إلى رقم المقسوم عليه ، يتم تبديل الساعة البطيئة ويعيد العد إلى الصفر.

الخطوة 5: تحويل كتلة العملية

كتلة عملية التحول
كتلة عملية التحول

تتحكم كتلة عملية التحول في الحركة المتناوبة وسرعة مصابيح LED. في قائمة الحساسية توجد إشارات newclk و Stop. يتسبب التوقف في تأخير قصير عندما يتجاوز المستخدم المستوى. إذا لم يكن التوقف مرتفعًا ، فإن مصابيح LED تتبدل كالمعتاد بناءً على سرعة newclk. يتم التحكم في هذا النمط البديل بواسطة متغيرين: التتبع والعد. يحدد Count أي مؤشر LED يجب أن يكون قيد التشغيل ، بينما يحدد Track ما إذا كان يجب أن يتم العد لأعلى أو لأسفل. هناك إشارة أخرى ، نهائية ، تنطبق فقط عندما يكون المستوى "111" ، مما يشير إلى أن اللاعب قد تغلب على اللعبة. يتناوب النهائي بين 0 و 1 كل حافة ساعة لتشغيل وإيقاف تشغيل مصابيح LED بشكل مستمر. هذا مجرد عنصر مرئي للعرض النهائي.

عملية التحول هذه هي المكان المثالي للبدء في هذا المشروع. إذا كان بإمكانك الحصول على مصابيح LED الخاصة بك بالتناوب بشكل صحيح ومتسق ، فمن هنا عليك فقط إضافة السلوك عند رفع المستوى!

الخطوة 6: آلة الحالة المحدودة

آلة الدولة المحدودة
آلة الدولة المحدودة

لقد أنشأنا آلة الحالة المحدودة لإملاء السلوك عند الضغط على مفتاح الإدخال أو زر إعادة الضبط. كل حالة هي "مستوى" وإذا تم تشغيل المفتاح في وقت غير صحيح أو تم الضغط على إعادة الضبط ، يعود المستوى مرة أخرى إلى "000". خلاف ذلك ، إذا تم تشغيل المفتاح بشكل صحيح ، فإن المستوى يتحرك لأعلى حتى يصل إلى الحالة النهائية ، "111" ويحدث عرض النهاية. تعتمد FSM على كتلي العملية sync_proc و comb_proc. يستخدم Sync_proc الساعة التي أطلقنا عليها اسم PushClk. تتحكم هذه الساعة في مدى سرعة تحول الحالة التالية إلى الحالة الحالية. يجب أن تكون هذه الساعة سريعة جدًا ؛ اخترنا سرعة كانت أسرع مرتين تقريبًا من أسرع سرعة LED لدينا.

قمنا بتنفيذ هذا الرمز باستخدام FSM للمستويات ؛ ومع ذلك ، بعد هذا المشروع ، أدركنا أن الاستخدام الأكثر كفاءة لـ FSM ربما كان يتمثل في حالة العد ، أو حالة إعادة التعيين ، أو حالة الإقامة. إذا لم يتم الضغط على أي شيء ، فهو في حالة البقاء. في حالة الضغط على إعادة الضبط أو العبث باللاعب ، يكون في حالة إعادة الضبط. إذا تم الضغط عليه بشكل صحيح ، فهو في حالة العد. هناك العديد من الطرق الأخرى لاستخدام FSM في هذه اللعبة أيضًا!

الخطوة 7: التحكم في كتلة عملية العرض مع المستوى

التحكم في كتلة عملية العرض بالمستوى
التحكم في كتلة عملية العرض بالمستوى

يتحكم المستوى في كتلة عملية العرض. المتغيرات في قائمة الحساسية هي Level و Reset و Clk400. يبدأ عرض الأجزاء السبعة بعرض "1" للمستوى الأول. يتم احتسابها حتى 7 في كل مرة يمر فيها المستخدم بمستوى لتظهر للمستخدم المستوى الذي وصل إليه. بمجرد أن يجتاز المستخدم المستوى 7 ، فإنه يعرض "COOL" للإشارة إلى أن اللاعب قد تغلب على اللعبة. تعمل شاشة "COOL" هذه من ساعة 400 هرتز التي أطلقنا عليها Clk400. إذا تم الضغط على "إعادة تعيين" ، تعود الشاشة إلى "1".

الخطوة 8: التحكم في سرعة LED مع المستوى

التحكم في سرعة LED مع المستوى
التحكم في سرعة LED مع المستوى

أخيرًا ، يتحكم المستوى في سرعة مصابيح LED. المستوى هو الإشارة الوحيدة في قائمة الحساسية. D1 هي الإشارة التي تدخل في عملية Clock Divider للحصول على newclk. في كل مرة يتم تغيير المستوى ، أو تغيير الحالة ، كتلة العملية "السرعة". تحدد هذه العملية قيمة D1. هناك 8 قيم محددة لـ D1 اخترناها بناءً على السرعة التي أردنا أن يعمل بها كل مستوى. يصبح D1 أصغر كلما زاد مستوى الوقت بحيث يعمل newclk بشكل أسرع.

الخطوة 9: تجميع الأجهزة

تجميع الأجهزة
تجميع الأجهزة

قمنا بتوصيل اللوح بـ Basys3 بأحد موصلات pmod. تم استخدام ستة من منافذ pmod لتوصيل موصل ذكر إلى ذكر ، واحد للأرضي وخمسة أخرى لمصابيح LED الخمسة. وضعنا أيضًا مقاومًا لكل LED. تبلغ درجة حرارة هذه المقاومات 220 درجة وتمنع المصابيح من أن تكون دائرة قصيرة ومحترقة. على الرغم من أن كل LED لديه بعض المقاومة ، فإن المقاومة ليست كافية لإعاقة الجهد من المصدر.

الخطوة 10: استمتع

هذه اللعبة سهلة جدا للعب. يبدأ المشغل بالمفتاح 1 أقصى يمين اللوحة ، V17. يجب عليهم قلب المفتاح عالياً عندما يكون مؤشر LED الأوسط قيد التشغيل. ثم يقومون بتحريك مفتاح واحد إلى اليسار ويفعلون نفس الشيء! إذا وصل اللاعب إلى النهاية ، سينتهي به الأمر على المفتاح السابع ، W14. إذا تغلبوا على اللعبة ، سيشاهدون عرض نهاية ممتع حقًا!

شيء يجب ملاحظته هو أنه عند إنشاء هذه اللعبة ، فإن السرعات متروكة لك تمامًا! إذا كانت السرعات التي اخترناها بطيئة جدًا ، فلا تتردد في تسريعها وجعلها أكثر صعوبة! لا يوجد أيضًا عدد محدد من المستويات. إذا كنت ترغب في جعله يحتوي على المزيد من المستويات ، فهناك تعديلات يجب إجراؤها على FSM وكتل العملية التي يحددها Level ، ولكن هذه تغييرات بسيطة للغاية.

اخترنا أيضًا استخدام المفاتيح الموجودة على اللوحة كمدخلات للمستخدم ، ولكن هذا ممكن أيضًا باستخدام زر على لوحة Basys3 ؛ سيؤدي الزر إلى التخلص من الحاجة إلى إعادة تعيين المفاتيح في كل مرة يبدأ فيها المستخدم من جديد. استخدمنا زرًا في البداية ، ولكن هذا تسبب في حدوث أخطاء في تحديد المستوى لأنه قد يقفز مستويات متعددة إذا تم الضغط على حافتين صاعدتين من PushClk عند الضغط على الزر.

يوجد أدناه مقطع فيديو يوضح كيفية اللعب ، ويمر عبر المستويات الأربعة الأولى ، وعرض النهاية النهائية.

الملف الرئيسي لهذا المشروع مدرج أدناه.

مصادر

دليل مرجعي Basys3

إلهام المشروع - لعبة Arduino Stop It

موصى به: