एफपीजीए अल्टर साइक्लोन IV पर गेम "लाइफ"

खेल "लाइफ" 1970 में जॉन कॉनवे द्वारा आविष्कार किया गया एक प्रसिद्ध सेलुलर ऑटोमोबोन है। खेल का सार "ब्रह्मांड" का अनुकरण करना है, हमारे मामले में, बंद किनारों के साथ 8x8 वर्ग मैट्रिक्स पर लागू किया गया है।

गेमप्ले


हमारे मामले में, खेल बिल्ट-इन बटन और स्विच का उपयोग करके एल्टर साइक्लोन IV FPGA पर लागू किया गया है। पूरी प्रक्रिया को सशर्त रूप से ऑपरेशन के दो तरीकों में विभाजित किया गया है - पहली पीढ़ी के कॉन्फ़िगरेशन और वास्तविक सिमुलेशन की पसंद।

कार्यान्वयन


खेल को वेरिलॉग डिजाइन भाषा में लागू किया गया है और इसमें चार बुनियादी मॉड्यूल शामिल हैं: इनपुट मॉड्यूल, आउटपुट, एल्गोरिदम और बुनियादी, बाकी को जोड़ने।

संक्रमण एल्गोरिथ्म

कोड में खेल का मैदान 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 


इनपुट / आउटपुट मॉड्यूल

आउटपुट मॉड्यूल 16 कंट्रोल पिंस के साथ एक मानक 8x8 एलईडी मैट्रिक्स के साथ काम करता है। प्रदर्शन सीमाओं के कारण, चित्र प्रदर्शित पंक्तियों के निरंतर परिवर्तन के साथ पंक्तियों में प्रदर्शित होता है।

इनपुट मॉड्यूल में तीन बटन होते हैं - स्क्रीन अपडेट और एक मोड स्विच। सेटअप मोड में, सभी तीन बटन सक्रिय हैं - सक्रिय सेल का चयन करना, सक्रिय सेल की स्थिति को बदलना और स्क्रीन को अपडेट करना। सिमुलेशन मोड में, केवल स्क्रीन रिफ्रेश बटन सक्रिय है।

काम का उदाहरण

छवि

सोर्स कोड

पुनश्च यह लेख छात्र शोध के लिए आवश्यकताओं में से एक है, हम आपसे दृढ़ता से चप्पल नहीं फेंकने के लिए कहते हैं, हमें दोष नहीं देना है।

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


All Articles