فهرست مطالب:

2 بازیکن مسابقه VS زمان بندی بازی: 4 مرحله
2 بازیکن مسابقه VS زمان بندی بازی: 4 مرحله

تصویری: 2 بازیکن مسابقه VS زمان بندی بازی: 4 مرحله

تصویری: 2 بازیکن مسابقه VS زمان بندی بازی: 4 مرحله
تصویری: بهترین بازی رئال مادرید بارسالونا sharifi 2024, جولای
Anonim
2 بازی رقابتی VS زمان بندی بازی
2 بازی رقابتی VS زمان بندی بازی

شما نیاز خواهید داشت:

1. Digilent Basys 3 ، FPGA Board (یا هر FPGA دیگر ،)

2. نسخه ای نسبتاً به روز از Vivado یا برخی دیگر از محیط های VHDL

3. کامپیوتری که بتواند برنامه مذکور را اجرا کند.

مرحله 1: خود بازی

خود بازی
خود بازی

نحوه تعامل FSM با ماژول ها

چگونه بازی کنیم

برای شروع ، دکمه وسط را فشار دهید. این باعث می شود "99" ، نشان دهنده سلامت بازیکن دو ، بر روی صفحه نمایش هفت بخش نمایش داده شود. سپس ، LED ها به ترتیب از راست به چپ روشن می شوند. این یک نوار قدرت را تشکیل می دهد. هنگامی که نوار برق پر شد ، مجدداً راه اندازی می شود. هدف بازیکن یک این است که وقتی نوار تا جایی که ممکن است بالا باشد ، کلید خود را بچرخانید. هرچه LED ها بیشتر روشن شوند ، دستگاه پخش کننده آسیب بیشتری به پخش کننده دو می رساند. بعد از اینکه بازیکن یک سوئیچ خود را چرخاند ، خسارت وارد شده از سلامت بازیکن دوم کسر می شود. سپس ، به نوبت بازیکن دو تبدیل می شود. اکنون ، شماره نمایش داده شده نشان دهنده سلامت بازیکن است و نوار قدرت از چپ به راست پر می شود. هنگامی که بازیکن دو حرکت خود را انجام می دهد ، خسارت کم می شود و دوباره به نوبت بازیکن اول برمی گردد. این کار تا زمانی که یک بازیکن به 0 برسد تکرار می شود. ویدئوی این عملکرد ضمیمه شده است.

مرحله 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

این بازی در اصل یک ماشین بزرگ حالت محدود است که منطق پیچیده ای بر اساس وضعیتی که FSM در آن قرار دارد اتفاق می افتد.

حالت 1: منو اولین حالت صفحه منو است که یکی از حالت های ساده تر است. این شامل صفحه نمایش هفت قسمتی است که کلمه "PLAY" را نشان می دهد و دکمه ای که باعث شروع بازی می شود. دکمه ، BTN ، ما را به حالت بعدی هدایت می کند ، که نوبت پخش کننده است.

حالت 2: نوبت بازیکن اول است

نوبت بازیکن یک سیگنالی را فعال می کند که باعث می شود نمایشگر هفت قسمتی سلامت بازیکن دو را نشان دهد. یک سیگنال دیگر روشن می شود تا یک shift shift وارد شده از ماژول دیگری که ما ایجاد کرده ایم (Pone.vhd) فعال شود. این شیفت رجیستر چراغ LED را مانند افزایش اندازه گیری قدرت در سایر بازی ها روشن می کند و هنگامی که به حداکثر میزان LED هایی که می تواند روشن شود برسد ، روی 0 تنظیم می شود. این لبه در حال افزایش ساعت به دست آمده از barclock.vhd ، که از یک فایل آزمایشگاهی وام گرفته شده است ، به روز می شود. ما نوار بازیکن یک را از سمت راست شروع می کردیم و تا سمت چپ پر می کردیم ، زیرا کلید بازیکن یک نیز در سمت چپ است (برای تجربه کاربری بصری). پس از چرخاندن سوئیچ ، وضعیت به پخش کننده کسر می شود و مقدار LED فعال در سیگنال ذخیره می شود.

