陳安地,李小文
(重慶郵電大學 計算機科學與技術學院,重慶 400065)
原語是從物理層到非接入層各層間的通信數據,這些數據包含帶有大量標識信息的頭。在TD-LTE無線綜合測試儀表數據傳輸過程中,從最上端非接入層開始向下逐層將數據加頭并加入本層的有效數據,到物理層后向上反饋并逐層解析頭提取本層所需數據。這些數據的正確性是確保整個通信系統正常運作的關鍵所在,因此,在系統設計與調試過程中對這些數據的實時跟蹤檢測十分必要。
本文介紹了在TD-LTE中基于三星ARM1176JZF芯片S3C6410的DMA技術的具體應用實現 (即原語跟蹤技術),以及在具體環境中不同技術方案的對比分析。最終的設計方案充分利用了DMA在基帶芯片中的可用性與占用CPU資源小的優勢[1],實現了高效實時可靠的原語跟蹤。
S3C6410包含4個DMA控制器,每個DMA控制器由8個傳輸通道組成。DMA控制器的每個通道能在主AXI(Advanced Extensible Interface)總線的設備和外部 AXI總線之間通過AHB(Advanced High performance Bus)到AXI進行單向數據傳輸。DMA控制器結構框圖如圖1所示,每個控制器提供16個外設DMA請求,并且DMA控制器支持外部中斷響應,即每個通道可以支持從內存到外設、從內存到內存、從外設到內存、從外設到外設4種模式的數據傳輸。在TD-LTE系統中,原語跟蹤使用的是內存到外設模式,每個外設連接到DMA控制器,可以產生DMA脈沖請求或是單一DMA請求,脈沖大小可編程。DMA內部有4個字的 FIFO通道,支持8 bit、16 bit、32 bit寬度處理。由于原語跟蹤采用的外設是UART支持的8 bit輸出,故本文在設計中DMA也采用8 bit處理[2]。

數據跟蹤的基本機制如下:首先為各層的數據在內存中開辟存儲空間,將數據存儲到指定緩存中,再由DMA實現內存到外設的數據搬移。本文的外設是UART,將數據搬移到UART的輸出緩存區以實現數據跟蹤。DMA控制器和外設的信號交互如圖2所示。

當請求被允許且剩余數據量大于脈沖大小時,DMA控制器發送全部數據脈沖;而剩余數據量小于脈沖大小時,DMA控制器將再次監控請求信號等待下次傳輸[3]。本文在數據跟蹤時將脈沖設置為1以滿足數據跟蹤實時性的要求。此外,由于單次數據量并不是很大(最大不過字節單位的數據量),因此沒有采用鏈表模式來傳輸數據。整個跟蹤過程主要包括以下幾個步驟:首先DMA接收到外設驅動初始化完畢后發送的DMA請求;然后DMA控制器請求CPU將數據搬移到需要使用的總線交給DMA控制,將數據預讀取到DMA-FIFO中(即DMA數據搬移內部過程);最后打開DMA通道將DMA-FIFO中的數據傳輸到UART的輸出緩存中,輸出到顯示設備。其中只有驅動初始化和總線釋放過程有CPU參與,而驅動初始化過程是一次性的,之后的步驟都由DMA單獨控制從而釋放CPU資源以繼續執行系統的其他工作。工作中會產生更多的原語需要DMA反復運行支持實時跟蹤,圖3為數據跟蹤基本設計流程。
數據在內存中的緩存處理方案是:根據TD-LTE無線綜合測試儀表系統單次跟蹤的數據量大小以及原語產生地址與時間的隨機不連續性,DMA搬移數據時設置了100 KB的數據緩存區,以統一數據地址提高跟蹤效率[4],從而在合理利用存儲空間的同時也保證了數據在傳輸過程中的高效與完整性,設計中采用起始地址和結束地址標志相減的方式判斷單次數據量大小。當數據存儲到100 KB緩存邊界緩存溢出時,需要采用一定的數據處理機制來做溢出判斷,其處理方式如圖4所示。將本次的數據量分成A、B兩塊,分兩次分別傳輸,A部分是本次數據搬移起始位置到100 KB邊界位置的數據量,B部分是當前數據總量減去A部分數據后的剩余數據量。這里要注意的是:A部分數據傳輸完成后,系統可能又產生了新的原語數據塊C,因此設計中,在傳輸數據塊B時要重新讀取數據的終止標志位加上后面產生的新的數據塊C,以保證數據的實時性與完整性。


