覃洪英 (長江大學電子信息學院,電工電子國家級試驗教學示范中心(長江大學),湖北 荊州 434023)
石頭剪刀布游戲廣泛應用于人們生活的選擇決策中,甚至有學者通過研究石頭剪刀布游戲來演化博弈論[1]。受全國創新試驗案例設計要求的啟發,筆者設計了一個簡易的石頭剪刀布游戲,以模擬生活中2個人通過石頭剪刀布的手勢比較進行決策。采用Proteus軟件仿真用數字電路集成元件和FPGA可編程技術2種方式實現游戲設計,利用2種設計方法體現數字系統設計的不同手段,感受Proteus仿真的直觀性和現場可編程門陣列FPGA設計的編程修改方便、實現簡單的特性。該項目的參考資料比較少,更易于激發學生的主動性和創造性,利用游戲項目的設計過程引導學生綜合運用所學知識解決實際的問題,掌握系統的設計方法[2]。

圖1 系統模塊圖
設計一個簡易的石頭剪刀布游戲,以模擬生活中2個人通過石頭剪刀布的手勢比較輸贏[3]。主要任務如下:①以6個撥碼開關或者按鍵分別表示甲乙雙方的石頭、剪刀和布3個手勢,利用編碼器分別將甲乙不同的手勢輸入,編碼為2位二進制碼輸出,設計比較控制電路比較2組2位二進制編碼,各用一個發光二極管指示甲乙雙方的輸贏,發光二極管亮的一方贏,不亮的一方輸,雙方的發光二級管都不亮表示平局或者沒有比試;②設計要求能用數碼管顯示甲乙雙方各自贏的局數,該模擬游戲至少能實現五局三贏的功能;③設計的電路要具有局數清零的功能,以便進行下一輪的比試;④分別用數字電路集成元件和FPGA現場可編程門陣列2種方式實現。
根據游戲設計規則設計整個系統模塊如圖1所示。系統主要包括甲乙2人代表手勢的按鍵輸入的編碼電路,2人手勢輸贏比較控制電路,用于指示當次輸贏的發光二極管顯示電路,用于手勢按鍵按下且當局一方贏時控制計數器加1的計數控制電路,并將計數的結果利用顯示譯碼器譯碼后用七段數碼管顯示。

表1 編碼電路功能表
AR、AS、AP分別代表游戲中甲的石頭、剪刀、布3種手勢,在試驗中用3個按鍵或3個撥碼開關表示。BR、BS、BP分別代表游戲中乙的石頭、剪刀、布3種手勢,在試驗中用另外3個按鍵或3個撥碼開關表示。Reset是整個電路的編碼和計數清零信號輸入,高電平有效清零,試驗中用一個撥碼開關表示。甲輸入的編碼電路功能表如表1所示,手勢輸入低電平有效。乙輸入的編碼電路設計與甲輸入的情況完全一樣。乙輸入時手勢輸入為BR、BS、BP,編碼輸出為B1和B0。
該電路可以用8線-3線編碼器74LS148和非門電路實現,也可以用類似的編碼器實現。Reset作為編碼器的使能信號。

