羅義軍,陳 松
(武漢大學(xué)電子信息學(xué)院,湖北武漢 430072)
超高速數(shù)據(jù)采集技術(shù)廣泛應(yīng)用在雷達(dá)測(cè)試、衛(wèi)星導(dǎo)航、激光、高速數(shù)據(jù)記錄回放、寬帶無(wú)線網(wǎng)絡(luò)通訊、頻率捷變無(wú)線通訊等多個(gè)領(lǐng)域[1-2]。傳統(tǒng)高速信號(hào)采集存儲(chǔ)系統(tǒng)主要分為基于PCIe總線計(jì)算機(jī)采集存儲(chǔ)系統(tǒng)、VPX架構(gòu)的SATA采集存儲(chǔ)系統(tǒng)和嵌入式采集存儲(chǔ)系統(tǒng)。本設(shè)計(jì)為基于PCIe總線計(jì)算機(jī)采集存儲(chǔ)系統(tǒng),在已有的系統(tǒng)架構(gòu)基礎(chǔ)上,實(shí)現(xiàn)了具有更加通用化、集成化、可擴(kuò)展的硬件架構(gòu),更加高速、高精度、可定制的多通道同步采集系統(tǒng),最終能實(shí)現(xiàn)最高達(dá)2 GB/s的傳輸速率和60 GB的數(shù)據(jù)存儲(chǔ)量,且具有非常穩(wěn)定的性能。
根據(jù)功能需求,整個(gè)系統(tǒng)架構(gòu)包括FPGA控制載板、AD數(shù)據(jù)采集子板和外部存儲(chǔ)板。其中FPGA控制載板包含AD數(shù)據(jù)采集模塊、數(shù)據(jù)處理???、DDR3數(shù)據(jù)緩存控制模塊、PCIe接口控制模塊、光口傳輸控制模塊。AD采集子板通過(guò)FMC接口與FPGA載板相連,外部存儲(chǔ)板通過(guò)光口與FPGA載板相連。系統(tǒng)整體組成如圖1所示。
圖1 整體系統(tǒng)架構(gòu)圖
整個(gè)數(shù)據(jù)采集存儲(chǔ)系統(tǒng)的基本工作流程為:采集子板上的ADC將采集到的信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)高速傳輸?shù)紽PGA,F(xiàn)PGA完成數(shù)據(jù)接收和處理,并根據(jù)需要采集的數(shù)據(jù)量將數(shù)據(jù)傳輸至DDR3緩存模塊進(jìn)行緩存,以備PCIe進(jìn)行少量采集數(shù)據(jù)上傳;或者通過(guò)光口傳輸至大容量SSD緩存模塊進(jìn)行緩存,上位機(jī)PC在數(shù)據(jù)緩存完畢后可按需通過(guò)PCIe接口將大容量SSD緩存模塊緩存的數(shù)據(jù)回傳到FPGA中再進(jìn)行上傳[3]。
AD采集子板通過(guò)FMC(FPGA mezzanine card)與FPGA載板相連。FMC不僅簡(jiǎn)化了I/O接口模塊設(shè)計(jì),同時(shí)還能最大化載卡的重復(fù)使用率,支持高達(dá)10 Gb/s 的信號(hào)傳輸速率,夾層卡和載卡之間潛在總帶寬達(dá)40 Gb/s。FMC標(biāo)準(zhǔn)有助于將現(xiàn)有的 FPGA載卡設(shè)計(jì)重新用到新的 I/O 上,而這只需更換 FMC 模塊并對(duì) FPGA 設(shè)計(jì)略作調(diào)整即可[4]。這樣,同一個(gè)FPGA載板可以通過(guò)子板的設(shè)計(jì)實(shí)現(xiàn)不同的擴(kuò)展功能,整個(gè)系統(tǒng)的應(yīng)用更加靈活。
系統(tǒng)設(shè)計(jì)為可定制擴(kuò)展的模式,即針對(duì)不同采樣信號(hào)選用不同AD芯片設(shè)計(jì)的數(shù)據(jù)采集子板,以滿(mǎn)足信號(hào)帶寬、通道數(shù)、量化位數(shù)的要求,兼顧系統(tǒng)的兼容性和通用性。 AD芯片基本參數(shù)見(jiàn)表1。
模擬輸入信號(hào)經(jīng)AD采樣后送到FPGA,經(jīng)FPGA內(nèi)部FIFO后寫(xiě)入DDR3緩存。上述4種種信號(hào)中的前3種采樣信號(hào)數(shù)據(jù)緩存結(jié)束后,控制相應(yīng)DDR3數(shù)據(jù)讀出。DDR3讀出數(shù)據(jù)進(jìn)行片內(nèi)FIFO緩存后,經(jīng)PCIe控制模塊的控制,由PCIe接口送到上位機(jī)。第四種采樣數(shù)據(jù)由于數(shù)據(jù)量大,采樣率高,無(wú)法將數(shù)據(jù)緩存在DDR3中,采樣的數(shù)據(jù)直接經(jīng)過(guò)FIFO和光口緩存到外部存儲(chǔ)板中,當(dāng)緩存完畢之后,上位機(jī)下發(fā)命令上傳數(shù)據(jù),再經(jīng)過(guò)光口將緩存的數(shù)據(jù)經(jīng)過(guò)FIFO和PCIe接口送到上位機(jī)。以AD芯片為ADS54J60的采集子板為例,整個(gè)數(shù)據(jù)采集、傳輸、存儲(chǔ)的實(shí)現(xiàn)機(jī)制流程圖如圖2。
圖2 總體流程圖
2.2.1 DDR3讀寫(xiě)模塊設(shè)計(jì)
當(dāng)需要的數(shù)據(jù)量較少,在DDR3的存儲(chǔ)內(nèi)存大小范圍內(nèi)時(shí),直接使用DDR3作為緩存。在DDR3的前級(jí)和后級(jí)各加一個(gè)FIFO,做到當(dāng)數(shù)據(jù)來(lái)時(shí),且前級(jí)WR_FIFO緩存到達(dá)一定程度,DDR3可以自動(dòng)將WR_FIFO的數(shù)據(jù)讀出并寫(xiě)入DDR3,當(dāng)DDR3檢測(cè)到后級(jí)RD_FIFO無(wú)數(shù)據(jù)為空并且DDR3的讀指針在寫(xiě)指針后面時(shí),DDR3能自動(dòng)讀出DDR3的一幀數(shù)據(jù)并寫(xiě)入到RD_FIFO中供后續(xù)模塊使用。DDR3讀寫(xiě)數(shù)據(jù)的控制流程如圖3所示。
圖3 DDR3讀寫(xiě)控制
無(wú)論是寫(xiě)入數(shù)據(jù)到DDR3還是從DDR3讀取數(shù)據(jù),均由上位機(jī)通過(guò)PCIe下行命令控制起止時(shí)刻。在存儲(chǔ)ADC采集數(shù)據(jù)至DDR3時(shí),上位機(jī)會(huì)先設(shè)定好本次需要存儲(chǔ)至DDR3的數(shù)據(jù)個(gè)數(shù),然后開(kāi)始將ADC的數(shù)據(jù)寫(xiě)入WR_FIFO,直到DDR3存儲(chǔ)夠了該個(gè)數(shù)的數(shù)據(jù)后,停止存儲(chǔ)。當(dāng)需要將數(shù)據(jù)從DDR3讀取至PCIe時(shí),不需要指定上傳數(shù)據(jù)個(gè)數(shù),僅需要將DDR3讀空即可,DDR3讀空后,便停止數(shù)據(jù)上傳至PCIe,完成本次數(shù)據(jù)上傳。當(dāng)然,F(xiàn)IFO的控制過(guò)程中還會(huì)遇到寫(xiě)滿(mǎn)和讀空的情況,需要進(jìn)一步地進(jìn)行控制。
2.2.2 PCIe接口設(shè)計(jì)
本文設(shè)計(jì)的高速數(shù)據(jù)采集板為3U PCIe板卡,因此在數(shù)字信號(hào)處理載板與工控機(jī)的交互使用PCIe接口。PCIe是高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn),使用端到端的連接方式,可以進(jìn)行高速串行點(diǎn)對(duì)地的雙通道高帶寬傳輸。PCle接口模塊是本系統(tǒng)設(shè)計(jì)中的關(guān)鍵模塊,用來(lái)實(shí)現(xiàn)采集板和上位機(jī)之間的高速數(shù)據(jù)傳輸和命令傳輸。
PCIe接口目前有3個(gè)版本,即PCIe1.0、PCIe2.0和PCIe3.0,各版本性能參數(shù)見(jiàn)表2。本次設(shè)計(jì)中采用PCIe2.0 x4接口,其可提供的鏈路帶寬為20 GT/s,滿(mǎn)足本文設(shè)計(jì)中與上位機(jī)的數(shù)據(jù)交互帶寬需求。
表2 PCIe各版本性能參數(shù)
XC7K325T芯片內(nèi)部集成了PCIe硬核模塊,在不占用額外邏輯資源的情況下便可完成高性能、高效率的PCIe接口設(shè)計(jì)。該 IP 核占用 FPGA 資源少、功耗低,包含有物理層、數(shù)據(jù)鏈路層和事務(wù)層。 如圖4所示,每一層都完成各自的功能,層與層之間有明確的分工,事務(wù)層與數(shù)據(jù)鏈路層負(fù)責(zé)將采集到的數(shù)據(jù)按批次組包,數(shù)據(jù)包在層與層之間傳遞時(shí)會(huì)附加對(duì)應(yīng)的校驗(yàn)和幀信息。在PCIe的硬核中已經(jīng)實(shí)現(xiàn)了物理層和數(shù)據(jù)鏈路層的設(shè)計(jì),將開(kāi)發(fā)周期中最復(fù)雜也最難調(diào)試的部分已經(jīng)簡(jiǎn)化,用戶(hù)在設(shè)計(jì)時(shí)僅需要完成事物層的交互和控制即可[5-6]。
圖4 PCIe接口結(jié)構(gòu)
2.2.3 光纖傳輸接口設(shè)計(jì)
在進(jìn)行數(shù)據(jù)采集時(shí),需要不間斷傳輸和存儲(chǔ)時(shí)間長(zhǎng)度為30 s的單通道高速高精度ADC采集數(shù)據(jù)。采樣時(shí)鐘為1 GHz的高速采集且數(shù)據(jù)精度很高,在30 s的時(shí)間內(nèi),AD單通道采集的數(shù)據(jù)量為:1G×1×16×30=480 Gb=60 GB,顯然板載DDR3的容量已經(jīng)無(wú)法滿(mǎn)足需求,因此高速數(shù)據(jù)采集板需要外掛一塊板載有大容量SSD存儲(chǔ)模塊的后端數(shù)據(jù)存儲(chǔ)板來(lái)存儲(chǔ)這種大量的采樣數(shù)據(jù)。同時(shí),在高速時(shí)鐘采樣下, ADC采集數(shù)據(jù)時(shí)的數(shù)據(jù)吞吐率達(dá)到了1G×1×16 bit/s=16 Gbps=2 GB/s,所以傳輸數(shù)據(jù)的接口帶寬必須能夠滿(mǎn)足2 GB/s的數(shù)據(jù)傳輸需求。
針對(duì)這一需求,本設(shè)計(jì)中選擇的是光纖接口,光纖傳輸接口不僅可以滿(mǎn)足帶寬要求, XC7K325T的FPGA內(nèi)嵌的RocketIO還擁有十分強(qiáng)大靈活的IP核支持,可以簡(jiǎn)化光纖傳輸硬件電路,同時(shí)Xilinx官方參與制定的Aurora協(xié)議適用于光纖傳輸,用戶(hù)可以很方便的添加上層應(yīng)用,也能適用于大多數(shù)內(nèi)嵌RocketIO的FPGA,因此本次設(shè)計(jì)選用光纖傳輸接口來(lái)實(shí)現(xiàn)超高吞吐率和超大數(shù)據(jù)量的板間數(shù)據(jù)傳輸,圖5是AuroraIP核的內(nèi)部結(jié)構(gòu)[7-8]。
圖5 AuroraIP核內(nèi)部結(jié)構(gòu)圖
整個(gè)系統(tǒng)是配合上位機(jī)來(lái)對(duì)信號(hào)進(jìn)行采樣的,上位機(jī)對(duì)FPGA發(fā)送采樣需要的各種參數(shù),F(xiàn)PGA在參數(shù)配置完成后會(huì)開(kāi)始進(jìn)行采樣,將數(shù)據(jù)進(jìn)行存儲(chǔ)和上傳。啟動(dòng)上位機(jī)應(yīng)用程序,操作界面分為控制區(qū)和日志輸出區(qū),如圖6所示。
圖6 上位機(jī)控制界面
上位機(jī)的操作步驟為:
(1)打開(kāi)板卡。在確認(rèn)板卡正確插入卡槽后,點(diǎn)擊打開(kāi)板卡按鈕,若右側(cè)日志顯示“板卡1打開(kāi)成功,板卡2打開(kāi)成功”,且板卡標(biāo)號(hào)分別顯示0x2,0x3則表示AD兩塊采集卡打開(kāi)成功;若顯示“打開(kāi)設(shè)備失敗”或其中一塊失敗則表示板卡打開(kāi)不成功,需檢查板卡是否插好,確保無(wú)接觸不良,檢查后關(guān)掉上位機(jī)重新打開(kāi)。
(2)相位校準(zhǔn)。若需要校準(zhǔn)相位,則在設(shè)置相位的輸入框中框中填入所需校準(zhǔn)時(shí)長(zhǎng),該值不大于50。交付時(shí)系統(tǒng)已校準(zhǔn)完畢,無(wú)需校準(zhǔn),每次重新開(kāi)機(jī)點(diǎn)擊開(kāi)始校準(zhǔn)。
(3)板卡復(fù)位。在任何狀態(tài)下如需要板卡復(fù)位則可點(diǎn)擊復(fù)位按鈕,使板卡回到初始狀態(tài)。若日志區(qū)顯示“FPGA復(fù)位成功”, 則表示復(fù)位成功;若顯示FPGA復(fù)位失敗,則需關(guān)掉上位機(jī)重新打開(kāi)或更新驅(qū)動(dòng)。
(4)數(shù)據(jù)采集與存儲(chǔ)。在采樣時(shí)間框中輸入所需采集時(shí)長(zhǎng),如10 s。然后點(diǎn)擊開(kāi)始采集,當(dāng)日志區(qū)顯示“數(shù)據(jù)存儲(chǔ)完畢”則可進(jìn)行數(shù)據(jù)上傳操作。
(5)定時(shí)長(zhǎng)采集數(shù)據(jù)上傳。當(dāng)采集完畢后若要將存儲(chǔ)數(shù)據(jù)上傳至上位機(jī)則需在數(shù)據(jù)長(zhǎng)度框中設(shè)置所需上傳數(shù)據(jù)量,如1 GB,則填入1 024,然后選擇文件保存路徑,點(diǎn)擊上傳數(shù)據(jù)即完成數(shù)據(jù)上傳,日志顯示區(qū)顯示“數(shù)據(jù)上傳完畢”。
為了驗(yàn)證系統(tǒng)在采樣和存儲(chǔ)的過(guò)程中不會(huì)出現(xiàn)數(shù)據(jù)丟失,測(cè)試采用內(nèi)部累加信號(hào)源作為整個(gè)FPGA系統(tǒng)的信號(hào)源。數(shù)據(jù)源為FPGA內(nèi)部產(chǎn)生的長(zhǎng)度為64 bit的連續(xù)整數(shù),送入后級(jí)經(jīng)過(guò)DDR3、光口、后級(jí)存儲(chǔ)板、PCIe接口送到上位機(jī),上位機(jī)接收到的累加數(shù)據(jù)如圖7所示。
圖7 上位機(jī)接收到的累加數(shù)據(jù)
上位機(jī)將接收的數(shù)據(jù)進(jìn)行數(shù)據(jù)長(zhǎng)度檢測(cè),與信號(hào)源預(yù)設(shè)的數(shù)據(jù)長(zhǎng)度進(jìn)行比對(duì),看是否相同。本次測(cè)試最長(zhǎng)測(cè)試了60 GB數(shù)據(jù)量,結(jié)果為所有數(shù)據(jù)無(wú)丟失,準(zhǔn)確無(wú)誤全部上傳到上位機(jī)。測(cè)試完系統(tǒng)傳輸數(shù)據(jù)的穩(wěn)定性之后,對(duì)系統(tǒng)進(jìn)行實(shí)際信號(hào)采集傳輸測(cè)試,觀測(cè)信號(hào)頻譜和信噪比。 測(cè)試信號(hào)為200 MHz正弦波,采樣頻率為1 GHz,采樣方式為連續(xù)采樣,采樣時(shí)長(zhǎng)為30 s,數(shù)據(jù)量高達(dá)60 GB,截取部分采集數(shù)據(jù)頻譜見(jiàn)圖8,信號(hào)的信噪比40.26 dBm。
圖8 高精度帶通測(cè)試信號(hào)200 MHz頻譜圖
本設(shè)計(jì)與當(dāng)前主流高速AD采集卡基本參數(shù)對(duì)比見(jiàn)表3。由表3可知,本設(shè)計(jì)優(yōu)點(diǎn)在于AD采集子卡可定制性和可擴(kuò)展性強(qiáng),采樣精度高,采樣率范圍較寬,采用光口傳輸保證更高的傳輸速率,最高達(dá)到2 GB/s。且數(shù)據(jù)存儲(chǔ)容量也擴(kuò)展到了60 GB。
本文設(shè)計(jì)了一種基于 FPGA 的可擴(kuò)展 PCIe高速數(shù)據(jù)采集傳輸系統(tǒng),主要通過(guò)光口進(jìn)行數(shù)據(jù)存儲(chǔ),通過(guò)PCIe接口進(jìn)行數(shù)據(jù)傳輸。能實(shí)現(xiàn)高采樣率、超高傳輸速率和大容量存儲(chǔ),具有抗干擾能力強(qiáng),穩(wěn)定性好等特點(diǎn),適用與各種高速數(shù)據(jù)采集傳輸領(lǐng)域,包括通信、聲納、遙感、地質(zhì)勘探、激光多普勒測(cè)速、光時(shí)間域反射測(cè)量等領(lǐng)域。
表3 本設(shè)計(jì)與當(dāng)前主流高速AD采集卡基本參數(shù)