一種用于飛行器下傳數(shù)據(jù)處理的高速數(shù)據(jù)采集存儲(chǔ)系統(tǒng)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
0 引言
隨著遙感技術(shù)的發(fā)展,遙感圖像的分辨率也越來(lái)越高。飛行器上搭載的遙感成像設(shè)備也從過(guò)去的低分辨率向現(xiàn)在的高分辨率在轉(zhuǎn)變。遙感成像設(shè)備分辨率提高的同時(shí),也對(duì)飛行器的數(shù)據(jù)下傳鏈路提出了更高的帶寬要求。而相應(yīng)的地面數(shù)據(jù)接受設(shè)備,也需要具備對(duì)高速實(shí)時(shí)數(shù)據(jù)的存儲(chǔ)和處理能力。同樣在測(cè)試設(shè)備方面,為了對(duì)大容量存儲(chǔ)設(shè)備進(jìn)行高速數(shù)據(jù)的傳輸測(cè)試,相應(yīng)的地面檢測(cè)設(shè)備也應(yīng)該具備高速數(shù)據(jù)的輸出功能。因此,急需開發(fā)出具備高速實(shí)時(shí)數(shù)據(jù)接收和高速數(shù)據(jù)輸出功能的高速數(shù)據(jù)采集存儲(chǔ)系統(tǒng)。
從目前此類系統(tǒng)的技術(shù)指標(biāo)來(lái)看,往往只能達(dá)到100Mbps到150Mbps的數(shù)據(jù)接收和數(shù)據(jù)輸出功能。而根據(jù)目前的應(yīng)用需求來(lái)看,高速數(shù)據(jù)流的數(shù)據(jù)傳輸速率往往在200Mbps以上甚至達(dá)到300Mbps。對(duì)于這種高速數(shù)據(jù)流,目前的系統(tǒng)就難以連續(xù)無(wú)錯(cuò)的進(jìn)行存儲(chǔ)和處理,往往會(huì)因?yàn)閿?shù)據(jù)傳輸速率超過(guò)系統(tǒng)能處理的極限,導(dǎo)致出現(xiàn)丟失數(shù)據(jù)或者系統(tǒng)功能不正常,狀態(tài)不穩(wěn)定等問(wèn)題。
本文中介紹的高速數(shù)據(jù)采集存儲(chǔ)系統(tǒng)的設(shè)計(jì)目標(biāo)就是對(duì)傳輸速率最高為300Mbps的數(shù)據(jù)流進(jìn)行無(wú)錯(cuò)接收存儲(chǔ),并能實(shí)現(xiàn)最高為300Mbps的高速數(shù)據(jù)流輸出,以便于對(duì)大容量存儲(chǔ)設(shè)備進(jìn)行檢測(cè)。
1 系統(tǒng)總體介紹
高速數(shù)據(jù)采集存儲(chǔ)系統(tǒng)是在32位的計(jì)算機(jī)系統(tǒng)上實(shí)現(xiàn)的,數(shù)據(jù)傳輸也是利用32位,33MHz的PCI總線來(lái)完成。數(shù)據(jù)存儲(chǔ)是利用兩塊SATA接口的硬盤組成的RAID0磁盤陣列來(lái)實(shí)現(xiàn)的。整個(gè)系統(tǒng)的核心是數(shù)據(jù)傳輸接口卡,它完成外部數(shù)據(jù)到計(jì)算機(jī)內(nèi)存的傳輸。然后運(yùn)行的驅(qū)動(dòng)程序再將內(nèi)存中的數(shù)據(jù)存儲(chǔ)到硬盤上。因此,整個(gè)系統(tǒng)的設(shè)計(jì)也就分為數(shù)據(jù)傳輸接口卡的設(shè)計(jì)和驅(qū)動(dòng)及應(yīng)用程序設(shè)計(jì)兩大部分。
2 數(shù)據(jù)傳輸接口卡設(shè)計(jì)
數(shù)據(jù)傳輸接口卡從功能上分為PCI總線接口,存儲(chǔ)緩沖區(qū),中斷模塊,傳輸控制模塊,緩沖區(qū)控制以及DMA控制六個(gè)模塊,如圖2-1中所示。當(dāng)工作于數(shù)據(jù)輸入時(shí),傳輸控制模塊根據(jù)緩沖區(qū)情況啟動(dòng)傳輸,傳輸過(guò)程中緩沖區(qū)控制模塊將數(shù)據(jù)讀出送到PCI總線上,DMA控制模塊控制著PCI總線上數(shù)據(jù)傳輸?shù)倪M(jìn)行。傳輸結(jié)束以后,中斷模塊發(fā)出中斷信號(hào)提示驅(qū)動(dòng)程序?qū)鬏數(shù)絻?nèi)存中的數(shù)據(jù)進(jìn)行處理。下面主要介紹PCI總線接口模塊,DMA控制模塊,存儲(chǔ)緩沖區(qū)模塊以及傳輸控制模塊幾個(gè)核心模塊的設(shè)計(jì)。
500)this.style.width=500;" border="0" />
2.1 PCI總線接口模塊的設(shè)計(jì)
PCI總線接口模塊完成的工作主要是PCI總線命令的解碼,地址以及數(shù)據(jù)的鎖存。實(shí)現(xiàn)PCI接口常用的方法是采用現(xiàn)成的PCI總線接口協(xié)議芯片(PLX905X系列等),如文獻(xiàn)[2]中數(shù)據(jù)采集板的設(shè)計(jì)就是采用的這種方法。但是由于這些協(xié)議芯片往往不是針對(duì)空間應(yīng)用而專門開發(fā)的,從可靠性方面考慮,不能采用這種設(shè)計(jì)方案。在本方案中,整個(gè)接口的設(shè)計(jì)是在使用Xilinx公司提供的LogiCORE PCI v3.0的IP核(IP Core)的基礎(chǔ)上實(shí)現(xiàn)的。LogiCORE PCI v3.0是Xilinx公司提供的用于PCI總線接口設(shè)計(jì)的IP 核,在它的基礎(chǔ)上可以根據(jù)實(shí)際應(yīng)用的需要很方便的定制和實(shí)現(xiàn)PCI總線接口。由于IP 核本身實(shí)現(xiàn)了配置空間以及總線命令的解碼和地址的鎖存,所以設(shè)計(jì)者只需要專注于PCI傳輸狀態(tài)機(jī)和本地控制信號(hào)的設(shè)計(jì)。采用這種實(shí)現(xiàn)方式雖然比直接使用PCI接口專用芯片更為復(fù)雜,但是整個(gè)設(shè)計(jì)可以集成于一片高可靠性的FPGA之中,從而有效的提高了整個(gè)設(shè)計(jì)的可靠性。
2.2 DMA控制模塊的設(shè)計(jì)
為了滿足高速率數(shù)據(jù)傳輸?shù)男枰?,并且在?shù)據(jù)傳輸?shù)耐瑫r(shí)不占用CPU,所以必須采用DMA的方式來(lái)傳輸數(shù)據(jù)。由于PCI總線上的DMA傳輸是通過(guò)PCI設(shè)備本身的DMA控制功能來(lái)完成的,而不是依靠總線上單獨(dú)的DMA控制設(shè)備來(lái)實(shí)現(xiàn),所以在設(shè)計(jì)時(shí)必須實(shí)現(xiàn)DMA控制模塊。DMA控制模塊在數(shù)據(jù)傳輸周期發(fā)出控制命令以及更新地址。其中傳輸?shù)刂房刂瓶梢砸蕾囈唤M傳輸?shù)刂芳拇嫫鱽?lái)實(shí)現(xiàn),而傳輸?shù)目刂瓶梢酝ㄟ^(guò)PCI傳輸狀態(tài)機(jī)給出的信號(hào)來(lái)產(chǎn)生控制信號(hào)。
2.3 存儲(chǔ)緩沖區(qū)模塊的設(shè)計(jì)
為了保證數(shù)據(jù)的連續(xù)不間斷傳輸,每次傳輸只傳輸半個(gè)緩沖區(qū)的數(shù)據(jù),而外部數(shù)據(jù)總是在兩個(gè)半?yún)^(qū)之間切換儲(chǔ)存,因此不會(huì)造成數(shù)據(jù)的丟失和不連續(xù)。
一個(gè)典型的PCI總線上的寫數(shù)據(jù)傳輸時(shí)序如圖2-2中所示。首先用于傳輸?shù)臄?shù)據(jù)必須要提前從本地的緩沖區(qū)中讀出,然后出現(xiàn)在總線AD信號(hào)線上,當(dāng)IRDY信號(hào)和TRDY信號(hào)同時(shí)有效時(shí)(為低電平時(shí)),被目標(biāo)設(shè)備獲取。當(dāng)傳輸結(jié)束時(shí),最后一個(gè)從本地緩沖區(qū)中預(yù)讀出的數(shù)據(jù)(如圖中陰影的數(shù)據(jù)3),并不會(huì)被傳輸?shù)侥繕?biāo)設(shè)備。而本地的緩沖區(qū)控制模塊會(huì)認(rèn)為數(shù)據(jù)已經(jīng)傳輸,這時(shí)如果不采取措施就會(huì)導(dǎo)致數(shù)據(jù)丟失。
500)this.style.width=500;" border="0" />
在傳輸結(jié)束的時(shí)候,PCI總線傳輸狀態(tài)機(jī)會(huì)切換到備份數(shù)據(jù)的狀態(tài),在這個(gè)狀態(tài)下,緩沖區(qū)的控制模塊會(huì)檢測(cè)是否存在已經(jīng)讀出而未傳輸?shù)臄?shù)據(jù),如果存在這樣的情況,控制模塊則采取措施防止數(shù)據(jù)丟失。對(duì)于雙口RAM這種存儲(chǔ)結(jié)構(gòu)而言,數(shù)據(jù)讀出以后,只要沒(méi)有在同一地址寫入數(shù)據(jù),那么數(shù)據(jù)是不會(huì)丟失的,因此要實(shí)現(xiàn)前面的功能只需要簡(jiǎn)單的修改一下讀指針目前指向的地址就可以實(shí)現(xiàn)。
2.4 傳輸控制模塊的設(shè)計(jì)
傳輸控制模塊的核心是一個(gè)傳輸控制狀態(tài)機(jī)。它通過(guò)檢測(cè)存儲(chǔ)緩沖區(qū)的情況,來(lái)控制傳輸?shù)倪M(jìn)行。當(dāng)輸入緩沖區(qū)中數(shù)據(jù)存儲(chǔ)滿或輸出緩沖區(qū)空以后,自動(dòng)請(qǐng)求一次數(shù)據(jù)傳輸,由此保證數(shù)據(jù)流的連續(xù)。
3 驅(qū)動(dòng)與應(yīng)用程序的開發(fā)
驅(qū)動(dòng)程序的開發(fā)是采用標(biāo)準(zhǔn)的WDM(Windows Driver Model)設(shè)備驅(qū)動(dòng)程序模型,利用DriverStudio的驅(qū)動(dòng)程序開發(fā)工具包來(lái)進(jìn)行開發(fā)的。關(guān)于WDM的驅(qū)動(dòng)程序模型,限于篇幅的原因就不作詳細(xì)的介紹。
一個(gè)典型的數(shù)據(jù)傳輸過(guò)程是這樣進(jìn)行的。首先驅(qū)動(dòng)程序完成設(shè)備的初始化,如在內(nèi)存中開辟緩沖區(qū),硬件設(shè)備的初始化等等。完成初始化以后硬件就處于等待傳輸?shù)臓顟B(tài)。當(dāng)用戶通過(guò)應(yīng)用程序發(fā)出傳輸數(shù)據(jù)的指令以后,驅(qū)動(dòng)程序處理這一請(qǐng)求,并對(duì)硬件發(fā)出指令開始數(shù)據(jù)傳輸。由于數(shù)據(jù)傳輸?shù)臅r(shí)間可能比較長(zhǎng),所以應(yīng)用程序采用多線程的設(shè)計(jì),傳輸線程會(huì)等待驅(qū)動(dòng)程序在傳輸結(jié)束時(shí)發(fā)出的信號(hào),而同時(shí)應(yīng)用程序還能完成與用戶的交互工作。當(dāng)傳輸結(jié)束后,驅(qū)動(dòng)程序向硬件寫入停止指令,中止傳輸,并向應(yīng)用程序發(fā)出傳輸結(jié)束信號(hào)。驅(qū)動(dòng)程序?qū)?yīng)用程序的通信是通過(guò)創(chuàng)建Win32事件來(lái)實(shí)現(xiàn)通信的。
4 設(shè)計(jì)的仿真和驗(yàn)證
為了驗(yàn)證設(shè)計(jì)的正確性,首先需要對(duì)設(shè)計(jì)進(jìn)行邏輯功能仿真。為了驗(yàn)證設(shè)計(jì)是否能正常的工作在PCI總線上,那么就需要仿真PCI總線上的各種總線事務(wù),驗(yàn)證設(shè)計(jì)是否能響應(yīng)各種總線命令。仿真是在Xilinx公司提供的PCI總線接口仿真實(shí)例的基礎(chǔ)上實(shí)現(xiàn)的。按照PCI總線規(guī)范設(shè)計(jì)了一個(gè)簡(jiǎn)單的總線仲裁器,用來(lái)仿真主設(shè)備申請(qǐng)總線占用的過(guò)程。此外還設(shè)計(jì)了一個(gè)PCI總線上的從設(shè)備,用來(lái)仿真主設(shè)備與從設(shè)備之間的數(shù)據(jù)傳輸過(guò)程。此外還仿真了總線上對(duì)設(shè)備的自動(dòng)配置過(guò)程。通過(guò)觀察仿真波形圖,發(fā)現(xiàn)設(shè)計(jì)完全滿足PCI總線的數(shù)據(jù)傳輸規(guī)范,而且數(shù)據(jù)傳輸?shù)慕Y(jié)果正確。
在仿真驗(yàn)證正確的基礎(chǔ)上,將設(shè)計(jì)實(shí)現(xiàn)于Xilinx公司型號(hào)為virtexII2v1000-fg456-5的FPGA中。將數(shù)據(jù)接口卡安裝于測(cè)試計(jì)算機(jī)上,利用數(shù)據(jù)接口卡的自回路數(shù)據(jù)傳輸功能以及單向輸入輸出功能,對(duì)系統(tǒng)進(jìn)行了驗(yàn)證和性能測(cè)試,結(jié)果如表格1中所示。
從結(jié)果可以看出,當(dāng)輸入輸出速率保持在160Mbps以下時(shí),可以保證自身回路數(shù)據(jù)傳輸無(wú)錯(cuò)進(jìn)行,但是當(dāng)速率提高到200Mbps以后,傳輸就會(huì)出現(xiàn)數(shù)據(jù)丟失,導(dǎo)致接收的數(shù)據(jù)與發(fā)送數(shù)據(jù)不一致。因此,為了保證數(shù)據(jù)的無(wú)錯(cuò)傳輸,自身回路數(shù)據(jù)傳輸測(cè)試速率應(yīng)該不高于160Mbps。
500)this.style.width=500;" border="0" />
單向輸入輸出測(cè)試時(shí),當(dāng)輸入速率或者輸出速率小于300Mbps,系統(tǒng)的功能是完全正確的,而當(dāng)工作于400Mbps的時(shí)候,則會(huì)出現(xiàn)數(shù)據(jù)丟失的情況。與自身回路傳輸測(cè)試的數(shù)據(jù)比較可以看出,當(dāng)在自身回路數(shù)據(jù)傳輸測(cè)試速率為200Mbps的時(shí)候,由于此時(shí)系統(tǒng)接收和輸出同時(shí)進(jìn)行,共同分時(shí)使用總線,此時(shí)相當(dāng)于單獨(dú)接收或者單獨(dú)輸出測(cè)試時(shí)400Mbps的傳輸速率。兩次測(cè)試結(jié)果的一致性也說(shuō)明了測(cè)試的可靠性。
5 結(jié)語(yǔ)
通過(guò)對(duì)系統(tǒng)的測(cè)試驗(yàn)證,證明了本設(shè)計(jì)能夠完全滿足高速實(shí)時(shí)數(shù)據(jù)流對(duì)數(shù)據(jù)采集存儲(chǔ)系統(tǒng)的要求。為了方便以后進(jìn)一步的工作,在測(cè)試時(shí)也對(duì)緩沖區(qū)大小和傳輸速率之間的關(guān)系進(jìn)行了簡(jiǎn)單的測(cè)試。將緩沖區(qū)大小從8KB改變到16KB以后,傳輸速率只是稍微有些提高,對(duì)性能的改善十分不明顯。結(jié)果說(shuō)明簡(jiǎn)單的擴(kuò)大硬件緩沖區(qū)并不會(huì)帶來(lái)數(shù)據(jù)傳輸速率的明顯改觀,同時(shí)還會(huì)占用FPGA內(nèi)部寶貴的RAM資源。究其原因在于,數(shù)據(jù)傳輸速率主要受到32位/33MHzPCI總線帶寬自身的限制,以及硬盤讀寫的峰值速率的限制,而并不是緩沖區(qū)大小的影響??梢灶A(yù)見如果采用64位/66MHz的PCI總線并采用更多的磁盤來(lái)構(gòu)成RAID磁盤陣列以提高磁盤讀寫速率,那么整體的性能會(huì)有很大的提升。