ዝርዝር ሁኔታ:

በቪኤችዲኤል ውስጥ ዋና አስተናጋጅ ጨዋታ - 3 ደረጃዎች
በቪኤችዲኤል ውስጥ ዋና አስተናጋጅ ጨዋታ - 3 ደረጃዎች

ቪዲዮ: በቪኤችዲኤል ውስጥ ዋና አስተናጋጅ ጨዋታ - 3 ደረጃዎች

ቪዲዮ: በቪኤችዲኤል ውስጥ ዋና አስተናጋጅ ጨዋታ - 3 ደረጃዎች
ቪዲዮ: Консультант от бога Tg: cadrolikk 2024, ህዳር
Anonim
በቪኤችዲኤል ውስጥ የማስተርሜንት ጨዋታ
በቪኤችዲኤል ውስጥ የማስተርሜንት ጨዋታ
በቪኤችዲኤል ውስጥ የማስተርሜንት ጨዋታ
በቪኤችዲኤል ውስጥ የማስተርሜንት ጨዋታ

ለፕሮጀክታችን ፣ በ ‹‹VHDL›› ውስጥ ‹‹Mentmind›› ጨዋታውን በ Basys3 ሰሌዳ ላይ እንዲጫወት ፈጠርን። Mastermind በተለምዶ ከፒግ እና ከጨዋታ ሰሌዳ ጋር የሚጫወት ኮድ ሰባሪ ጨዋታ ነው። ተጫዋች አንድ ከተጫዋች ሁለት ተደብቆ በ 4 ረድፍ ውስጥ የተለያዩ ቀለሞችን ጥፍሮች ያስቀምጣል። ተጫዋች ሁለት ከዚያ በተጫዋቹ አንድ በሚታይ ረድፍ ላይ ቦርዱን ላይ የሚያስቀምጡ የ ‹x› ግምቶች ብዛት አለው። ከእያንዳንዱ ግምት በኋላ ተጫዋች ሁለት ስለ 2 ቁጥሮች ይነገራል -ምንጣፎች ትክክለኛው ቀለም ምን ያህል ናቸው ፣ እና ስንት ረድፎች በትክክለኛው ቦታ ላይ ናቸው። እነዚያን ፍንጮች በመጠቀም ፣ ተጫዋች ሁለት በቁጥር ግምት ውስጥ ያስገባውን ትክክለኛውን የፒን ቅደም ተከተል መገመት አለበት።

በእኛ ትግበራ ውስጥ ጨዋታው ነጠላ ተጫዋች ነው። የዘፈቀደ የፔግ ጥምረት በፕሮግራሙ የመነጨ ሲሆን ተጫዋቹ ትክክለኛውን ቅደም ተከተል ለመገመት Basys3 ሰሌዳውን መጠቀም አለበት። በሁለትዮሽ እሴቶች የተወከሉ አራት “ቀለሞች” አሉ። ባለ 7-ክፍል ማሳያ ሶስት እሴቶችን ያሳያል-ቀሪ መዞሪያዎች ፣ በትክክለኛው ቦታ ላይ የፒኖች ብዛት ፣ እና በተሳሳተ ቦታ ላይ ትክክለኛ ቀለም ያላቸው የፒኖች ብዛት (እነዚህ እሴቶች በ 9 ፣ 0 እና 0 ይጀምራሉ)። ተጫዋቹ በእሱ/እሷ ግምት የሁለትዮሽ እሴቶችን ለመምረጥ በቦርዱ ላይ ያሉትን መቀያየሪያዎችን ይጠቀማል ፣ እና ግምቱን ለማስገባት ሌላ መቀያየር ይገለብጣል። እነሱ ትክክል ከሆኑ ጨዋታው ያበቃል እና የ 7 ክፍል ማሳያ “GG” ያሳያል። ካልሆነ ፣ የማዞሪያ ቆጣሪው በ 1 ይቀንሳል እና ተጫዋቹ በግምታቸው ውስጥ ስንት ፒኖች በጥምረቱ ውስጥ ካለው የፒኖች ቀለም ወይም አቀማመጥ ጋር እንደሚመሳሰሉ ግብረመልስ ይቀበላል። ተጫዋቹ በትክክል ሳይገመት ተራዎቹ ከጨረሱ ፣ ማሳያው “GO” (ጨዋታውን ይወክላል) ያሳያል። ተጫዋቹ በማንኛውም ጊዜ እንደገና ለመጀመር የዳግም አስጀማሪውን መቀያየር ይችላል።