حالت 3: کسر بازیکن یک سیگنال با مقدار LED فعال میزان سلامتی که کسر می شود را تعیین می کند. این امر با در اختیار داشتن یک شیفت شیفت دیگر (deductor1.vhd) انجام می شود که به جای افزایش LED ها ، آنها را کاهش می دهد. این امر در لبه بالارفتن یکی از ماژولهای ساعت div که ما وام گرفته و تغییر داده ایم کاهش می یابد (downcounterclock.vhd). درست با خاموش شدن یک LED ، یک امتیاز سلامتی از سلامت کلی بازیکن دو کسر می شود. اگر در طول این فرایند بازیکن دو به 0 برسد ، ما متوقف می شویم و بلافاصله به حالت "Game over" می رویم. در غیر این صورت ، هنگامی که بردار LED به "000000000000000000" می رسد ، به نوبت پخش دو می پردازیم.

حالت 4: نوبت بازیکن دو نوبت بازیکن دو دقیقاً مانند نوبت بازیکن اول است ، مگر اینکه شیفت رجیستر برای آن (Ptwo.bhd) از چپ به راست برود و سوئیچ در سمت راست تخته باشد. یک سیگنال فعال می شود تا صفحه نمایش پخش کننده 1 سالم باشد. هنگامی که سوئیچ 2 فعال است ، این نوبت به نوبت کسر بازیکن دو می رسد.

مرحله 5: کسر بازیکن دو درست مانند نوبت بازیکن دو ، کسر بازیکن دو نیز مانند بازیکن یک کسر بسیار عمل می کند. تفاوت اصلی این است که شیفت رجیستری که خاموش شدن LED را کنترل می کند در جهت مخالف حرکت می کند ، که این تغییر آسان است هنگامی که کسری از بازیکن به درستی کار می کند.

مرحله 6: بازی تمام می شود اگر در هر مرحله از سلامت هر یک از بازیکنان به صفر برسد ، بازی به این حالت تغییر می کند. هیچ چیز شیک نمایش نمی دهد اگر BTN یکی فشار داده شود ، وضعیت به 99 بازنشانی می شود و حالت به منو باز می گردد و عملاً بازی را از نو شروع می کند.

مرحله 3: ماژول ها

ماژول ها
ماژول ها

نمودار جعبه سیاه برای بازی

Downcounterclock (بر اساس ماژول clk_div.vhd توسط برایان میلی):

این ساعت است که زمان کسرها را کنترل می کند. ثابتی که max_count نامیده می شود 3 برابر بیشتر از ثابت max_count بارکلاک است. این باعث می شود که کسرها 3 برابر کندتر از سرعت نوار باشند.

بارکلک - (بر اساس ماژول clk_div.vhd توسط برایان میلی):

این ساعت زمان سنج های قدرت را کنترل می کند ، که ما به سرعت آن را افزایش می دهیم تا مشکل را به بازی اضافه کنیم. این زمان بندی را می توان به دلخواه تنظیم کرد ، با افزایش max_count ثابت یک عدد بزرگتر ، سرعت را افزایش دهید یا با max_count یک عدد کوچکتر آن را کاهش دهید. Sseg_dec - (نوشته شده توسط برایان میلی): این ماژول یک عدد 8 بیتی را به عنوان ورودی می گیرد ، که آن را رمزگشایی می کند ، عدد را به معادل اعشاری آن تبدیل می کند و سپس به نمایش هفت قسمت خروجی می دهد. برای کارکردن این فایل ، باید مطمئن شوید که محدودیت های شما با ما مطابقت دارد.

پونه:

این یک شیفت رجیستر است که بیت ها را به چپ منتقل می کند و یک بیت داغ اضافه می کند تا به نظر برسد که نشانگر قدرت در حال افزایش است. هنگامی که همه بیت ها داغ هستند ، همه بیت ها به "0" تنظیم می شوند و چرخه از نو شروع می شود.

Ptwo:

این نسخه معکوس ماژول P1 است.

کسر 1:

این ترکیبی از یک شیفت رجیستر و یک تفریق کننده است. شیفت رجیستر در جهت مخالف شیفت رجیستر P1 حرکت می کند و نشان دهنده کسر است. با این کار در هر چرخه ساعت 1 از سلامت بازیکن 2 کسر می شود ، بنابراین با ترکیب این دو عملکرد ، به نظر می رسد که سلامت حریف به ازای هر یک از نوار سلامتی که پایین می آید 1 برابر کاهش می یابد.

Deductor2: این یک نسخه معکوس از ماژول Deductor1 است.

