لعبة "الحياة" على FPGA Altera Cyclone IV

لعبة "الحياة" هي آلة خلوية مشهورة اخترعها جون كونواي في عام 1970. جوهر اللعبة هو محاكاة "الكون" ، في حالتنا ، التي يتم تنفيذها على مصفوفة مربعة 8 × 8 ذات حواف مغلقة.

اللعب


في حالتنا ، يتم تنفيذ اللعبة على Altera Cyclone IV FPGA باستخدام الأزرار والمفاتيح المدمجة. تنقسم العملية بأكملها بشكل مشروط إلى وضعين للتشغيل - اختيار تكوين الجيل الأول والمحاكاة الفعلية.

التنفيذ


يتم تنفيذ اللعبة بلغة تصميم Verilog وتتكون من أربع وحدات أساسية: وحدات الإدخال والإخراج والخوارزمية والأساسية ، وتوصيل الباقي.

خوارزمية الانتقال

يتم تقديم الملعب في الرمز في شكل سجل من 64 عنصر. يتم الانتقال إلى الجيل التالي باستخدام المنطق التسلسلي.

دالة الانتقال
function [63:0]step; input [63:0]field; reg [63:0]new_field; reg [7:0]position; reg [7:0]count; integer x; integer y; begin new_field = field; for(x = 0; x < 8; x = x + 1 ) begin: iloop for(y = 0; y < 8; y = y + 1) begin: jloop count = neighbour_count(field,x,y); position = to_1d(x,y); if (count == 3) new_field[position] = 1; else if ((count < 2) || (count > 3)) new_field[position] = 0; end end step = new_field; end endfunction function [7:0]neighbour_count; input [63:0]field; input [7:0]x; input [7:0]y; reg [7:0]count; reg [7:0]position; begin count = 0; position = to_1d(x-1,y-1); count = count + field[position]; position = to_1d(x,y-1); count = count + field[position]; position = to_1d(x + 1, y - 1); count = count + field[position]; position = to_1d(x - 1, y); count = count + field[position]; position = to_1d(x + 1, y); count = count + field[position]; position = to_1d(x - 1, y + 1); count = count + field[position]; position = to_1d(x, y + 1); count = count + field[position]; position = to_1d(x + 1, y + 1); count = count + field[position]; neighbour_count = count; end endfunction function [7:0]to_1d; input [7:0]x; input [7:0]y; begin if (x >= 8'b11111111) x = x + 8'd8; else if (x >= 8'd8) x = x - 8'd8; if (y >= 8'b11111111) y = y + 8'd8; else if (y >= 8'd8) y = y - 8'd8; to_1d = x + y * 8'd8; end endfunction 


وحدات الإدخال / الإخراج

تعمل وحدة الإخراج مع مصفوفة LED 8x8 قياسية مع 16 دبابيس تحكم. بسبب قيود العرض ، يتم عرض الصورة في صفوف مع تغيير مستمر للصف المعروض.

تتكون وحدة الإدخال من ثلاثة أزرار - تحديثات الشاشة ومفتاح الوضع. في وضع الإعداد ، تكون الأزرار الثلاثة نشطة - تحديد الخلية النشطة وتغيير حالة الخلية النشطة وتحديث الشاشة. في وضع المحاكاة ، فقط زر تحديث الشاشة نشط.

مثال العمل

الصورة

كود المصدر

ملاحظة: هذه المقالة هي أحد متطلبات بحث الطلاب ، نطلب منك بشدة عدم إلقاء النعال ، نحن لا نلوم.

Source: https://habr.com/ru/post/ar429764/


All Articles