基于FPGA的乒乓球游戲的設計與實(shí)現
代碼分析:
每當輸入時(shí)鐘clk_in變化時(shí)進(jìn)程被觸發(fā)。在進(jìn)程中,每一個(gè)時(shí)鐘上升沿計數器變量c0dutytmp加一,在一個(gè)周期內,計數器小于預設值時(shí)輸出低電平,大于預設值時(shí)輸出高電平。在設計中,我選用的預設值為8位,所以在0到255之間給定任意一個(gè)數作為輸入就可以設置它的占空比。占空比。而通過(guò)SOPCbuilder生成的SOPC控制c0duty便可以間接控制其占空比。以上代碼完成了一條通道的控制,另一個(gè)數據通道方法類(lèi)似。
3.2直流信號生成方法
生成直流信號的方法很多。在此論述幾種常見(jiàn)方法。
第一種是通過(guò)D/A芯片。市場(chǎng)上D/A芯片較多,如DAC0832,DAC0809等。這種方法原理簡(jiǎn)單,只需給定恒定的數字值便可以輕松控制輸出直流波形的電壓值。出于成本考慮,我們轉而另一種方法。
第二種方法是低通濾波法。例如當方波占空比為100%時(shí)可當作是直流高電平信號。而占空比為0表示零電平。將一定占空比的直流信號經(jīng)過(guò)低通濾波器,經(jīng)過(guò)計算可知占空比對于輸出信號的電平高低成線(xiàn)性關(guān)系。所以我們可以利用這點(diǎn)來(lái)完成電平控制。
3.3擊球控制
運用單片機與FPGA實(shí)驗板之間的通訊完成擊球命令的傳遞。常見(jiàn)的通訊方法:串口通訊和并口通訊。
并口通訊雖然使用簡(jiǎn)單,但是速度較慢,占用管腳較多,實(shí)現功能受到位數限制,可以完成的指令較少。于是利用串口通訊。在Quartus軟件下運行SOPCBuilder生成SOPC并為其添加UART功能。設置波特率為9600。利用SOPC的txd和rxd兩個(gè)端口與單片機的串口端相連接。于是便可以在程序中加入串口接收中斷并且在中斷服務(wù)函數中完成大量工作。以下編碼全部用C語(yǔ)言完成。
SOPC內部中斷服務(wù)函數:
評論