ደረጃ 1: ቁሳቁሶች

ቁሳቁሶች
ቁሳቁሶች
ቁሳቁሶች
ቁሳቁሶች
ቁሳቁሶች
ቁሳቁሶች

ጠቅላላው ጨዋታ በራሱ በቦርዱ ላይ ሊጫወት ስለሚችል ፣ የሚያስፈልጉት ቁሳቁሶች የ Basys3 ቦርድ ፣ ከቦርዱ ጋር ለመገናኘት የማይክሮ ዩኤስቢ ገመድ እና በኮድ/በኮምፒተር/በኮምፒተር ላይ ሊጠቀሙበት የሚችሉት ኮምፒተር/ላፕቶፕ ብቻ ናቸው!

ደረጃ 2 - ኮዱ

ኮዱ
ኮዱ
ኮዱ
ኮዱ

ይህ ጨዋታ በ FPGA ላይ እንዲሠራ ፣ እሱን ለመፃፍ ቀላሉ መንገድ የግዛት ማሽን መፍጠር ነው። የስቴት ማሽን መኖሩ ለጨዋታው አስፈላጊ የሆነውን ተከታታይ እና መስተጋብራዊ ልምድን ይፈቅዳል። ሁሉም ነገር በተቀላጠፈ ሁኔታ እንዲሠራ ፣ የስቴቱ ማሽኑ በ FPGA ውስጣዊ የሰዓት ምልክት ላይ የተመሠረተ ይሆናል ፣ ሁሉም ነገር በስምምነት መሆኑን ያረጋግጣል። ዋናው ሞጁል አራት ግዛቶች ያሉት የስቴት ማሽን ነው ፤ የመነሻ ግዛት (የመጀመሪያ) ፣ SubmitAnswer State (SubAns) ፣ የማሳያ ሁኔታ (ዲስክ) እና የቼክ መጨረሻ ጨዋታ (CheckEnd)። ከስቴቱ ማሽን ጋር ፣ ዋናው ሞጁል ሁለት ንዑስ ሞዱሎች ፣ ባለ 4 አሃዝ ሰባት ክፍል ማሳያ (የራሱ የ ClkDivider ንዑስ ሞዱል ያለው) እና የዘፈቀደ ቁጥር ጀነሬተር (በእውነቱ psuedo- የዘፈቀደ ቁጥር ጄኔሬተር) አለው። ሰዎች በቀላሉ የሚያስገቡትን ለማየት እንደ መንገድ ሲበራ ከእያንዳንዱ ማብሪያ / ማጥፊያ በላይ ያለው የ LED መብራት እንዲበራ ለማድረግ መሠረታዊ የሂደት ማገጃ አለ። የኮዱ መሠረታዊ አጠቃላይ እይታ በምስል አእምሮ ካርታ ውስጥ ይታያል።

ለመመልከት የመጀመሪያው ክፍል የዘፈቀደ ቁጥር ጄኔሬተር (randomgen) ነው። ከሃርድዌር የሚመነጩ እውነተኛ የዘፈቀደ ቁጥሮችን በቴክኒካዊ መንገድ የማይቻል በመሆኑ ቀላሉ መፍትሔ የዘፈቀደ አጀንዳ በእውነቱ የመስመር-ግብረመልስ Shift Register (LFSR) መሆን ነበር። የኤል.ኤፍ.ኤፍ.ኤስ.ኤል (clk) ግብዓት እና “ሀ” (የ 12 ቢት ቁጥር) ውጤት አለው። እያንዳንዱ የሰዓት ዑደት ፣ ከ ‹000000000001› ጀምሮ አዲስ የ 12-ቢት ቁጥር ይፈጠራል ፣ በመጨረሻም እራሱን ከመድገም በፊት ሁሉንም የ 12-ቢት የ 1 እና 0 ጥምረቶችን ያልፋል። “ሀ” ውፅዓት ለእያንዳንዱ የሰዓት ዑደት ተሰጥቷል ፣ ስለዚህ ያለማቋረጥ በመላው ውስጥ ይሠራል። ክላቹ ከዋናው ሞዱል ወደ ክሊክ የተቀየሰ ሲሆን “ሀ” በዋናው ሞጁል ውስጥ ወደ ራንድኑም ምልክት ተደርጎበታል።

ሁለተኛው ንዑስ ሞዱል ባለ 4 አኃዝ ሰባት ክፍል ማሳያ ነው። ይህ ባለ 4 አሃዝ ባለ ሰባት ክፍል ማሳያ ለማሳየት በጣም ቀጥተኛ መንገድ ነው። ማሳያው ከዋናው ሞጁል በ Clk ላይ ተዘጋጅቷል ፣ ሆኖም ይህ ንዑስ ሞዱል የራሱ የ ‹ClkDivider› ንዑስ ሞዱል አለው። ClkDivider (ወደ 1298 Hz ተቀናብሯል) ሁሉም አሃዞች በተመሳሳይ ጊዜ ላይ እንዲታዩ ሰዓቱን ለማፋጠን ጥቅም ላይ ይውላል (አንድ አሃዝ በእውነቱ በአንድ ጊዜ ብቻ ሊሆን ስለሚችል)። ተለዋዋጩ “አሃዝ” በማሳያው ላይ ባሉ ቦታዎች ላይ ለማሽከርከር ጥቅም ላይ ይውላል ፣ እና በእያንዳንዱ አሃዞች ከ 0 እስከ 9 ያሉትን አሃዞች ለማሳየት አማራጮች እና እንዲሁም ምንም ነገር ሳይኖር የመሠረታዊ 4-ቢት የግብዓት ማሳያ ሁኔታዎች ይመጣሉ። በዚህ ጨዋታ ውስጥ ስላልተጠቀመ በማሳያው ላይ ያለው የግራ አሃዝ ወደ ምንም ነገር ተቀናብሯል።

ዋናው ሞጁል የስቴቱን ማሽን ያካትታል። በሂደቱ ውስጥ ያሉት አራቱ ግዛቶች የመጀመሪያ ፣ ንዑስ ፣ ዲስ እና ቼክ መጨረሻ ናቸው። በመነሻ ሁኔታ ውስጥ በሚሆንበት ጊዜ SubmitBtn (ለመፈተሽ መልስዎን ለማስገባት ጥቅም ላይ የዋለው ማብሪያ) ወደ «1» ከተዋቀረ ማሽኑ ወደ ንዑስ ግዛት ግዛት ይሄዳል። በማንኛውም ጊዜ Rbtn (ማሽንን ዳግም ለማስጀመር የሚያገለግል ማብሪያ) ወደ «1» ተቀናብሯል ፣ ከዚያ ማሽኑ ወደ መጀመሪያው ሁኔታ ይመለሳል። በ SubAns ግዛት ውስጥ ፣ መቼ SubmitBtn = ‘0’ እንደገና ወደ ዲስ ግዛት ይሄዳል። በዲስ ግዛት ውስጥ በሚሆንበት ጊዜ ቆጠራው = 0 ከሆነ (ለመታጠፍ ግራዎቹ ወደ 0 ይወድቃሉ) ወይም RSpotCount = 4 ከሆነ (ተጫዋቹ በትክክለኛው ቦታዎች ላይ ሁሉም ትክክለኛ ቀለሞች ማለት ነው) ፣ ማሽኑ ወደ CheckEnd ግዛት ይሄዳል። ከእነዚህ ውስጥ አንዳቸውም ካልተከሰቱ ፣ ከዚያ SubmitBtn = ‘1’ እንደገና ሲገመት ፣ ሌላ ግምት ለመፍቀድ ወደ SubAns ግዛት ይመለሳል። በቼክ መጨረሻ ግዛት ውስጥ ፣ ይህ የጨዋታው መጨረሻ ነው ፣ እና ብቸኛው መውጫ ዳግም ማስጀመርን መምታት ፣ ወደ መጀመሪያው ሁኔታ መመለስ ነው። ይህ በስቴቱ ማሽን ንድፍ ውስጥ በቀላሉ ሊታይ የሚችል ነው። በባህሪው የመጀመሪያው ግዛት ሁሉንም ነገር ወደ መጀመሪያው ቦታ ይመልሳል። ቆጠራው (ተጫዋቹ ምን ያህል ተራዎችን ወደ ግራ እንደሚቆጥብ የሚያሳይ ምልክት) ወደ 9 ተቀናብሯል ፣ RSpotCount (እርስዎ የገመቱት ቀለሞች በትክክለኛው ቦታ ላይ ምን ያህል እንደሚቆጥቡ የሚያሳይ ምልክት) ወደ 0 ፣ RColorCount (ምን ያህል እንደሚቆጥብ ምልክት) የገመቱዋቸው ቀለሞች ትክክል ናቸው ፣ ግን በተሳሳተ ቦታ ላይ) ወደ 0 ተቀናብሯል ፣ እና ትንሹ ቆጠራ (በመጨረሻው ግዛቶች ውስጥ እያንዳንዱን ተራ የሚለወጠው ወደ ቆጠራው የተቀየረው ምልክት) ወደ 9. ተቀናብሯል። (psuedo- በዘፈቀደ የመነጨ ቁጥር) በአራት የተለያዩ ቼኮች ተከፋፍሏል (ለእያንዳንዱ ለ 3 ቢት ቀለም አንድ) እና ወደ ምልክት ቼክ 1 ፣ ቼክ 2 ፣ ቼክ 3 ፣ ቼክ 4 ይቀመጣል። እነዚህ ቼኮች ግምቶችዎ በእውነቱ የሚነፃፀሩ ናቸው ፣ ስለዚህ ምንም እንኳን LFSR ሁል ጊዜ RandNum እያንዳንዱን ዑደት እንዲለውጥ ቢያደርግም ፣ የመጀመሪያውን ሁኔታ ከለቀቁ በኋላ ቼኮች አንድ እንደሆኑ ይቆያሉ ፣ የተቀመጠ እሴት የእርስዎን መልስ ለማወዳደር ያስችላል። ይህ ማለት ማሽኑ ዳግም በሚጀመርበት በማንኛውም ጊዜ ተጫዋቹ ለመገመት አዲስ እሴት አለው።

SubmitAnswer State (SubAns) የቁጥር ቆጣሪውን (“ለውጥ” ምልክት) ወደ “1” ይለውጠዋል። ተራ መከታተያው ወደ ሥራ እንዲሄድ ይህ በኋላ ያስፈልጋል። ከዚያ በኋላ ግዛቱ የተጫዋቹን ግብዓቶች ከመቀያየሪያዎቹ እስከ ከላይ በተጠቀሰው ቼኮች ያወዳድራል። ምልክት rs1 ፣ rs2 ፣ rs3 ፣ rs4 እና ምልክቶች rc1 ፣ rc2 ፣ rc3 ፣ rc4 በአረፍተ ነገሮች ላይ በመመስረት ኢንቲጀር ዓይነቶች ናቸው ፣ ይህም መግለጫዎች ወደ 1 ወይም 0. ከተዋቀሩ የምልክት rs ለትክክለኛው ቦታ እና rc ለትክክለኛው ቀለም ነው። ለምሳሌ ፣ የ 1 ተጫዋች ግምት ከ RandNum ቼክ 1 ጋር እኩል ከሆነ ፣ ከዚያ rs1 = 1 ይህ ማለት ትክክለኛው ቀለም በትክክለኛው ቦታ ላይ ነው ማለት ነው። ቀለም 1 ቼክ 1 እኩል ካልሆነ ፣ ግን ከሌላው ቼኮች አንዱን እኩል ከሆነ ፣ ከዚያ rc = 1. ይህ ለእያንዳንዱ ቀለም እና ለእያንዳንዱ ቼክ ይደረጋል።

የማሳያ ሁኔታ (ዲስክ) በመጀመሪያ የመቁጠሪያ አንቃውን ይፈልጋል። እሱ ‹1 ›ከሆነ ፣ ከዚያ አነስተኛ ቆጠራ ወደ 1 ይወርዳል (ስለዚህ በመጀመሪያው ዙር ከ 9 ወደ 8 ወዘተ ይሄዳል)። አለበለዚያ መዞሩ አይለወጥም። ያ ማንቃት ምንም ቢሆን ፣ ከላይ ያሉት ሁሉም የ rs እሴቶች ተደምረው ለ RSpotCounter ምልክት ተመድበዋል። እንዲሁም ሁሉም የ rc እሴቶች ተጨምረው ለ RColorCounter ተመድበዋል። በመጨረሻም ቆጠራ የአነስተኛ ቆጠራ ዋጋ ተመድቧል። ምልክቶቹ RSpotCounter ፣ RColorCounter እና Countdown ሁሉም ከሂደቱ ውጭ ወደ 4-ቢት std_logic_vectors ተቀይረው በወደብ ካርታ በኩል ወደ ሰባት ክፍል ማሳያ ንዑስ ሞዱል ይገፋሉ። በዚህ መንገድ አዲስ መልስ እስኪያቀርቡ ድረስ ማሳያው ትክክለኛዎቹን ነገሮች ያሳያል።

የቼክ መጨረሻው ግዛት እርስዎ አሸንፈዋል ወይም ተሸንፈዋል ማለት ነው። ካሸነፉ (ሁሉም 4 ቀለሞች በትክክለኛው ቦታ ላይ ናቸው ፣ አለበለዚያ RSpotCounter = 4 በመባል ይታወቃሉ) ፣ ከዚያ “GG” (በቴክኒካዊ መልኩ 66 ሆኖ የሚታየው) አሸንፈዋል ለማለት በሰባቱ ክፍል ላይ ይታያል። እርስዎ ከጠፉ (ቆጠራው 0 ደርሷል) ከዚያ “ሂድ” (በቴክኒካዊ መልኩ 60 ሆኖ ይታያል) ለጨዋታ በላይ ማሳያ ላይ ይታያል። በሁለቱም ውጤት ፣ ዳግም ማስጀመሪያ ማብሪያውን ማብራት ማሽኑን እንደገና ለመጫወት ወደ መጀመሪያው ሁኔታ ያንቀሳቅሰዋል።

የምንጭ ኮድ እዚህ ይገኛል።

ደረጃ 3 መደምደሚያ

ይህንን ፕሮጀክት ማጠናቀቅ የበለጠ የተወሳሰቡ ወረዳዎችን ስለመገንባት ብዙ አስተምሮናል። የእኛ የመጀመሪያ ንድፍ ውሱን የስቴት ማሽን አልነበረም። እኛ ለማረም አስቸጋሪ ሆኖ አግኝተናል ፣ እና የተለያዩ ዘዴዎችን (ኤፍኤምኤስን ጨምሮ) በመጠቀም ብዙ ጊዜ ኮዱን እንደገና ጻፈ። በአስተማሪው አስተያየት ፣ ከኤፍኤስኤም አቀራረብ ጋር ተጣብቀን ጨዋታውን መጨረስ ችለናል። ከባህላዊ የፕሮግራም አቀራረብ ይልቅ በሃርድዌር ላይ የተመሠረተ ኮዱን መቅረጽ የበለጠ ውጤታማ መሆኑን ተምረናል። እንዲሁም ከሰባቱ ክፍል ማሳያ ጋር የተዛመዱ በርካታ ተግዳሮቶች አጋጥመውናል። ያለ “ghosting” በርካታ ቁጥሮችን እንዲያሳይ ማድረጉ ከባድ ነበር ፣ እና ይህንን ለማከናወን የሰዓት መከፋፈያ መጠቀም ነበረብን። ይህንን ፕሮጀክት የበለጠ የምናዳብር ከሆነ ፣ ተጠቃሚው ከቀለሞች የቁጥር ተወካዮች ይልቅ ቀለሞችን (እንደ ተለምዷዊው ጨዋታ) ማየት እንዲችል ከ Basys3 ጋር ባለቀለም ኤልኢዲዎችን እናገናኛለን። በመጨረሻ ፣ እኛ ከተወሳሰቡ የወረዳ ዲዛይን ፣ ከእውነተኛ ህይወት አፕሊኬሽኖች እና አስመሳይዎችን ከመልካም ሁኔታዎች ጋር ከመሮጥ ይልቅ ሃርድዌር የመጠቀም ተግዳሮቶችን የበለጠ ግንዛቤ አግኝተናል።

የሚመከር: