基于FPGA的高速訪問USB設(shè)備設(shè)計(jì)
1.3.2 應(yīng)用程序設(shè)計(jì)
本文引用地址:http://butianyuan.cn/article/263272.htm本方案通過Linux系統(tǒng)的熱插拔機(jī)制自動(dòng)啟動(dòng)應(yīng)用程序。在U盤插入USB接口后,Linux系統(tǒng)自動(dòng)加載USB驅(qū)動(dòng)和FPGA驅(qū)動(dòng)并啟動(dòng)應(yīng)用程序。應(yīng)用程序流程如圖5所示。
運(yùn)行應(yīng)用程序時(shí),通過設(shè)置參數(shù)能使應(yīng)用程序讀取U盤、移動(dòng)硬盤甚至網(wǎng)絡(luò)上的文件,使方案具有很高的靈活性。應(yīng)用程序使用了多線程技術(shù)來充分利用系統(tǒng)資源,使用兩個(gè)線程分別實(shí)現(xiàn)從U盤讀取數(shù)據(jù)存入緩沖區(qū)的過程和將緩沖區(qū)內(nèi)的數(shù)據(jù)傳輸至FPGA的過程。在讀取線程或?qū)懭刖€程中,可以加入數(shù)據(jù)處理代碼實(shí)現(xiàn)數(shù)據(jù)的預(yù)處理,減少FPGA工作量。應(yīng)用程序分配了多個(gè)緩沖區(qū)提高性能,并使用了互斥鎖實(shí)現(xiàn)讀取線程與傳輸線程間的線程同步,確保數(shù)據(jù)正確傳輸。
1.4 ARM向FPGA傳輸數(shù)據(jù)設(shè)計(jì)
本方案在FPGA中實(shí)現(xiàn)一個(gè)異步RAM,其使用乒乓機(jī)制接收來自ARM處理器的數(shù)據(jù),同時(shí)需要將異步RAM中的數(shù)據(jù)寫入DDR 2存儲(chǔ)器。異步RAM內(nèi)部有兩個(gè)數(shù)據(jù)緩沖模塊。在乒乓機(jī)制中,兩個(gè)模塊分別執(zhí)行不同的任務(wù),當(dāng)模塊1接收數(shù)據(jù)來自ARM處理器的數(shù)據(jù)時(shí),模塊2將數(shù)據(jù)寫入DDR 2存儲(chǔ)器。當(dāng)兩個(gè)模塊的任務(wù)都完成后,交換模塊1和模塊2的任務(wù)。與現(xiàn)有方案相比,本方案FPGA無需配置外部芯片,所需開發(fā)量較小。
2 測試與分析
2.1 傳輸速率測試
此測試傳輸3個(gè)不同大小的文件,記錄數(shù)據(jù)傳輸時(shí)間,從而獲得數(shù)據(jù)傳輸速率。
測試結(jié)果如表1所列。
由表1可知,在傳輸速率測試中,測得的最高數(shù)據(jù)傳輸速率為47.6 Mbps,比現(xiàn)有方案如CY7C67300、CH376的數(shù)據(jù)傳輸速率高。在傳輸速率測試中,傳輸100 KB文件的傳輸速率與傳輸1 MB和1 GB文件的傳輸速率相比偏低,而傳輸1 MB和1 GB文件的傳輸速率則相差不大。原因?yàn)椋?/p>
①測試為先進(jìn)行計(jì)時(shí)后開始傳輸,存在一段時(shí)間未傳輸數(shù)據(jù)。
?、趹?yīng)用程序在傳輸開始前需要一段時(shí)間進(jìn)行初始化,存在一段時(shí)間未傳輸數(shù)據(jù)。
在后兩種測試中,以上兩種未傳輸數(shù)據(jù)的時(shí)間占總時(shí)間的比重較低,因此數(shù)據(jù)傳輸速率較高。
2.2 傳輸準(zhǔn)確率測試
此測試在FPGA內(nèi)實(shí)現(xiàn)一個(gè)比較器,比較異步RAM接收到的數(shù)據(jù)與比較器內(nèi)置數(shù)據(jù)是否一致,從而測試傳輸是否正確并確定正確率。經(jīng)測試,此方案在傳輸過程中無差錯(cuò)發(fā)生,傳輸正確率為100%。
結(jié)語
FPGA與ARM處理器相配合實(shí)現(xiàn)FPGA高速獲取U盤數(shù)據(jù)的方案,可以滿足FPGA高速讀取U盤數(shù)據(jù)的需求。在傳輸過程中無差錯(cuò),且具有良好的靈活性。本方案具有很高的實(shí)用價(jià)值。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
fpga相關(guān)文章:fpga是什么
linux相關(guān)文章:linux教程
評(píng)論