فهرست مطالب:

بازی واکنش FPGA: 10 مرحله
بازی واکنش FPGA: 10 مرحله

تصویری: بازی واکنش FPGA: 10 مرحله

تصویری: بازی واکنش FPGA: 10 مرحله
تصویری: [S3-18] اردوغان ترکیه زیر آتش پس از زلزله 2024, جولای
Anonim
بازی واکنش FPGA
بازی واکنش FPGA

توسط تابستان رادرفورد و رجیتا سوتاندار

مرحله 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

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

این زیرمدل تقسیم ساعت بسته به مقداری که در فایل اصلی خود به آن نگاشت کرده ایم ، ساعت کندتری ایجاد کرده است. ما از این زیر ماژول برای تعیین Clk400 ، PushClk و newlck استفاده کردیم. این زیر ماژول یک ساعت و یک تقسیم کننده 32 بیتی را به عنوان ورودی می گیرد. یک ساعت کند شده خروجی داده می شود. یک بلوک فرایند برای تقسیم کننده و سرعت کند وجود دارد. در این فرایند یک متغیر موقت وجود دارد که ما آن را count می نامیم ، که هر بار یک لبه رو به بالا از ساعت ورودی ضربه می خورد یک عدد شمارش می شود. هنگامی که به عدد تقسیم کننده می رسد ، ساعت کند شده تغییر می کند و شمارش به صفر بازنشانی می شود.

مرحله 5: Shift Process Block

Shift Process Block
Shift Process Block

بلوک فرآیند Shift حرکت متناوب و سرعت LED ها را کنترل می کند. در لیست حساسیت سیگنال های newclk و Stop وجود دارد. هنگامی که کاربر سطح را عبور می دهد ، توقف مختصر ایجاد می کند. اگر Stop زیاد نیست ، LED ها بر اساس سرعت newclk معمولی جایگزین می شوند. این الگوی متناوب توسط دو متغیر کنترل می شود: Track and Count. شمارش تعیین می کند که کدام LED باید روشن باشد ، در حالی که Track تعیین می کند که شمارش باید بالا یا پایین باشد. یک سیگنال دیگر نیز وجود دارد ، Final ، که فقط زمانی که سطح "111" باشد ، اعمال می شود که نشان می دهد بازیکن بازی را شکست داده است. Final بین 0 تا 1 در هر لبه ساعت متناوب می شود تا LED ها به طور مداوم روشن و خاموش شوند. این فقط یک عنصر بصری برای نمایش نهایی است.

این روند تغییر مکان مناسبی برای شروع این پروژه است. اگر می توانید LED های خود را به درستی و به طور مداوم متناوب کنید ، پس از اینجا فقط باید هنگام افزایش سطح رفتار را اضافه کنید!

مرحله 6: ماشین حالت محدود

ماشین حالت محدود
ماشین حالت محدود

ما یک ماشین حالت محدود ایجاد کردیم تا هنگام فشار دادن کلید ورودی یا دکمه تنظیم مجدد ، رفتار را دیکته کند. هر حالت یک "سطح" است و اگر سوئیچ در زمان اشتباه روشن شود یا تنظیم مجدد فشار داده شود ، سطح به "000" برمی گردد. در غیر این صورت ، اگر سوئیچ به درستی روشن باشد ، سطح به سمت بالا حرکت می کند تا به حالت نهایی برسد ، "111" و صفحه پایانی ظاهر می شود. FSM بر اساس دو بلوک فرآیند sync_proc و comb_proc است. Sync_proc از ساعتی استفاده می کند که ما آن را PushClk می نامیم. این ساعت میزان سریع حالت بعدی را به حالت کنونی کنترل می کند. این ساعت باید کاملاً سریع باشد. ما سرعتی را انتخاب کردیم که تقریباً دو برابر سریعترین سرعت LED ما بود.

ما این کد را با استفاده از FSM برای سطوح پیاده سازی کردیم. با این حال ، پس از این پروژه متوجه شدیم که استفاده کارآمدتر از FSM ممکن است داشتن حالت شمارش ، حالت بازنشانی یا حالت ماندن باشد. اگر چیزی تحت فشار نیست ، در حالت ماندن است. اگر تنظیم مجدد فشار داده می شود یا پخش کننده خراب است ، در حالت تنظیم مجدد است. اگر به درستی فشار داده شود ، در حالت شمارش است. روشهای بسیار دیگری نیز برای استفاده از FSM در این بازی وجود دارد!

مرحله 7: کنترل بلوک فرآیند نمایش با سطح