PlayDecoder (وام گرفته شده و به طور ناگهانی از ekchen35649 133 دستورالعمل گرفته شده است): از این حالت در منو برای نمایش کلمه "PLAY" در رمزگشای هفت بخش استفاده می شود.

مرحله 4: آزمایش کنید

این بازی در اصل از یکی از مینی بازی های Kirby الهام گرفته شده است. این یک بازی ساده دو نفره است که می تواند بر روی یک بازی Basys 3 Board یا هر FPGA انجام شود.

مرحله 1: مواد مورد نیاز

شما نیاز دارید: Digilent Basys 3 ، FPGA Board (یا هر نسخه دیگر) نسخه نسبتاً به روز Vivado یا محیط vhdl دیگر رایانه ای که بتواند برنامه ذکر شده A را اجرا کند

مرحله 2: خود بازی

چگونه بازی کنیم

برای شروع ، دکمه وسط را فشار دهید. این باعث می شود "99" ، نشان دهنده سلامت بازیکن دو ، بر روی صفحه نمایش هفت بخش نمایش داده شود. سپس ، LED ها به ترتیب از راست به چپ روشن می شوند. این یک نوار قدرت را تشکیل می دهد. هنگامی که نوار برق پر شد ، دوباره تنظیم می شود. هدف بازیکن یک این است که وقتی نوار تا جایی که ممکن است بالا باشد ، کلید خود را بچرخانید. هرچه LED ها بیشتر روشن شوند ، دستگاه پخش کننده آسیب بیشتری به پخش کننده دو می رساند. بعد از اینکه بازیکن یک سوئیچ خود را چرخاند ، خسارت وارد شده از سلامت بازیکن دوم کسر می شود. سپس ، به نوبت بازیکن دو تبدیل می شود. اکنون ، شماره نمایش داده شده نشان دهنده سلامت بازیکن است و نوار قدرت از چپ به راست پر می شود. هنگامی که بازیکن دو حرکت خود را انجام می دهد ، خسارت کم می شود و دوباره به نوبت بازیکن اول برمی گردد. این کار تا زمانی که یک بازیکن به 0 برسد تکرار می شود. ویدئوی این عملکرد ضمیمه شده است.

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

مرحله 3: FSM

این بازی در اصل یک ماشین بزرگ حالت محدود است که منطق پیچیده ای بر اساس وضعیتی که FSM در آن قرار دارد اتفاق می افتد.

(نمودار حالت)

حالت 1: منو

حالت اول صفحه منو است که یکی از حالت های ساده تر است. این شامل صفحه نمایش هفت قسمتی است که کلمه "PLAY" را نشان می دهد و دکمه ای که باعث شروع بازی می شود. دکمه ، BTN ، ما را به حالت بعدی هدایت می کند ، که نوبت پخش کننده است.

حالت 2: نوبت بازیکن اول است

نوبت بازیکن یک سیگنالی را فعال می کند که باعث می شود نمایشگر هفت قسمتی سلامت بازیکن دو را نشان دهد. یک سیگنال دیگر روشن می شود تا یک shift shift وارد شده از ماژول دیگری که ما ایجاد کرده ایم (Pone.vhd) فعال شود. این شیفت رجیستر چراغ LED را مانند افزایش اندازه گیری قدرت در سایر بازی ها روشن می کند و هنگامی که به حداکثر میزان LED هایی که می تواند روشن شود برسد ، روی 0 تنظیم می شود. این لبه در حال افزایش ساعت به دست آمده از barclock.vhd ، که از یک فایل آزمایشگاهی وام گرفته شده است ، به روز می شود. ما نوار بازیکن یک را از سمت راست شروع می کردیم و تا سمت چپ پر می کردیم ، زیرا کلید بازیکن یک نیز در سمت چپ است (برای تجربه کاربری بصری). پس از چرخاندن سوئیچ ، حالت به کسر کننده پخش می شود و مقدار LED فعال در سیگنال ذخیره می شود.

حالت 3: کسر بازیکن یک