表2 比較控制電路功能表
通過比較甲乙2人手勢的不同編碼A1、A0和B1、B0,產生驅動2個發光二極管顯示的控制信號LEDA和LEDB。當控制信號為高電平時,其所連接的發光二極管亮,當控制信號為低電平時,其所連接的發光二極管滅。當甲贏乙輸時,LEDA為高電平,LEDB為低電平;當甲輸乙贏時,LEDA為低電平,LEDB為高電平;當甲乙平局時,LEDA和LEDB均為低電平,只要一方沒有有效輸入時,LEDA和LEDB也均為低電平。比較控制電路功能表如表2所示。
由功能表可以得到LEDA和LEDB的函數表達式,可以用邏輯門實現該控制電路。
游戲中,一方贏時,其對應的計數器要實現加1計數的功能,最多可實現9局5勝。在開始新的一輪比賽時,能夠將原來的計數清零。考慮到手勢一直保持著時不應該連續計數,只有在雙方均出新的手勢時才會有新的計數,這里需利用手勢輸入信號和贏的一方的高電平信號一起進行邏輯運算產生計數脈沖信號,可以選一個帶有清零控制端的十進制計數器,對計數脈沖進行計數。清零控制端由Reset清零信號控制。
顯示譯碼器可以選擇CD4511或類似的集成譯碼器,將十進制計數器的計數輸出譯碼為a、b、c、d、e、f、g信號輸出,以驅動七段數碼顯示器顯示贏的局數。
游戲仿真電路如圖2所示,當前顯示的是甲乙2人有效比賽了3局,甲贏了2局,乙贏了1局的情況。
該方案將整個設計劃分為編碼模塊、比較控制模塊和計數譯碼顯示模塊3個部分。各模塊的設計思路與數字電路集成元件設計時思路一樣。
編碼模塊Encoder根據甲或者乙輸入不同的手勢編碼為不同的2位二進制碼;比較控制模塊Comparator用于比較編碼模塊的二進制碼輸出,以產生甲或者乙的輸贏輸出信號以驅動發光二極管顯示及數碼管計數;計數譯碼顯示模塊Counter_Decoder實現對每一局贏的輸出信號進行加計數,然后譯碼驅動數碼管顯示贏的局數。
整個設計在FPGA開發軟件Quartus Ⅱ中完成。這里根據各模塊的工作原理在Quartus Ⅱ中用硬件描述語言分別描述各模塊的功能,編譯每個模塊且單獨仿真正確后,在每個模塊對應的硬件描述語言代碼下,利用File下拉菜單的Create Symbol Files for Current File分別創建Encoder、 Comparator、Counter_Decoder3個模塊的原理圖。再利用原理圖輸入方式或者用元件例化語句將各模塊連接起來,實現整個系統的設計。若利用頂層原理圖輸入方式,則需在頂層工程中新建Block Diagram/Schematic File,通過添加Encoder、Comparator、Counter_Decoder 3個模塊的原理圖并連接起來實現整個游戲的頂層設計。若利用元件例化語句,則需在頂層工程中新建硬件描述語言文件,利用Component元件聲明語句和port map元件例化語句對3個模塊進行調用并連接,以實現整個游戲的頂層設計。
在整體設計編譯仿真正確后,則可通過Tools下拉菜單中的Programmer下載到FPGA開發板或試驗箱上驗證系統的功能。
采用原理圖輸入方式構成的系統頂層模塊原理圖如圖3所示。Encoder編碼模塊中,R、S、P分別代表其中一方的石頭、剪刀、布手勢的輸入,Reset代表清零控制輸入,Y1、Y0代表一方的手勢輸入編碼后的2位二進制碼輸出。Comparator比較模塊中,A1、A0和B1、B0分別代表甲乙雙方手勢輸入編碼后的輸入,LEDA和LEDB分別代表指示甲乙輸贏的燈輸出。Counter_Decoder r計數譯碼顯示模塊所有輸入信號按名稱與前面2個模塊一致,輸出信號a、b、c、d、e、f、g對應驅動數碼管的七段,用于顯示其中一方贏的局數。連接這些子模塊,并添加連接FPGA外部的撥碼開關或按鍵的輸入端口信號,以及添加連接FPGA外部的LED燈和數碼管的輸出端口信號,則可實現系統的頂層模塊設計。

圖3 系統頂層原理圖
筆者基于創新試驗案例設計了石頭剪刀布模擬游戲,分別采用了數字電路集成元件和新型的FPGA可編程技術2種設計方法實現。分別詳細介紹了數字集成元件和FPGA設計的整個過程,給出了Proteus軟件仿真結果和FPGA設計實現結果。結果表明,該游戲設計思路合理,可以實現2人之間10局以內的石頭剪刀布模擬游戲。該試驗案例在2016年獲得了全國電工電子實驗案例設計競賽二等獎。
石頭剪刀布模擬游戲設計過程雖然比較簡單,但重在內容新穎、設計過程完整、系統性、可擴展性強,非常適合作為學生的數字系統試驗案例。該案例還可以采用單片機實現,增加液晶顯示、觸屏輸入或語音輸入等功能,以進一步擴展其設計。
[1]劉新磊.基于腦電信號的博弈決策預測方法研究[D].哈爾濱:哈爾濱工業大學,2016.
[2]徐文娟,程玲,桑林,等.基礎試驗案例教學的研究與實踐[J].價值工程,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] 佘新平.數字電路設計、仿真、測試[M].武漢:華中科技大學出版社,2010:7~33.