王振紅 王子龍 金曉文 蔡昕蘢 齊林 崔伯棟 張振佳 北方工業大學
USB2.0接口傳輸的FPGA控制系統
——由PC機控制8乘8點陣實現五子棋游戲
王振紅 王子龍 金曉文 蔡昕蘢 齊林 崔伯棟 張振佳 北方工業大學
Cypress公司生產的EZ-USB FX2LP系列CY7C68013A芯片的主要功能是通過USB口實現P C機與外部設備的通訊,并滿足USB2.0的通信要求。本系統可通過PC機的可執行程序產生數據,經由CY7C6801A3芯片傳輸至外設FPGA中,最終實現由PC端操作并由FPGA端顯示的五子棋游戲系統。
USB2.0;FPGA;CY7C68013A;串行接口
此系統為基于CY7C68013A芯片的數據交換系統,通過PC機的可執行程序,模擬五子棋游戲的真實環境。由PC端構建游戲數據,利用CY7C68013A芯片,將五子棋棋盤在FPGA連接的8×8點陣上顯示。PC機控制的五子棋游戲系統的結構圖如圖1.1所示。

圖1.1
本系統的FPGA部分,采用ALTERAEPM7128SLC84-15芯片。EPM7128系列是可編程的大規模邏輯器件,為ALTERA公司的MAX7000系列產品,具有高阻抗、掉電可存儲等特點,可用門單元為5000個,管腳間最大延遲為5ns,工作電壓為+5V。芯片內控制單元使用V H D L語言編寫。VHDL的程序結構特點是將一項工程設計,或稱設計實體(可以是一個元件,一個電路模塊或一個系統)分成外部(或稱可視部分及端口)和內部(或稱不可視部分)即涉及實體的內部功能和算法完成部分。

圖2.1 CY7C68013A與FPGA及8×8點陣連接框圖
CY7C68013A向PFGA傳輸12位邏輯矢量,在FPGA中轉換成3組8位邏輯矢量,其中兩組輸出GA7-0,RA7-0,一組輸出ROW IN7-0。通過24位邏輯矢量驅動8×8點陣顯示棋盤。CY7C68013A與FPGA及8×8點陣連接框圖如圖2.1所示。

圖2.2 VHDL外接紅綠雙色24管腳8×8LED燈點陣及驅動電路
ALTERA-EPM7128SLC84-15外接紅綠雙色24管腳8×8LED燈點陣及驅動電路如圖2.2所示。
CY7C68013A集成了USB 2.0收發器、SIE(串行接口引擎)、增強的8051微控制器以及可編程的外部接口。本系統采用CY7C68013A的SSOP封裝,其管腳如圖3.1所示。

圖3.1 CY7C68013A管腳
管腳PB7-0、PD3-0與FPGA連接,作為FPGA的輸入口;XTALIN、XTALOUT與24MHZ晶振連接,DPLUS、DMINUS與USB電纜線的D+、D-連接,其余管腳按Cypress官方所給的連接方法接線,這里不再贅述。
4.1 驅動程序:采用了CyPress公司的通用驅動程序ezusb.sys,完全能夠滿足本系統設計的要求。在驅動程序被系統加載后,它的許多進程處于Idle狀態,需要應用程序去調用激活。應用程序利用Win32API直接調用驅動程序,實現應用程序和驅動程序的信息交互。應用程序實現了數據下載和數據上傳兩個功能,在Windows操作系統中,只需要通過調用幾條簡單的文件操作API函數就可以實現與驅動程序中USB設備通信。
4.2 CY7C68013A:在CyPress公司的程序框架下添加自定義請求(PC機應用程序調用E Z-U S B的專用函數,可向CY7C68013A芯片發送請求,芯片接受請求后調用相應函數)讀取PC機數據,并向FPGA部分傳輸。
4.3 PC端應用程序的傳輸部分:向CY7C68013A發送請求。請求被響應后,每次由PC機向CY7C68013A發送數據,CY7C68013A自動接收并調用相應函數處理。
五子棋的棋具與圍棋相同,棋子分為黑白兩色,棋盤為15×15,棋子放置于棋盤線交叉點上。兩人對局,各執一色,輪流下一子,先將橫、豎或斜線的5個或5個以上同色棋子連成不間斷的一排者為勝。為了節約設備資源,用8×8雙色LED點陣作為外部設備代替15×15棋盤,并編寫了8×8五子棋的專用算法。由于FPGA的內存資源有限,數據存儲、處理程序用C語言程序實現,并以可執行文件的方式在PC機上運行,FPGA用于數據輸出。
5.1 游戲算法
1)棋盤:設 8×8無符號整數型數組a[8][8],數組中每一位代表棋盤的一個交叉點。數組的某位為0時,代表無子狀態;為1時,代表有紅子;為2時,代表有綠子。
2)光標:設定8×8無符號整數型數組i[8][8],與a[8][8]類似,光標指向某位時(以i[y][x]為例),按下落子鍵,若此位的數組a[y][x]為0,則將此位置為1或2。
3)按鈕上、下、左、右、紅落子、綠落子:在應用程序界面設定按鈕,完成改變光標位置、將a[x][y]置數的功能。
(4)判勝:每次落子后,用二維循環程序掃描棋盤a[8][8],出現橫、豎、斜連續5次為1或為2的情況,則在程序界面輸出勝利提示。
(5)數據整形、發送:設定無符號整數PD、PB,將PD、PB看作二進制數組,用循環語句控制PD在0x00至0x0F范圍內累加循環。PD的二進制最低位為0時,掃描a[PD/2][7]至a[PD/2][0]中1的個數與位置(掃描時額外添加算法語句,使光標數組i [x][y]即作為1判斷,也作為2判斷),以邏輯矢量的格式存入PB中;PD的二進制最低位為1時,掃描并在PB中保存2的個數與位置。每次改變PD,向CY7C68013A發送一次數據。
5.2 FPGA邏輯
將PD的最低位PD0作為顏色選擇信號,為0時,FPGA將PB寫入RA7-0,并將GA7-0置為低點平;為1時,寫入GA7-0,并將RA7-0置為低點平。PD3-1經過3-8線譯碼器、非門,與Row7-0連接,作為點陣行選擇線。
至此,已經形成了完整的由USB2.0接口傳輸的FPGA控制系統。根據不同的設計要求,編寫相應的應用程序與FPGA邏輯,可制成不同功能的傳輸系統。這里用五子棋游戲程序來驗證系統的可用性。事實證明,游戲程序在此系統之上運行良好無誤。
10.3969/j.issn.1001-8972.2011.20.033