بازی Pong روی FPGA با تصویر VGA و برد اختصاصی
بازی Pong کامل که بدون پردازنده روی یک Spartan-6 اجرا میشود: کد VHDL، تولید تصویر VGA ۶۴۰×۴۸۰ و بردی که خودم در Altium طراحی کردم.
معرفی
این پروژه بازی Pong است که در سال ۲۰۱۶ روی FPGA ساختم. هیچ پردازنده یا نرمافزاری در کار نیست: تمام بازی، از تولید تصویر VGA تا حرکت توپ، با سختافزار دیجیتال و کد VHDL روی یک Spartan-6 اجرا میشود. برد FPGA را هم خودم در Altium Designer طراحی کردم و تصویر بازی روی یک نمایشگر LCD دیده میشود. روی صفحهی بازی نام و آدرس همین سایت نوشته شده است.
بازی چطور کار میکند
بازی سه صفحه دارد و یک ماشین حالت بین آنها جابهجا میشود:
صفحهی شروع: با یک پیام چشمکزن منتظر فشار دکمهی Start میماند.
صفحهی بازی: یک توپ سبز در صفحه حرکت میکند و از دیوار بالا و دیوارهای کناری برمیگردد. بازیکن با دکمههای چپ و راست یک راکت قرمز را در پایین صفحه حرکت میدهد تا توپ را برگرداند.
صفحهی پایان: اگر توپ از راکت رد شود بازی تمام میشود و با دکمهی Start از نو شروع میشود.
دکمهی Reset هم هر زمان بازی را به صفحهی شروع برمیگرداند. نمودار زیر اجزای FPGA و مسیر سیگنالها را نشان میدهد.
تولید تصویر VGA
تصویر با رزولوشن ۶۴۰×۴۸۰ و نرخ ۶۰ هرتز تولید میشود. ساعت ۵۰ مگاهرتز برد به ۲۵ مگاهرتز تقسیم میشود تا ساعت پیکسل بسازد، و دو شمارندهی افقی و عمودی سیگنالهای همگامسازی (H-Sync و V-Sync) را تولید میکنند و مختصات هر پیکسل را به بخشهای بازی میدهند. هر بخش با مقایسهی همین مختصات تصمیم میگیرد پیکسل چه رنگی باشد؛ پس حافظهی تصویر لازم نیست و همهچیز لحظهای ساخته میشود. خروجی رنگ سه بیتی (RGB) همراه با دو سیگنال همگامسازی به نمایشگر میرود.
حرکت توپ و راکت
حرکت بازی برای هر فریم، حدود ۱۶ میلیثانیه یک بار، بهروز میشود. راکت در هر فریم ۶ پیکسل جابهجا میشود و توپ ۳ پیکسل در هر جهت. وقتی توپ به دیوار بالا یا کنارهها بخورد، یا با راکت برخورد کند، جهتش برعکس میشود. اگر توپ از ارتفاع راکت پایینتر برود، حالت بازی به «پایان» میرود.
مشخصات
FPGA: Xilinx Spartan-6 مدل XC6SLX9
کد: VHDL، با ابزار Xilinx ISE
خروجی تصویر VGA ۶۴۰×۴۸۰ با ۶۰ هرتز، رنگ سه بیتی
ورودی: چهار دکمه (چپ، راست، Start، Reset)
سه صفحه: شروع، بازی، پایان
ساعت اصلی ۵۰ مگاهرتز
تغذیه از USB
طراحی سختافزار
بردی که زیر FPGA است را خودم طراحی کردم. روی برد این بخشها هست:
FPGA مدل XC6SLX9 در بستهی TQG144 و یک نوسانساز ۵۰ مگاهرتز
حافظهی فلش SPI برای نگهداری پیکربندی، تا FPGA بعد از هر روشن شدن خودش بالا بیاید
تراشهی FT2232HL برای اتصال USB: برنامهریزی FPGA از طریق JTAG و یک کانال دادهی موازی
دو رگولاتور AMS1117، یکی ۳٫۳ ولت و یکی ۱٫۲ ولت، که از ۵ ولت USB تغذیه میشوند
پنج کلید: Reset، چپ، راست، Start و کلید پیکربندی
LED برای روشن بودن برد و پایان پیکربندی FPGA
هدر خروجی برای VGA و ترمینال تغذیه
تصاویر زیر بازی در حال اجرا، نمای سهبعدی و طرح PCB، و نقشهی مدار را نشان میدهد.
نتیجه
یک بازی کامل با تصویر زنده که بدون هیچ پردازندهای روی سختافزار دیجیتال اجرا میشود، همراه با بردی که برایش طراحی و ساخته شد.
از من حمایت کنید
اگر این نوشتهها به کارتان آمد، با یک حمایت کوچک به ادامهی آنها کمک کنید.
گالری
وبلاگ
مطالب مرتبط
دربارهی این پروژه سوالی دارید؟
اگر دربارهی این پروژه سوالی دارید یا پروژهای مشابه در دست دارید، خوشحال میشوم با من در ارتباط باشید.