陳沛?zhèn)?邢同鶴,董勇偉,梁興東
(1.中國科學(xué)院電子學(xué)研究所,北京100190;2.微波成像技術(shù)國家重點實驗室,北京100190;3.中國科學(xué)院大學(xué),北京100049)
雷達(dá)技術(shù)的飛速發(fā)展使得雷達(dá)數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)采集速率越來越高,雷達(dá)數(shù)據(jù)記錄回放系統(tǒng)需要更高的傳輸速率[1-2]。PCIE總線作為新一代的傳輸總線,具有很高的傳輸速率,基于PCIE總線的直接內(nèi)存存儲(DMA)在數(shù)據(jù)傳輸中可以減少CPU的干預(yù),減輕CPU的負(fù)擔(dān),大幅提高系統(tǒng)的性能[3-6],目前主要采用基于PCIE總線的DMA來實現(xiàn)雷達(dá)數(shù)據(jù)記錄回放系統(tǒng)的高速數(shù)據(jù)傳輸?;赑CIE總線的DMA主要分為BLOCK DMA和分散集聚DMA兩種方式,其中分散集聚DMA由于可以通過描述符鏈表將分散的內(nèi)存集聚起來,可申請的內(nèi)存更大,經(jīng)過一次DMA啟動,便能完成FPGA與各個物理分散內(nèi)存之間的數(shù)據(jù)傳輸,能夠減輕CPU的負(fù)擔(dān),優(yōu)勢更為明顯[7-9]。
目前分散集聚DMA中描述符鏈表的傳輸與更新需要DMA控制器與驅(qū)動頻繁的握手,每一個描述符對應(yīng)內(nèi)存完成數(shù)據(jù)傳輸以后,DMA控制器都需要向驅(qū)動更新此描述符并獲取新的描述符[10],浪費了很多時間。本文提出了一種改進(jìn)分散集聚DMA的實現(xiàn)方式,一次性將描述符鏈表全部傳輸給DMA控制器,之后便不需要與驅(qū)動握手更新描述符以及獲取新的描述符,節(jié)省了因描述符切換需要的握手時間,提高了數(shù)據(jù)傳輸速度。而且,DMA控制器設(shè)計了多個數(shù)據(jù)通道,可以在實際應(yīng)用中根據(jù)需要實現(xiàn)雷達(dá)數(shù)據(jù)的流水傳輸與處理。
因為分散集聚DMA申請的內(nèi)存是物理不連續(xù)的,所以上位機(jī)在申請一定大小的內(nèi)存時,會生成描述符鏈表,描述符鏈表中的每一個描述符都指向了一小塊物理連續(xù)的內(nèi)存,描述符中定義了控制狀態(tài)信息和內(nèi)存信息。其中,描述符最后32 bit是一個指向下一個描述符的指針,這個指針將各個描述符連接成描述符鏈表,由此就可以映射到整個物理不連續(xù)的內(nèi)存[11]。
在傳統(tǒng)分散集聚DMA的傳輸過程中,如圖1所示,首先DMA控制器從驅(qū)動讀取描述符鏈表中的一個描述符并存到描述符引擎中,DMA控制器根據(jù)描述符引擎中的信息完成對應(yīng)內(nèi)存的數(shù)據(jù)傳輸后,描述符更新引擎將此描述符的更新信息傳到描述符鏈表中,然后描述符引擎通過指向下一個描述符的指針向驅(qū)動獲取下一個描述符的信息,由此進(jìn)行下一個描述符對應(yīng)內(nèi)存的數(shù)據(jù)傳輸。此方式在傳輸完成一個描述符對應(yīng)內(nèi)存的數(shù)據(jù)后,需要等待描述符更新引擎更新描述符信息和描述符引擎讀取下一個描述符的信息,降低了數(shù)據(jù)傳輸?shù)某掷m(xù)性。
圖1 現(xiàn)有分散集聚DMA示意圖
針對驅(qū)動與DMA控制器頻繁握手的不足,本設(shè)計在上位機(jī)驅(qū)動中對描述符鏈表作了提取處理,由于描述符(32 B)中的保留位以及狀態(tài)位等在DMA控制器中是無用信息,因此本設(shè)計直接選取了有用的上位機(jī)內(nèi)存地址位(8 B)和數(shù)據(jù)長度位(4 B)發(fā)送至DMA控制器,描述符其他數(shù)據(jù)不再發(fā)送。當(dāng)DMA控制器初始化以后,驅(qū)動直接將所有描述符的系統(tǒng)地址位和數(shù)據(jù)長度位發(fā)送至描述符引擎,如圖2所示,此后,描述符引擎便不需要與驅(qū)動握手。
圖2 改進(jìn)后分散集聚DMA示意圖
由于改進(jìn)后分散集聚DMA是應(yīng)用在雷達(dá)數(shù)據(jù)記錄回放系統(tǒng)中,雷達(dá)數(shù)據(jù)量非常大,遠(yuǎn)大于一個描述符對應(yīng)的內(nèi)存(通常4 KB),不會出現(xiàn)實際傳輸數(shù)據(jù)小于描述符內(nèi)存的情況,因此不需要更新描述符中實際傳輸數(shù)據(jù)大小?,F(xiàn)有描述符更新引擎的一個重要作用是當(dāng)一個描述符對應(yīng)內(nèi)存完成數(shù)據(jù)傳輸以后,通知驅(qū)動此內(nèi)存可進(jìn)行數(shù)據(jù)讀取或?qū)懭?可是在分散集聚DMA實際傳輸過程中都是所有描述符對應(yīng)內(nèi)存完成數(shù)據(jù)傳輸以后,上位機(jī)才會對內(nèi)存進(jìn)行數(shù)據(jù)讀取或?qū)懭牍ぷ?不會對單個描述符內(nèi)存進(jìn)行操作,而且若數(shù)據(jù)傳輸中出現(xiàn)錯誤,由DMA控制器直接向驅(qū)動發(fā)送錯誤中斷,因此本次設(shè)計中取消了描述符更新引擎,不會增加數(shù)據(jù)傳輸?shù)腻e誤率,而且節(jié)省了每次更新描述符DMA控制器與驅(qū)動的握手時間。
改進(jìn)后的DMA控制器在進(jìn)行DMA數(shù)據(jù)傳輸?shù)墓ぷ鬟^程如圖3所示。
1)驅(qū)動初始化DMA控制器,配置DMA寄存器;
2)驅(qū)動將描述符鏈表中每個描述符的數(shù)據(jù)傳輸長度和上位機(jī)內(nèi)存地址提取出來,發(fā)送至DMA控制器并存入描述符引擎中;
3)啟動DMA操作,DMA控制器根據(jù)第一個描述符中的內(nèi)存起始地址和數(shù)據(jù)長度信息控制數(shù)據(jù)通道與上位機(jī)內(nèi)存進(jìn)行DMA數(shù)據(jù)傳輸;
4)當(dāng)數(shù)據(jù)通道與第一個描述符對應(yīng)內(nèi)存完成數(shù)據(jù)傳輸時,直接通過描述符引擎連接到下一個描述符所對應(yīng)的內(nèi)存地址,而不需要通過描述符指針去獲取下一個描述符,當(dāng)所有的描述符對應(yīng)的內(nèi)存完成數(shù)據(jù)傳輸操作以后,DMA引擎停止工作,DMA控制器發(fā)出中斷請求信號,結(jié)束此次DMA的傳輸。
圖3 DMA數(shù)據(jù)傳輸工作過程
其中,描述符的切換是通過實時數(shù)據(jù)傳輸長度與描述符引擎中存儲的描述符內(nèi)存數(shù)據(jù)的長度進(jìn)行比較判斷的,當(dāng)兩者相同時,連接到下一個描述符繼續(xù)進(jìn)行DMA傳輸。
當(dāng)然,驅(qū)動與DMA控制器是相對應(yīng)的,驅(qū)動通過對DMA控制器的讀寫操作完成DMA初始化,初始化完成以后,驅(qū)動提取出各個描述符中內(nèi)存起始地址和數(shù)據(jù)長度信息發(fā)送給DMA控制器,然后啟動DMA開始進(jìn)行DMA數(shù)據(jù)傳輸,當(dāng)接收到DMA控制器發(fā)送的中斷以后,清除中斷并結(jié)束DMA操作[12-13]。
在此設(shè)計中,一次性將描述符鏈表中各個描述符中的內(nèi)存起始地址和數(shù)據(jù)長度信息傳輸至描述符引擎,并通過已傳輸數(shù)據(jù)長度判斷是否切換描述符鏈表中的地址,減少了DMA控制器與驅(qū)動的握手次數(shù),能夠使DMA控制器連續(xù)不斷地傳輸數(shù)據(jù),保持了數(shù)據(jù)傳輸?shù)某掷m(xù)性,節(jié)省了每次描述符對應(yīng)內(nèi)存?zhèn)鬏斖瓿珊蟾?、切換描述符的等待時間,提高了數(shù)據(jù)傳輸速度。
針對雷達(dá)數(shù)據(jù)記錄回放系統(tǒng)多任務(wù)數(shù)據(jù)傳輸?shù)男枨?DMA控制器至多可提供8個數(shù)據(jù)通道,每個通道都有獨立的寄存器組,包括控制狀態(tài)寄存器、地址寄存器、傳輸長度寄存器等[14-15]。
現(xiàn)有雷達(dá)信號處理系統(tǒng)在處理雷達(dá)數(shù)據(jù)時均有一定的時延,雷達(dá)數(shù)據(jù)通過DMA控制器發(fā)送至某一雷達(dá)信號處理系統(tǒng)后,雷達(dá)信號處理系統(tǒng)需要一定的時間處理雷達(dá)數(shù)據(jù),因此會浪費DMA傳輸帶寬。對此,可以通過數(shù)據(jù)通道連接多個雷達(dá)信號處理系統(tǒng),雷達(dá)數(shù)據(jù)依次通過各個通道傳輸?shù)讲煌奶幚硐到y(tǒng)中,能夠?qū)崿F(xiàn)雷達(dá)數(shù)據(jù)的流水處理。
例如,當(dāng)8個雷達(dá)信號處理系統(tǒng)通過8個數(shù)據(jù)通道連接DMA控制器時,如圖4所示,第一幅雷達(dá)圖像原始數(shù)據(jù)可以通過通道0傳輸至雷達(dá)信號處理系統(tǒng)0,第二幅圖像數(shù)據(jù)切換至通道1傳輸至處理系統(tǒng)1,以此類推,可以實現(xiàn)雷達(dá)數(shù)據(jù)在8個處理系統(tǒng)中流水處理,雷達(dá)數(shù)據(jù)處理速度提高了8倍。
圖4 多通道傳輸
在實際應(yīng)用中,可以根據(jù)雷達(dá)圖像數(shù)據(jù)大小和數(shù)據(jù)傳輸速率適當(dāng)選擇信號處理系統(tǒng)的數(shù)量,不需要浪費信號處理系統(tǒng)處理數(shù)據(jù)的時間,從而充分利用DMA傳輸帶寬,可以實現(xiàn)雷達(dá)數(shù)據(jù)的高速傳輸,提高雷達(dá)數(shù)據(jù)處理速度。在本文DMA設(shè)計中,將數(shù)據(jù)通道的選擇權(quán)直接通過接口交給用戶程序,用戶可在上位機(jī)直接決定選擇某個通道進(jìn)行數(shù)據(jù)傳輸,也可隨時切換通道。
由于分散集聚DMA在數(shù)據(jù)傳輸過程中,DMA初始化、中斷處理、寄存器讀寫等需要驅(qū)動與DMA控制器握手的時間受硬件、驅(qū)動等客觀因素影響,甚至相同條件下連續(xù)兩次測試花費的時間也是不一樣的,因此不存在一個精確的傳輸速度。本節(jié)僅從傳輸數(shù)據(jù)包中有效數(shù)據(jù)的比例分析傳輸速度。
基于PCIE總線的分散集聚DMA傳輸速度理論分析基于以下假設(shè):
1)每一個描述符對應(yīng)4 KB內(nèi)存;
2)每個TLP包最大有效載荷128 B;
3)最大讀請求128 B;
4)TLP包頭3個雙字12 B;
5)一個應(yīng)答信號開銷8 B;
6)暫時不考慮DMA初始化、中斷處理等其他影響因素。
基于上述假設(shè),現(xiàn)有分散集聚DMA寫一個描述符對應(yīng)內(nèi)存的數(shù)據(jù)需要傳輸非有效數(shù)據(jù)的損耗如表1所示。
表1 現(xiàn)有DMA寫一個描述符進(jìn)行DMA數(shù)據(jù)傳輸損耗
由表1可知,現(xiàn)有分散集聚DMA數(shù)據(jù)上行(DMA寫)過程中,每傳輸一個描述符內(nèi)存數(shù)據(jù)(4 096 B),讀取描述符、接收完成包、更新描述符以及各自應(yīng)答信號損耗的字節(jié)數(shù)為12+8+12+32+8+12+12+8=104,傳輸4 096 B有效數(shù)據(jù),需要傳輸?shù)腡LP包個數(shù)為4 096/128=32,每傳輸一個TLP包的字節(jié)損耗是12+8=20,傳輸4 096 B有效數(shù)據(jù)損耗共計
104+32×20=744 B
所以,現(xiàn)有分散集聚DMA數(shù)據(jù)上行損耗為
744/(4 096+744)=15.37%
我們知道,PCIE Gen2×4鏈路理論傳輸速度為2 GB/s,現(xiàn)有DMA有效數(shù)據(jù)上行傳輸速度極限為
2×(1-15.37%)=1.69 GB/s
改進(jìn)分散集聚DMA寫一個描述符對應(yīng)內(nèi)存數(shù)據(jù)需要傳輸非有效數(shù)據(jù)的損耗如表2所示。
表2 改進(jìn)DMA寫一個描述符對應(yīng)內(nèi)存數(shù)據(jù)傳輸損耗
由表2可知,分散集聚DMA數(shù)據(jù)上行過程中,對于每一個描述符中內(nèi)存地址以及數(shù)據(jù)長度的發(fā)送,需要損耗的字節(jié)數(shù)為8+4+3×8=36,每傳輸一個描述符內(nèi)存數(shù)據(jù)(4 096 B),需要傳輸?shù)腡LP包個數(shù)為4 096/128=32,每傳輸一個TLP包的字節(jié)損耗是12+8=20,傳輸4 096 B有效數(shù)據(jù)損耗共計
32×20+36=676 B
所以,分散集聚DMA數(shù)據(jù)上行的損耗為
676/(4 096+676)=14.17%
改進(jìn)DMA有效數(shù)據(jù)上行傳輸速度極限為
2×(1-14.17%)=1.72 GB/s
所以,改進(jìn)DMA有效數(shù)據(jù)上行極限傳輸速度較現(xiàn)有分散集聚DMA提升為
(1.72-1.69)/1.69=1.78%
同樣的方法可以計算出數(shù)據(jù)下行(DMA讀)的有效數(shù)據(jù)極限傳輸速度提升為
(1.52-1.50)/1.50=1.33%
由計算可知,從傳輸數(shù)據(jù)包中有效數(shù)據(jù)比例的角度分析,改進(jìn)后的分散集聚DMA數(shù)據(jù)上行、下行的有效數(shù)據(jù)極限傳輸速度均有提升。
分散集聚DMA性能測試的結(jié)構(gòu)設(shè)計如圖5所示,主要分為上位機(jī)和FPGA兩個模塊。上位機(jī)的用戶程序通過基于WDF的驅(qū)動實現(xiàn)內(nèi)存與FPGA之間的數(shù)據(jù)傳輸,并能夠計算出數(shù)據(jù)傳輸速率;FPGA中的DMA控制器通過Xilinx封裝的IP硬核實現(xiàn)與上位機(jī)之間控制信號以及數(shù)據(jù)的傳輸,DMA控制器還可以根據(jù)上位機(jī)的設(shè)定實現(xiàn)通道選擇。
圖5 性能測試結(jié)構(gòu)
實際的測試過程是在上位機(jī)申請兩塊相同大小的內(nèi)存A,B,在用戶程序中先將內(nèi)存A寫入數(shù)據(jù),啟動DMA讀操作,將數(shù)據(jù)寫入通道0,完成DMA讀操作后,啟動DMA寫操作,將數(shù)據(jù)寫入內(nèi)存B中,然后比較內(nèi)存A,B中的數(shù)據(jù),若兩者數(shù)據(jù)一致,表示DMA讀寫操作成功。性能測試如圖6所示。
圖6 性能測試
由于各個通道間寄存器完全一致,性能一樣,本次測試選擇通道0,DMA數(shù)據(jù)傳輸測試結(jié)果如表3所示。
表3 測試結(jié)果
改進(jìn)后的分散集聚DMA有效數(shù)據(jù)極限傳輸速度已經(jīng)在第3節(jié)詳細(xì)描述,由表3可知,DMA讀(數(shù)據(jù)下行)速度最高可達(dá)到1 400 MB/s,達(dá)到理論極限帶寬的92.11%,DMA寫(數(shù)據(jù)上行)速度最高可達(dá)到1 500 MB/s,達(dá)到理論極限帶寬的87.21%。
由于實際數(shù)據(jù)傳輸過程中,DMA控制器初始化、PCIE鏈路與CPU之間的傳輸延遲以及中斷處理等客觀原因,使得實際測試的速度不能達(dá)到理論極限速度,但本次測試的實際傳輸速度已很接近理論極限帶寬。
在此基礎(chǔ)上,本文實現(xiàn)了雷達(dá)數(shù)據(jù)記錄回放系統(tǒng)的設(shè)計,如圖7所示。以PCIE總線實現(xiàn)上位機(jī)與FPGA的數(shù)據(jù)傳輸,以光纖RapidIO接口實現(xiàn)FPGA與數(shù)據(jù)記錄系統(tǒng)或信號處理系統(tǒng)的數(shù)據(jù)傳輸,以DDR3實現(xiàn)數(shù)據(jù)在板卡上的緩存。最終雷達(dá)數(shù)據(jù)傳輸能夠達(dá)到光纖RapidIO接口的極限速度1 GB/s。
圖7 雷達(dá)數(shù)據(jù)記錄回放系統(tǒng)
基于PCIE總線的多通道分散集聚DMA作為一種高速的數(shù)據(jù)傳輸方式,在雷達(dá)數(shù)據(jù)記錄回放系統(tǒng)中得到了廣泛的應(yīng)用。文中對現(xiàn)有分散集聚DMA提出了改進(jìn)的方法,DMA讀寫極限傳輸速度較現(xiàn)有DMA均有提升,經(jīng)過實際測試,單通道DMA寫速度最高能達(dá)到1 500 MB/s,DMA讀速度最高能達(dá)到1 400 MB/s。改進(jìn)后的分散集聚DMA至多支持8個數(shù)據(jù)通道進(jìn)行數(shù)據(jù)傳輸,可在實際應(yīng)用中配合雷達(dá)信號處理系統(tǒng)實現(xiàn)雷達(dá)數(shù)據(jù)的流水傳輸與處理,能夠滿足雷達(dá)數(shù)據(jù)記錄回放系統(tǒng)對數(shù)據(jù)傳輸?shù)囊蟆?/p>
[1]徐國平.雷達(dá)視頻回波信號記錄與回放系統(tǒng)設(shè)計[J].電子設(shè)計工程,2015,23(9):135-137,141.
[2]孫高俊,劉志英.基于FPGA的雷達(dá)IQ光纖數(shù)據(jù)采集及傳輸系統(tǒng)[J].電子科技,2016,29(4):169-172.
[3]ROTA L,CASELLE M,CHILINGARYAN S,et al.A PCIe DMA Architecture for Multi-Gigabyte Per Second Data Transmission[J].IEEE Trans on Nuclear Science,2016,62(3):972-976.
[4]KAVIANIPOUR H,MUSCHTER S,BOHM C.High Performance FPGA-Based DMA Interface for PCIe[J].IEEE Trans on Nuclear Science,2014,61(2):745-749.
[5]張輝.DMA技術(shù)在煤礦高速數(shù)據(jù)采集系統(tǒng)中的應(yīng)用[J].工礦自動化,2016,42(4):74-77.
[6]KIM D,MANAGULI R,KIM Y.Data Cache and Direct Memory Access in Programming Mediaprocessors[J].IEEE Micro,2001,21(4):33-42.
[7]李軍偉,戴紫彬,南龍梅.密碼SoC中嵌入式鏈?zhǔn)紻MA的研究與設(shè)計[J].電子技術(shù)應(yīng)用,2014,40(1):56-59.
[8]劉林海,張勇,常迎輝.光纖通道SOPC系統(tǒng)性能優(yōu)化設(shè)計技術(shù)研究[J].無線電通信技術(shù),2015,41(3):43-45.
[9]ZDENEK J.Distributed Control Computer Backbone Communication Channel of Electric Locomotive with Effective DMA Support[C]∥14th International Power Electronics and Motion Control Conference,Ohrid,Macedonia:IEEE,2010:27-34.
[10]王府北,王佳華,吳瓊水.基于PCIe總線的顯微鏡圖像采集系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2015,41(2):42-44.
[11]XILINX INC.Bus Master DMA Performance Demonstration Reference Design for the Xilinx Endpoint PCI Express Solutions[EB/OL].[2016-11-06].https:∥china.xilinx.com/support/documentation/application_notes/xapp1052.pdf
[12]肖文君,劉萬松,劉伍豐,等.基于WDF的PCIe總線驅(qū)動程序設(shè)計與實現(xiàn)[J].測控技術(shù),2015,34(7):101-104.
[13]賈玉姣,劉亞斌,張秀磊.基于高速多通道采集模塊的數(shù)字化儀軟件設(shè)計[J].電子設(shè)計工程,2016,24(12):77-80.
[14]SUN G,HE Z.A Real-Time Multi-Channel Signal Acquisition Card Based on PCI Express Interface[C]∥2009 International Conference on Communication Software and Networks,Macau:IEEE,2009:20-24.
[15]LI Y,CHANG T,BAI F,et al.Design of Multi-Channel Image Superimposition System Based on FPGA[C]∥2010 International Conference on Optoelectronics and Image Processing,Haiko:IEEE,2010:417-420.