一種基于VC++程序的FPGA重配置方案設計
4 儀器驅(qū)動函數(shù)的設計
根據(jù)硬件設計,儀器驅(qū)動需將配置數(shù)據(jù)以長整型的形式發(fā)送,即32位。因為配置數(shù)據(jù)的長度為16位,所以發(fā)送數(shù)據(jù)時,每次要傳兩個數(shù),高16位和低16位分別放一個數(shù)。當應用程序打開.rpd文件時,應將其中配置數(shù)據(jù)流保存在數(shù)組ww[f]中,而反轉(zhuǎn)處理后得到的數(shù)據(jù)依然放在數(shù)組ww[f]中并覆蓋原來的數(shù)據(jù),然后根據(jù)公式(1)進行組合處理,以得到最終要發(fā)送的32位數(shù)據(jù)并保存在長整型數(shù)組comdata[f]中。數(shù)組comdata[j]中的每個數(shù)據(jù)實際上包含兩個配置數(shù)據(jù),第一個數(shù)放在高16位,第二個數(shù)放在低16位,依次類推。確定好數(shù)據(jù)后,便可以調(diào)用動態(tài)連接庫中的發(fā)送數(shù)據(jù)函數(shù)并發(fā)送給硬件。
comdata[j]=(ww[i]24)∣(ww[i+1]16)∣(ww[i+2]8)∣ww[i+3](1)
應用程序可以通過DeviceI/OControl ( )函數(shù)和WDM進行通信,DeviceI/OControl ( )既可以讀數(shù)據(jù),也可以寫數(shù)據(jù),常用于數(shù)據(jù)量較小的情況下。在軟件設計中,發(fā)送配置數(shù)據(jù)可通過調(diào)用DeviceI/OControl()完成。根據(jù)硬件要求,每次可下發(fā)1022個配置數(shù)據(jù)到cyclone (即循環(huán)發(fā)LONG型數(shù)據(jù)511次),然后由cyclone給DSP一個中斷信號,DSP接到中斷信號后,即進入中斷程序,開始接收配置數(shù)據(jù)。當應用程序調(diào)用發(fā)送數(shù)據(jù)函數(shù)時,可先確定要發(fā)送的配置數(shù)據(jù)大小,再計算發(fā)送的次數(shù)。為了盡可能的減小發(fā)送時間,有效完成數(shù)據(jù)的發(fā)送與配置,應在軟件設計中建立與底層硬件的握手聯(lián)系。用戶每發(fā)送1022個數(shù)據(jù)便進入等待狀態(tài),在等待期間,DSP可把接收到的數(shù)據(jù)轉(zhuǎn)化為EPCS所需要的配置數(shù)據(jù)流。當DSP處理完這段數(shù)據(jù)后,就給上層用戶發(fā)送一個握手信號,用戶接收到握手信號,便進入下一個1022的發(fā)送,如果最后一次發(fā)送的數(shù)據(jù)不夠1022個,則用0xFFFF補足1022個數(shù)據(jù),如此循環(huán)處理,直到數(shù)據(jù)發(fā)送完畢。發(fā)送完畢后,再給硬件繼續(xù)發(fā)送一個配置命令,DSP接到該命令后,又開始對cyclone進行配置,從而完成整個配置過程。圖4和圖5分別是配置數(shù)據(jù)和發(fā)送數(shù)據(jù)的軟件工作流程。
圖6為上位機配置控制界面,圖中給出了2片配置芯片的配置過程,這是采用Visual C++和NIMeasurement Studio聯(lián)合編程方式的標準用戶界面。其中Visual C++提供了友好的界面及用戶熟悉的Windows風格界面,并可以調(diào)用CVI中提供的控件庫和庫函數(shù)。
5 結(jié)束語
本文給出了一種基于VC++程序的FPGA可重配置的實現(xiàn)方案,該方案在配置過程中,用戶可以通過調(diào)用自己的邏輯配置文件和程序來完成處理轉(zhuǎn)換,并控制下載,從而實現(xiàn)用戶系統(tǒng)的FPGA在系統(tǒng)編程。該方法可有效提高系統(tǒng)配置的效率,并為產(chǎn)品的升級、重構(gòu),以及用戶產(chǎn)品二次開發(fā)提供了良好手段。此外,借助互聯(lián)網(wǎng)技術(shù),本設計還可以支持遠程下載功能。
評論