在TD-LTE無線綜合測試儀表系統中,原語是單條產生的,并帶有一定的時間間隔。為滿足系統對實現數據跟蹤的實時性要求,在跟蹤數據時也是單條實時顯示。這就要求在設計中判定DMA在每次傳輸是否完成,避免本次傳輸還未完成而下一次傳輸已經開始,導致本次傳輸數據不完整。因此在設計過程中,采用了中斷判斷模式和中斷標志位判斷模式兩種方案來判定傳輸是否完成并獲取總線來執行下一次數據搬移。
根據S3C6410中DMA控制器特性,DMA在數據搬移結束時可以產生數據計數中斷或數據錯誤中斷兩種中斷。設計中打開DMA對應的GPIO(General Purpose Input Output)口并初始化相對應的 41號 VIC(Vectored Interrupt Controllers)中斷向量,就可以利用數據計數中斷來完成系統的外部中斷響應,進入中斷函數,在中斷函數中再次調用DMA以此完成多次數據搬移[4]。在使能DMA通道并且數據傳輸完成后由硬件自動響應中斷,有效避免了DMA設備在傳輸過程中被下一次傳輸請求打斷,而搬移數據和系統其他程序的執行完全互不干擾。這種模式可以在各種數據量大小的數據搬移過程中最大限度地利用CPU資源。但是,由于采用了上述的數據緩存機制,而且在TD-LTE系統中斷處理中比DMA計數中斷優先級高的中斷還有很多,因此采用中斷模式在實際運用中會出現以下三種典型不穩定的情況及所采取的措施:
(1)在CPU向緩存中搬移數據過程中產生了中斷,此時會出現當前一次要搬移的數據在內存中不完整或標志位混亂的情況,因此,在設計時搬移數據前還需要增加內存數據是否存儲完成的標志位判定。由于中斷類型眾多,設計有一定難度。
(2)最后幾條原語數據在存入內存緩存區后,若前面的搬移數據還沒有完成,則無法獲取總線,則會導致最后幾條原語無法跟蹤。因此,需要在原語全部發送完畢后在系統程序靠后的固定位置添加一條空的原語跟蹤語句來跟蹤最后幾條。
(3)當出現較大數據量搬移時耗時較長,可能超過上層系統原語發送的間隔時間,后面幾條原語將堆積到緩存中,等待下一次DMA總線獲取后,一次性搬出,這樣會導致下一次數據搬移時間的延長。這一條是基于機制的本質問題,實時性和數據完整性預計會受到較大影響。
這種方案的基本思路與中斷模式相似,也需要解決DMA反復獲取總線的問題。方案中屏蔽了DMA控制器在ARM中的中斷響應,在每次系統上層調用數據緩存的過程中加入了DMA接口函數,以這種方式在系統上層作為數據緩存時主動獲取總線[5]。采用軟件的方式編程判斷DMA數據計數中斷標志位(在DMACIntTCStatus寄存器中)是否拉高置 1,然后以消耗 CPU資源為代價來等待傳輸完成或是傳輸完成后直接進行下一次DMA總線獲取。這種模式以軟件方式代替硬件中斷響應,可以保證每一條原語在數據緩存后的及時跟蹤,也能滿足實時性與數據完整性的要求。但該方案也存在機制上的缺陷,其表現為在連續大數據量跟蹤時會出現持續消耗CPU、等待DMA數據搬移完成的情況,從而影響系統運行效率。
由于兩種方案各有優缺點,在調試過程中對兩種方案做了詳細的對比與分析,最后根據TD-LTE無線綜合測試儀表系統的具體特性與應用要求選擇了較優的中斷標志位判定模式。
首先,根據設計原理和調試中呈現的不穩定情況,通過對兩種方案進行資源占用時間分析,了解它們對系統的影響,圖5中分別列出了兩種方案中正常情況和不穩定狀態下的典型資源占用時間情況。
由圖 5(a)可以看出,采用中斷模式(方案 1)出現不穩定情況時,在下次跟蹤時會累計更多條原語從而使DMA占用更多時間,雖然CPU資源利用率較高,但是會產生惡性循環,導致最后大量數據無法輸出,破壞數據完整性,同時也降低了數據跟蹤的實時性。圖5(b)中采用中斷標志位判定模式(方案2),在出現不穩定情況時,由于各條原語跟蹤相對獨立,僅在當前一條的原語跟蹤后出現對CPU資源占用,雖然對系統總體CPU利用率產生影響,但是不會對后面的原語跟蹤產生任何影響。