سیگنال با مقدار LED فعال میزان سلامتی که کسر می شود را تعیین می کند. این کار با داشتن یک شیفت شیفت دیگر (deductor1.vhd) انجام می شود که به جای افزایش LED ها ، آنها را کاهش می دهد. این امر در افزایش لبه یکی از ماژولهای ساعت div که ما وام گرفته و تغییر داده ایم کاهش می یابد (downcounterclock.vhd). درست با خاموش شدن یک LED ، یک امتیاز سلامتی از سلامت کلی بازیکن دو کسر می شود. اگر در طول این فرایند بازیکن دو به 0 برسد ، ما متوقف می شویم و بلافاصله به حالت "بازی تمام" می رویم. در غیر این صورت ، هنگامی که بردار LED به "000000000000000000" می رسد ، به نوبت پخش دو می پردازیم.

حالت 4: نوبت بازیکن دو است

نوبت بازیکن دو دقیقاً مانند نوبت بازیکن اول است ، مگر این که shift shift برای آن (Ptwo.bhd) از چپ به راست برود و سوئیچ در سمت راست تخته قرار دارد. یک سیگنال فعال می شود تا صفحه نمایش پخش کننده 1 سالم باشد. هنگامی که سوئیچ 2 فعال است ، این نوبت به نوبت کسر بازیکن دو می رسد.

مرحله 5: کسر پخش دو

درست مانند نوبت بازیکن دو ، کسر بازیکن دو بسیار شبیه بازیکن یک کسر عمل می کند. تفاوت اصلی در این است که شیفت رجیستری که خاموش شدن LED را کنترل می کند در جهت مخالف حرکت می کند ، که می توان به راحتی آن را هنگامی که کسر پخش کننده به درستی کار می کند انجام داد.

مرحله 6: بازی تمام می شود اگر در هر مرحله از سلامت هر یک از بازیکنان به صفر برسد ، بازی به این حالت تغییر می کند. هیچ چیز شیک نمایش نمی دهد اگر BTN یکی فشار داده شود ، وضعیت به 99 بازنشانی می شود و حالت به منو باز می گردد و عملاً بازی را از نو شروع می کند.

جعبه سیاه

مرحله 4: ماژول ها

Downcounterclock (بر اساس ماژول clk_div.vhd توسط برایان میلی):

این ساعت است که زمان کسرها را کنترل می کند. ثابتی که max_count نامیده می شود 3 برابر بیشتر از ثابت max_count بارکلاک است. این باعث می شود که کسرها 3 برابر کندتر از سرعت نوار باشند.

بارکلک - (بر اساس ماژول clk_div.vhd توسط برایان میلی): این ساعت زمان سنج های قدرت را کنترل می کند ، که ما به سرعت آن را افزایش می دهیم تا مشکل را به بازی اضافه کنیم. این زمان بندی را می توان به دلخواه تنظیم کرد ، با افزایش حداکثر max_count یک عدد بزرگتر ، یا افزایش آن با تبدیل max_count به یک عدد کوچکتر ، سرعت را افزایش دهید. Sseg_dec - (نوشته شده توسط برایان میلی): این ماژول یک عدد 8 بیتی را به عنوان ورودی می گیرد ، که آن را رمزگشایی می کند ، عدد را به معادل اعشاری آن تبدیل می کند و سپس به نمایش هفت قسمت خروجی می دهد. برای کارکردن این فایل ، باید مطمئن شوید که محدودیت های شما با ما مطابقت دارد.

Pone: این یک شیفت رجیستر است که بیت ها را به چپ منتقل می کند و یک بیت داغ اضافه می کند تا به نظر برسد که نشانگر قدرت در حال افزایش است. هنگامی که همه بیت ها داغ هستند ، همه بیت ها به "0" تنظیم می شوند و چرخه از نو شروع می شود.

Ptwo: این یک نسخه معکوس از ماژول P1 است.

Deductor1: این ترکیبی از یک شیفت رجیستر و یک تفریق کننده است. شیفت رجیستر در جهت مخالف شیفت رجیستر P1 حرکت می کند و نشان دهنده کسر است. این همچنین برای هر چرخه ساعت 1 را از سلامت بازیکن 2 کم می کند ، بنابراین با ترکیب این دو عملکرد ، به نظر می رسد که سلامت حریف در ازای هر نوار سلامتی که پایین می آید 1 برابر کاهش می یابد.

Deductor2: این یک نسخه معکوس از ماژول Deductor1 است.

PlayDecoder (وام گرفته شده و کمی از ekchen35649 133 دستورالعمل خود را تغییر داده است):

این مورد در حالت منو برای نمایش کلمه "PLAY" در رمزگشای هفت بخش استفاده می شود.

برای انجام: تصاویر ، فیلم

توصیه شده: