一種用于飛行器下傳數(shù)據(jù)處理的高速數(shù)據(jù)采集存儲系
一個典型的PCI總線上的寫數(shù)據(jù)傳輸時序如圖2-2中所示。首先用于傳輸?shù)臄?shù)據(jù)必須要提前從本地的緩沖區(qū)中讀出,然后出現(xiàn)在總線AD信號線上,當(dāng)IRDY信號和TRDY信號同時有效時(為低電平時),被目標(biāo)設(shè)備獲取。當(dāng)傳輸結(jié)束時,最后一個從本地緩沖區(qū)中預(yù)讀出的數(shù)據(jù)(如圖中陰影的數(shù)據(jù)3),并不會被傳輸?shù)侥繕?biāo)設(shè)備。而本地的緩沖區(qū)控制模塊會認(rèn)為數(shù)據(jù)已經(jīng)傳輸,這時如果不采取措施就會導(dǎo)致數(shù)據(jù)丟失。
本文引用地址:http://m.butianyuan.cn/article/195557.htm
在傳輸結(jié)束的時候,PCI總線傳輸狀態(tài)機會切換到備份數(shù)據(jù)的狀態(tài),在這個狀態(tài)下,緩沖區(qū)的控制模塊會檢測是否存在已經(jīng)讀出而未傳輸?shù)臄?shù)據(jù),如果存在這樣的情況,控制模塊則采取措施防止數(shù)據(jù)丟失。對于雙口RAM這種存儲結(jié)構(gòu)而言,數(shù)據(jù)讀出以后,只要沒有在同一地址寫入數(shù)據(jù),那么數(shù)據(jù)是不會丟失的,因此要實現(xiàn)前面的功能只需要簡單的修改一下讀指針目前指向的地址就可以實現(xiàn)。
2.4 傳輸控制模塊的設(shè)計
傳輸控制模塊的核心是一個傳輸控制狀態(tài)機。它通過檢測存儲緩沖區(qū)的情況,來控制傳輸?shù)倪M(jìn)行。當(dāng)輸入緩沖區(qū)中數(shù)據(jù)存儲滿或輸出緩沖區(qū)空以后,自動請求一次數(shù)據(jù)傳輸,由此保證數(shù)據(jù)流的連續(xù)。
3 驅(qū)動與應(yīng)用程序的開發(fā)
驅(qū)動程序的開發(fā)是采用標(biāo)準(zhǔn)的WDM(Windows Driver Model)設(shè)備驅(qū)動程序模型,利用DriverStudio的驅(qū)動程序開發(fā)工具包來進(jìn)行開發(fā)的。關(guān)于WDM的驅(qū)動程序模型,限于篇幅的原因就不作詳細(xì)的介紹。
一個典型的數(shù)據(jù)傳輸過程是這樣進(jìn)行的。首先驅(qū)動程序完成設(shè)備的初始化,如在內(nèi)存中開辟緩沖區(qū),硬件設(shè)備的初始化等等。完成初始化以后硬件就處于等待傳輸?shù)臓顟B(tài)。當(dāng)用戶通過應(yīng)用程序發(fā)出傳輸數(shù)據(jù)的指令以后,驅(qū)動程序處理這一請求,并對硬件發(fā)出指令開始數(shù)據(jù)傳輸。由于數(shù)據(jù)傳輸?shù)臅r間可能比較長,所以應(yīng)用程序采用多線程的設(shè)計,傳輸線程會等待驅(qū)動程序在傳輸結(jié)束時發(fā)出的信號,而同時應(yīng)用程序還能完成與用戶的交互工作。當(dāng)傳輸結(jié)束后,驅(qū)動程序向硬件寫入停止指令,中止傳輸,并向應(yīng)用程序發(fā)出傳輸結(jié)束信號。驅(qū)動程序?qū)?yīng)用程序的通信是通過創(chuàng)建Win32事件來實現(xiàn)通信的。
4 設(shè)計的仿真和驗證
為了驗證設(shè)計的正確性,首先需要對設(shè)計進(jìn)行邏輯功能仿真。為了驗證設(shè)計是否能正常的工作在PCI總線上,那么就需要仿真PCI總線上的各種總線事務(wù),驗證設(shè)計是否能響應(yīng)各種總線命令。仿真是在Xilinx公司提供的PCI總線接口仿真實例的基礎(chǔ)上實現(xiàn)的。按照PCI總線規(guī)范設(shè)計了一個簡單的總線仲裁器,用來仿真主設(shè)備申請總線占用的過程。此外還設(shè)計了一個PCI總線上的從設(shè)備,用來仿真主設(shè)備與從設(shè)備之間的數(shù)據(jù)傳輸過程。此外還仿真了總線上對設(shè)備的自動配置過程。通過觀察仿真波形圖,發(fā)現(xiàn)設(shè)計完全滿足PCI總線的數(shù)據(jù)傳輸規(guī)范,而且數(shù)據(jù)傳輸?shù)慕Y(jié)果正確。
在仿真驗證正確的基礎(chǔ)上,將設(shè)計實現(xiàn)于Xilinx公司型號為virtexII2v1000-fg456-5的FPGA中。將數(shù)據(jù)接口卡安裝于測試計算機上,利用數(shù)據(jù)接口卡的自回路數(shù)據(jù)傳輸功能以及單向輸入輸出功能,對系統(tǒng)進(jìn)行了驗證和性能測試,結(jié)果如表格1中所示。
從結(jié)果可以看出,當(dāng)輸入輸出速率保持在160Mbps以下時,可以保證自身回路數(shù)據(jù)傳輸無錯進(jìn)行,但是當(dāng)速率提高到200Mbps以后,傳輸就會出現(xiàn)數(shù)據(jù)丟失,導(dǎo)致接收的數(shù)據(jù)與發(fā)送數(shù)據(jù)不一致。因此,為了保證數(shù)據(jù)的無錯傳輸,自身回路數(shù)據(jù)傳輸測試速率應(yīng)該不高于160Mbps。
單向輸入輸出測試時,當(dāng)輸入速率或者輸出速率小于300Mbps,系統(tǒng)的功能是完全正確的,而當(dāng)工作于400Mbps的時候,則會出現(xiàn)數(shù)據(jù)丟失的情況。與自身回路傳輸測試的數(shù)據(jù)比較可以看出,當(dāng)在自身回路數(shù)據(jù)傳輸測試速率為200Mbps的時候,由于此時系統(tǒng)接收和輸出同時進(jìn)行,共同分時使用總線,此時相當(dāng)于單獨接收或者單獨輸出測試時400Mbps的傳輸速率。兩次測試結(jié)果的一致性也說明了測試的可靠性。
5 結(jié)語
通過對系統(tǒng)的測試驗證,證明了本設(shè)計能夠完全滿足高速實時數(shù)據(jù)流對數(shù)據(jù)采集存儲系統(tǒng)的要求。為了方便以后進(jìn)一步的工作,在測試時也對緩沖區(qū)大小和傳輸速率之間的關(guān)系進(jìn)行了簡單的測試。將緩沖區(qū)大小從8KB改變到16KB以后,傳輸速率只是稍微有些提高,對性能的改善十分不明顯。結(jié)果說明簡單的擴大硬件緩沖區(qū)并不會帶來數(shù)據(jù)傳輸速率的明顯改觀,同時還會占用FPGA內(nèi)部寶貴的RAM資源。究其原因在于,數(shù)據(jù)傳輸速率主要受到32位/33MHzPCI總線帶寬自身的限制,以及硬盤讀寫的峰值速率的限制,而并不是緩沖區(qū)大小的影響??梢灶A(yù)見如果采用64位/66MHz的PCI總線并采用更多的磁盤來構(gòu)成RAID磁盤陣列以提高磁盤讀寫速率,那么整體的性能會有很大的提升。
評論