其次,對兩種方案中不穩定情況在TD-LTE無線綜合測試儀表系統中發生的可能性進行分析,主要需要考慮系統產生原語數據量的大小以及產生時間間隔這兩個參數。在整個調試流程中UART波特率為56000baud/s,系統時鐘ARMCLK為667MHz、PCLK為66.7MHz、HCLK為133MHz,產生原語平均大小為128B(其中大部分原語數據量小于這個值,由于個別數據量較大而將平均值拉大)。通過示波器分析可以看出,在單次跟蹤數據量為128 B、總次數為10次的數據跟蹤條件下,平均時間間隔(每次產生數據跟蹤間隔的時間)與小時間間隔(產生數據跟蹤間隔的時間小于數據跟蹤所需時間)時兩種方案的測試情況,其波形與時間分析如圖6所示。圖6中,A波形為128 B原語數據單次跟蹤波形,△X為所需要的時間;B波形為正常時間間隔下連續10次、128 B數據量原語跟蹤,其中的間隔時間△X內CPU仍然在運行,中斷模式與中斷標志位判定模式在A、B兩種情況下的輸出占用時間大體相同。C波形是中斷標志位判定模式下小時間間隔10次、128 B數據量原語跟蹤所輸出的波形,在沒有原語跟蹤的情況下CPU執行時間在190 ms,而這里消耗了227 ms,跟蹤數據正常,只是多占用了37 ms的CPU資源。D波形為中斷模式下小時間間隔10次、128 B數據量原語跟蹤所輸出的波形,根據波形輸出情況可以斷定發生了圖5中數據積累情況,導致后面有兩條原語在跟蹤時由于DMA沒有獲取到總線而沒有輸出,對數據跟蹤的實時性和完整性影響頗大。

本文介紹的兩種DMA原語跟蹤方案已經在ARM Workbench IDE v4.0與RealView Debugger v4.0上編譯調試,并通過了測試板驗證和聯機驗證。在反復驗證后,采取了中斷標志位判定模式來實現跟蹤。該方案的運行結果與理論值一致,不受系統中其他諸如DSP數據中斷、FPGA指針中斷等高優先級中斷的干擾[4],具有較強的獨立性和穩定性,優化了系統CPU資源利用率,實現了DMA數據跟蹤的高強度反復穩定運行。
[1]Tang Dan,Bao Yungang,Hu Weiwu,et al.DMA cache:using on-chip storage to architecturally separate I/O data from CPU data for improving I/O performance[C].High Performance Computer Architecture(HPCA),2010 IEEE 16th International Symposium.Bangalore,India.January 9-14.2010:1-12.
[2]唐中燕.DMA技術在嵌入式現場前端設備中的應用[J].電測與儀表,2006,43(483):60-61.
[3]Samsung Electronics.S3C6410X RISC microprocessor user's manual[R].2008.
[4]HESSEL S,SZCZESNY D,BRUNS F,et al.Architectural analysis of a smart DMA controller for protocol stack acceleration in LTE terminals[C].The Sixteenth IEEE International Conference on Embedded and Real-Time Computing Systems and Applications.Macau,China.Aug 23-25,2010:309-315.
[5]DASYGENIS M,BROCKMEYER E,DURINCK B,et al.A combined DMA and application-specific prefetching approach for tackling the memory latency bottleneck[J].Very Large Scale Integration(VLSI)Systems.2006,14(3):279-291.