کنترل بلوک فرآیند نمایش با سطح
کنترل بلوک فرآیند نمایش با سطح

سطح بلوک فرآیند Display را کنترل می کند. متغیرهای لیست حساسیت Level ، Reset و Clk400 هستند. نمایش 7 قسمتی با نمایش "1" برای سطح اول شروع می شود. هر بار که کاربر از سطحی عبور می کند تا 7 شمارش می کند تا به کاربر نشان دهد در چه سطحی است. هنگامی که کاربر سطح 7 را گذراند ، "COOL" را نشان می دهد تا نشان دهد که بازیکن بازی را شکست داده است. این صفحه نمایش "COOL" دارای یک ساعت 400 هرتز است که ما آن را Clk400 نامیده ایم. اگر Reset فشار داده شود ، صفحه نمایش به "1" برمی گردد.

مرحله 8: کنترل سرعت LED با سطح

کنترل سرعت LED با سطح
کنترل سرعت LED با سطح

در نهایت ، Level سرعت LED ها را کنترل می کند. سطح تنها سیگنال در لیست حساسیت است. D1 سیگنالی است که برای دریافت newclk وارد فرایند Clock Divider می شود. هر بار که سطح تغییر می کند یا وضعیت تغییر می کند ، فرآیند "سرعت" را مسدود می کند. این فرایند مقدار D1 را تعیین می کند. 8 مقدار تعریف شده از D1 وجود دارد که ما بر اساس سرعت انجام هر سطح انتخاب کردیم. D1 هر زمان که سطح افزایش می یابد کوچکتر می شود تا newclk سریعتر اجرا شود.

مرحله 9: مونتاژ سخت افزار

مونتاژ سخت افزار
مونتاژ سخت افزار

ما breadboard را با یکی از اتصالات pmod به Basys3 متصل کردیم. شش درگاه pmod برای اتصال یک اتصال مرد به مرد ، یکی برای اتصال زمین و پنج مورد دیگر برای 5 LED مورد استفاده قرار گرفت. همچنین برای هر LED یک مقاومت قرار دادیم. این مقاومت ها 220Ω هستند و از اتصال کوتاه و سوختن LED ها جلوگیری می کند. اگرچه هر LED مقاومت کمی دارد ، اما مقاومت کافی نیست تا مانع ولتاژ منبع شود.

مرحله 10: خوش بگذرانید

این بازی بسیار آسان است. پخش کننده از سوئیچ سمت راست 1 تخته ، V17 شروع می کند. وقتی LED وسط روشن است باید سوئیچ را بالا بچرخانند. سپس آنها یک سوئیچ را به سمت چپ حرکت می دهند و همان کار را انجام می دهند! اگر بازیکن به پایان برسد ، در سوئیچ هفتم ، W14 قرار می گیرند. اگر آنها بازی را شکست دهند ، می توانند یک نمایش واقعاً سرگرم کننده را به پایان برسانند!

نکته ای که باید به آن توجه کنید این است که هنگام ایجاد این بازی سرعت کاملاً به شما بستگی دارد! اگر سرعتهایی که انتخاب کرده ایم بسیار کند است ، می توانید آن را سرعت بخشیده و آن را حتی بیشتر چالش برانگیز کنید! همچنین تعداد مشخصی از سطوح وجود ندارد. اگر می خواهید سطح آن بیشتر شود ، باید تغییراتی در FSM و بلوک های فرآیند توسط Level تعیین شود ، اما این تغییرات بسیار ساده هستند.

ما همچنین از سوئیچ های روی برد به عنوان ورودی کاربر استفاده کردیم ، اما این کار با یک دکمه روی برد Basys3 نیز امکان پذیر است. هر بار که کاربر از نو شروع می کند ، دکمه نیازی به تنظیم مجدد سوئیچ ها نخواهد داشت. ما در ابتدا از یک دکمه استفاده می کردیم ، با این حال این امر باعث ایجاد خطا در تعریف سطح می شود زیرا اگر دو لبه در حال افزایش PushClk هنگام نگه داشتن دکمه نگه داشته شود چندین سطح پرش می کند.

در زیر ویدئویی نشان داده شده است که چگونه بازی می کند ، 4 سطح اول را نشان می دهد ، و صفحه پایانی نهایی نمایش داده می شود.

فایل اصلی این پروژه در زیر گنجانده شده است.

منابع

راهنمای مرجع Basys3

Inspiration for project - بازی Arduino Stop It

توصیه شده: