覃洪英 (長江大學(xué)電子信息學(xué)院,電工電子國家級試驗(yàn)教學(xué)示范中心(長江大學(xué)),湖北 荊州 434023)
石頭剪刀布游戲廣泛應(yīng)用于人們生活的選擇決策中,甚至有學(xué)者通過研究石頭剪刀布游戲來演化博弈論[1]。受全國創(chuàng)新試驗(yàn)案例設(shè)計(jì)要求的啟發(fā),筆者設(shè)計(jì)了一個(gè)簡易的石頭剪刀布游戲,以模擬生活中2個(gè)人通過石頭剪刀布的手勢比較進(jìn)行決策。采用Proteus軟件仿真用數(shù)字電路集成元件和FPGA可編程技術(shù)2種方式實(shí)現(xiàn)游戲設(shè)計(jì),利用2種設(shè)計(jì)方法體現(xiàn)數(shù)字系統(tǒng)設(shè)計(jì)的不同手段,感受Proteus仿真的直觀性和現(xiàn)場可編程門陣列FPGA設(shè)計(jì)的編程修改方便、實(shí)現(xiàn)簡單的特性。該項(xiàng)目的參考資料比較少,更易于激發(fā)學(xué)生的主動(dòng)性和創(chuàng)造性,利用游戲項(xiàng)目的設(shè)計(jì)過程引導(dǎo)學(xué)生綜合運(yùn)用所學(xué)知識(shí)解決實(shí)際的問題,掌握系統(tǒng)的設(shè)計(jì)方法[2]。
圖1 系統(tǒng)模塊圖
設(shè)計(jì)一個(gè)簡易的石頭剪刀布游戲,以模擬生活中2個(gè)人通過石頭剪刀布的手勢比較輸贏[3]。主要任務(wù)如下:①以6個(gè)撥碼開關(guān)或者按鍵分別表示甲乙雙方的石頭、剪刀和布3個(gè)手勢,利用編碼器分別將甲乙不同的手勢輸入,編碼為2位二進(jìn)制碼輸出,設(shè)計(jì)比較控制電路比較2組2位二進(jìn)制編碼,各用一個(gè)發(fā)光二極管指示甲乙雙方的輸贏,發(fā)光二極管亮的一方贏,不亮的一方輸,雙方的發(fā)光二級管都不亮表示平局或者沒有比試;②設(shè)計(jì)要求能用數(shù)碼管顯示甲乙雙方各自贏的局?jǐn)?shù),該模擬游戲至少能實(shí)現(xiàn)五局三贏的功能;③設(shè)計(jì)的電路要具有局?jǐn)?shù)清零的功能,以便進(jìn)行下一輪的比試;④分別用數(shù)字電路集成元件和FPGA現(xiàn)場可編程門陣列2種方式實(shí)現(xiàn)。
根據(jù)游戲設(shè)計(jì)規(guī)則設(shè)計(jì)整個(gè)系統(tǒng)模塊如圖1所示。系統(tǒng)主要包括甲乙2人代表手勢的按鍵輸入的編碼電路,2人手勢輸贏比較控制電路,用于指示當(dāng)次輸贏的發(fā)光二極管顯示電路,用于手勢按鍵按下且當(dāng)局一方贏時(shí)控制計(jì)數(shù)器加1的計(jì)數(shù)控制電路,并將計(jì)數(shù)的結(jié)果利用顯示譯碼器譯碼后用七段數(shù)碼管顯示。
表1 編碼電路功能表
AR、AS、AP分別代表游戲中甲的石頭、剪刀、布3種手勢,在試驗(yàn)中用3個(gè)按鍵或3個(gè)撥碼開關(guān)表示。BR、BS、BP分別代表游戲中乙的石頭、剪刀、布3種手勢,在試驗(yàn)中用另外3個(gè)按鍵或3個(gè)撥碼開關(guān)表示。Reset是整個(gè)電路的編碼和計(jì)數(shù)清零信號輸入,高電平有效清零,試驗(yàn)中用一個(gè)撥碼開關(guān)表示。甲輸入的編碼電路功能表如表1所示,手勢輸入低電平有效。乙輸入的編碼電路設(shè)計(jì)與甲輸入的情況完全一樣。乙輸入時(shí)手勢輸入為BR、BS、BP,編碼輸出為B1和B0。
該電路可以用8線-3線編碼器74LS148和非門電路實(shí)現(xiàn),也可以用類似的編碼器實(shí)現(xiàn)。Reset作為編碼器的使能信號。
表2 比較控制電路功能表
通過比較甲乙2人手勢的不同編碼A1、A0和B1、B0,產(chǎn)生驅(qū)動(dòng)2個(gè)發(fā)光二極管顯示的控制信號LEDA和LEDB。當(dāng)控制信號為高電平時(shí),其所連接的發(fā)光二極管亮,當(dāng)控制信號為低電平時(shí),其所連接的發(fā)光二極管滅。當(dāng)甲贏乙輸時(shí),LEDA為高電平,LEDB為低電平;當(dāng)甲輸乙贏時(shí),LEDA為低電平,LEDB為高電平;當(dāng)甲乙平局時(shí),LEDA和LEDB均為低電平,只要一方?jīng)]有有效輸入時(shí),LEDA和LEDB也均為低電平。比較控制電路功能表如表2所示。
由功能表可以得到LEDA和LEDB的函數(shù)表達(dá)式,可以用邏輯門實(shí)現(xiàn)該控制電路。
游戲中,一方贏時(shí),其對應(yīng)的計(jì)數(shù)器要實(shí)現(xiàn)加1計(jì)數(shù)的功能,最多可實(shí)現(xiàn)9局5勝。在開始新的一輪比賽時(shí),能夠?qū)⒃瓉淼挠?jì)數(shù)清零??紤]到手勢一直保持著時(shí)不應(yīng)該連續(xù)計(jì)數(shù),只有在雙方均出新的手勢時(shí)才會(huì)有新的計(jì)數(shù),這里需利用手勢輸入信號和贏的一方的高電平信號一起進(jìn)行邏輯運(yùn)算產(chǎn)生計(jì)數(shù)脈沖信號,可以選一個(gè)帶有清零控制端的十進(jìn)制計(jì)數(shù)器,對計(jì)數(shù)脈沖進(jìn)行計(jì)數(shù)。清零控制端由Reset清零信號控制。
顯示譯碼器可以選擇CD4511或類似的集成譯碼器,將十進(jìn)制計(jì)數(shù)器的計(jì)數(shù)輸出譯碼為a、b、c、d、e、f、g信號輸出,以驅(qū)動(dòng)七段數(shù)碼顯示器顯示贏的局?jǐn)?shù)。
游戲仿真電路如圖2所示,當(dāng)前顯示的是甲乙2人有效比賽了3局,甲贏了2局,乙贏了1局的情況。
該方案將整個(gè)設(shè)計(jì)劃分為編碼模塊、比較控制模塊和計(jì)數(shù)譯碼顯示模塊3個(gè)部分。各模塊的設(shè)計(jì)思路與數(shù)字電路集成元件設(shè)計(jì)時(shí)思路一樣。
編碼模塊Encoder根據(jù)甲或者乙輸入不同的手勢編碼為不同的2位二進(jìn)制碼;比較控制模塊Comparator用于比較編碼模塊的二進(jìn)制碼輸出,以產(chǎn)生甲或者乙的輸贏輸出信號以驅(qū)動(dòng)發(fā)光二極管顯示及數(shù)碼管計(jì)數(shù);計(jì)數(shù)譯碼顯示模塊Counter_Decoder實(shí)現(xiàn)對每一局贏的輸出信號進(jìn)行加計(jì)數(shù),然后譯碼驅(qū)動(dòng)數(shù)碼管顯示贏的局?jǐn)?shù)。
整個(gè)設(shè)計(jì)在FPGA開發(fā)軟件Quartus Ⅱ中完成。這里根據(jù)各模塊的工作原理在Quartus Ⅱ中用硬件描述語言分別描述各模塊的功能,編譯每個(gè)模塊且單獨(dú)仿真正確后,在每個(gè)模塊對應(yīng)的硬件描述語言代碼下,利用File下拉菜單的Create Symbol Files for Current File分別創(chuàng)建Encoder、 Comparator、Counter_Decoder3個(gè)模塊的原理圖。再利用原理圖輸入方式或者用元件例化語句將各模塊連接起來,實(shí)現(xiàn)整個(gè)系統(tǒng)的設(shè)計(jì)。若利用頂層原理圖輸入方式,則需在頂層工程中新建Block Diagram/Schematic File,通過添加Encoder、Comparator、Counter_Decoder 3個(gè)模塊的原理圖并連接起來實(shí)現(xiàn)整個(gè)游戲的頂層設(shè)計(jì)。若利用元件例化語句,則需在頂層工程中新建硬件描述語言文件,利用Component元件聲明語句和port map元件例化語句對3個(gè)模塊進(jìn)行調(diào)用并連接,以實(shí)現(xiàn)整個(gè)游戲的頂層設(shè)計(jì)。
在整體設(shè)計(jì)編譯仿真正確后,則可通過Tools下拉菜單中的Programmer下載到FPGA開發(fā)板或試驗(yàn)箱上驗(yàn)證系統(tǒng)的功能。
采用原理圖輸入方式構(gòu)成的系統(tǒng)頂層模塊原理圖如圖3所示。Encoder編碼模塊中,R、S、P分別代表其中一方的石頭、剪刀、布手勢的輸入,Reset代表清零控制輸入,Y1、Y0代表一方的手勢輸入編碼后的2位二進(jìn)制碼輸出。Comparator比較模塊中,A1、A0和B1、B0分別代表甲乙雙方手勢輸入編碼后的輸入,LEDA和LEDB分別代表指示甲乙輸贏的燈輸出。Counter_Decoder r計(jì)數(shù)譯碼顯示模塊所有輸入信號按名稱與前面2個(gè)模塊一致,輸出信號a、b、c、d、e、f、g對應(yīng)驅(qū)動(dòng)數(shù)碼管的七段,用于顯示其中一方贏的局?jǐn)?shù)。連接這些子模塊,并添加連接FPGA外部的撥碼開關(guān)或按鍵的輸入端口信號,以及添加連接FPGA外部的LED燈和數(shù)碼管的輸出端口信號,則可實(shí)現(xiàn)系統(tǒng)的頂層模塊設(shè)計(jì)。
圖3 系統(tǒng)頂層原理圖
筆者基于創(chuàng)新試驗(yàn)案例設(shè)計(jì)了石頭剪刀布模擬游戲,分別采用了數(shù)字電路集成元件和新型的FPGA可編程技術(shù)2種設(shè)計(jì)方法實(shí)現(xiàn)。分別詳細(xì)介紹了數(shù)字集成元件和FPGA設(shè)計(jì)的整個(gè)過程,給出了Proteus軟件仿真結(jié)果和FPGA設(shè)計(jì)實(shí)現(xiàn)結(jié)果。結(jié)果表明,該游戲設(shè)計(jì)思路合理,可以實(shí)現(xiàn)2人之間10局以內(nèi)的石頭剪刀布模擬游戲。該試驗(yàn)案例在2016年獲得了全國電工電子實(shí)驗(yàn)案例設(shè)計(jì)競賽二等獎(jiǎng)。
石頭剪刀布模擬游戲設(shè)計(jì)過程雖然比較簡單,但重在內(nèi)容新穎、設(shè)計(jì)過程完整、系統(tǒng)性、可擴(kuò)展性強(qiáng),非常適合作為學(xué)生的數(shù)字系統(tǒng)試驗(yàn)案例。該案例還可以采用單片機(jī)實(shí)現(xiàn),增加液晶顯示、觸屏輸入或語音輸入等功能,以進(jìn)一步擴(kuò)展其設(shè)計(jì)。
[1]劉新磊.基于腦電信號的博弈決策預(yù)測方法研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2016.
[2]徐文娟,程玲,桑林,等.基礎(chǔ)試驗(yàn)案例教學(xué)的研究與實(shí)踐[J].價(jià)值工程,2016,35(33):181~183.
[3] Qin Hongying. Design of Innovative Digital Electronic Technology Experimental Case Teaching[J]. Journal of Electrical and Electronic Engineering, 2017,5(4):149~155.
[4] 佘新平.數(shù)字電路設(shè)計(jì)、仿真、測試[M].武漢:華中科技大學(xué)出版社,2010:7~33.