黃忠凡,代 榮,孫健興,李 翔
(武漢中原電子集團有限公司,湖北 武漢 430205)
軟件定義無線電[1]平臺是基于通用的硬件平臺,使用可編程的軟件方法來滿足不同需求的無線電系統。現場可編程邏輯門陣列(Field Programmable Gate Array,FPGA)具有高速并行性及許多常用的無線通信IP核,如低密度奇偶校驗碼(Low Density Parity Check Code,LDPC)、Turbo等,使得波形開發人員能快速構建波形算法,節省大量代碼開發時間。將物理層放在FPGA上實現已成為現代無線通信波形設計主流做法。FPGA波形的可移植性是軟件無線電中較為復雜且非常重要的一部分工作,既要體現軟件無線電架構的靈活性又要保證波形交互處理的實時性[2]。為此軟件無線電的體系標準(Software Communication Architecture,SCA)[3]于 2007年頒布了硬件抽象層(Modem Hardware Abstraction Layer,MHAL)[4]接口標準;在2010年又頒布了片上總線硬件抽象層(MHAL On Chip Bus,MOCB)[5]接口標準。其中,MHAL針對的是FPGA、DSP類處理器間通過總線交互的場景。而隨著集成電路往片上系統(System On Chip,SOC)方向發展,一個芯片里面往往集成了多個核,核與核之間通過共享內存交互,MOCB就是針對這種趨勢提出的硬件抽象層規范。國內目前關于MHAL的研究有很多,但基于新趨勢MOCB的研究還很少,特別是FPGA的MOCB的相關研究幾乎沒有。此外,SCA規范對MOCB的描述只有總綱和接口規范,并沒有描述整個MOCB的工作原理和實現方案。本文結合作者多年SOC開發經驗和對軟件無線電的理解,詳細描述了FPGA中MOCB的設計過程,為其他開發人員提供一種參考。
FPGA MOCB為運行在FPGA中的波形應用提供標準、統一的接口,并搭建一套消息傳輸機制實現FPGA內波形應用與其他處理器,如FPGA、數字信號處理器(Digital Signal Processing,DSP)、精簡指令處理器(Advanced RISC Machines,ARM)上的波形應用互通。波形開發人員無需關注底層硬件實現,只需將硬件平臺研制人員提供的FPGA MOCB實體模塊例化到自己的設計中,經過一起編譯后形成統一的執行文件加載到FPGA中就能在硬件平臺運行,就能實現完整的FPGA功能。
由于MOCB應用在基于共享內存交互的處理器上,因此本文以集成ARM與FPGA的SOC舉例說明實際波形應用在MOCB上的部署。如圖1所示,ARM與FPGA之間沒有直接接口相連,只通過共享內存交互數據。所有波形應用組件、射頻組件都封裝成MOCB接口與MOCB相連,其中順序處理類組件如“Mac層組幀波形組件”放在ARM上,并行處理類物理層組件放FPGA上。MOCB的設計宗旨就是對下抽象所有外部硬件接口,包括但不限于處理器接口、射頻控制接口、外部存儲器訪問接口等,且不關心實現方式,只需要最終轉換成對上為波形應用組件提供統一的接口,就能實現不同處理單元之間的波形應用組件的任意互通。這樣波形不用關心底層實現,盡最大可能實現可移植性。圖1中與共享內存的接口將由MOCB自己封裝一層“輸入輸出(Input Output,IO)驅動適配”,FPGA上的“糾錯編碼波形組件”只需要與MOCB接口相連既可以與ARM上的“Mac組幀波形組件”通信,不用關心底層的共享內存如何控制的問題,體現了波形移植的靈活性。
MOCB接收數據的過程可簡單描述為,接收IO驅動發送而來的物理地址和數據,將物理地址映射為邏輯地址,根據邏輯地址將數據存儲至目標存儲器,而目標存儲器、硬件抽象層接口與波形組件三者是為一對一連接關系,因此可將數據路由至目的組件。相應地,硬件抽象層發送數據的過程可描述為:首先,由組件通過硬件抽象層接口將待發送數據發送至對應的存儲器;其次,硬件抽象層將數據讀出并將邏輯地址映射為物理地址;最后,通過IO接口驅動發送外部。
FPGA MOCB的接口規范如圖2所示,分為發起方和目的方,均包括基本信號、可選信號和擴展信號。其中,基本信號定義了一般平臺所需要的基本信號子集,而可選信號和擴展信號則是為了滿足較為復雜的平臺所需要的擴展特性而定義的可選信號。在具體實現時,可根據平臺和波形具體的應用需求而合理地選擇需要的接口信號,信號的定義在SCA規范[6]里面有詳細描述。
本文使用Xilinx XC7Z035 FPGA芯片作為硬件抽象層實現平臺。XC7Z035是一款SOC芯片,集成了2個ARM內核即處理系統(Process System,PS)和1個FPGA即可編程邏輯(Programmable Logic,PL),PS與PL基于共享內存的數據傳輸方式。圖3為MOCB在FPGA上的設計結構。圖3中測試波形組件是為了測試MOCB性能而構建的測試用例。
通過深入分析MOCB規范總綱和原理,本文總結出以下幾點設計要點。
(1)SCA規范中MOCB對上的組件只有兩類:一類為通信波形應用組件如編碼調制等,另一類為射頻控制組件(Radio Frequency Control,RFC)。對射頻控制進行統一的原因在于通信波形與射頻控制是息息相關的,并且規范了射頻控制組件更有利于波形移植。另外,MOCB對下面的硬件平臺的IO驅動類并沒有要求,只需要盡可能抽象底層硬件驅動即可,方便以后平臺到平臺的移植。
(2)MOCB即可以作為目的方端也可以作為發起方。與MHAL不同,MOCB的發起方既可以向目的方發送數據,還可以從目的方主動讀取數據。從實際無線通信波形設計角度出發,一般是把波形應用組件作為發起方,因此本文在FPGA上實現的MOCB接口只作為目的方。
(3)MOCB對上的每個組件只有一個源邏輯地址(Logical Destination,LD),其目的LD數目沒有限制,存在一對多情況。
(4)不同處理器上面的波形組件必須通過MOCB通信,如PS上的波形應用組件與PL中的波形應用組件交互數據必須經過MOCB。
(5)為了兼顧軟件無線電架構的靈活性與波形處理的實時性,同一處理器上的組件之間可以通過MOCB通信,也可以不經過MOCB直接互通,因為有些波形組件之間要求處理的實時性,經過MOCB路由后會帶來處理延時。本設計支持PL中的兩個組件可以直接內部通信也可以通過MOCB通信。另外為了達到波形與具體硬件平臺的分離目的,波形應用組件與外設驅動之間必須通過MOCB進行通信。
(6)全部波形應用組件如果部署在不同的基于共享內存交互的處理器上面,需要為每一個波形應用組件分配一塊連續的內存,并為其指定初始地址。同時,需要在硬件抽象層內部預存一個地址映射表進行物理地址與邏輯地址之間的相互映射。這里的物理地址是指共享內存的I/O接口地址線的傳輸地址。特別注意處理器內部波形應用組件與平臺自身使用的物理地址空間要分開。而內部波形組件的物理地址可以重疊,但起始地址不能一樣,只要MOCB設計者能保持不沖突即可。這樣做的目的也是為了體現硬件設備的差異性和波形組件的可移植性,保證共享內存使用的高效性。
(7)共享內存的方式必然會產生讀寫操作沖突,MOCB允許源端通過MOCB接口的“事件信號”告知目的方一個事件的發生。
PL上的波形組件A如果要發送數據包,整個發送過程分為以下4個步驟。
(1)先要經過MOCB接口模塊的MOCB接口時序模塊子模塊與流量控制模塊子模塊交互啟動發時序。如果目的方發緩存模塊子模塊有足夠空間存儲數據包,流量控制模塊子模塊就允許組件A發送數據,同時將數據包的地址信息反饋給本地適配與地址解析模塊。
(2)本地適配與地址解析模塊根據地址映射表識別出該數據包去往的目的LD,判斷是要去往PL內部的組件B還是要去往PS內部的組件C,相應的生成不同的請求信號。同一時刻PL上可能有其他組件也會發送數據包,也會生成請求,請求仲裁模塊接收所有請求,如果收到去往同一目的地的多個請求,將根據優先級高低進行仲裁,并將仲裁結果同步反饋給本地適配與地址解析模塊和交叉開關。
(3)本地適配與地址解析模塊根據仲裁結果通知相應的MOCB接口模塊可以發送數據了,交叉開關同步根據仲裁結果打開獲勝的發送方與目的地的通道開關。
(4)傳輸完成后,作為獲勝發起方的組件還會驅動事件信號通知目的組件。
PL上的組件如果要讀取數據包,整個接收過程分為以下兩個步驟。
(1)向流量控制模塊子模塊請求接收數據。
(2)流量控制模塊子模塊監控目的方收緩存模塊子模塊中是否存有完整一包數據。如果有就立刻響應組件的請求,將數據通過MOCB接口時序模塊子模塊送給波形組件;如果沒有就執行與發送過程類似的請求仲裁操作,通過交叉開關通道從目的地址讀回數據包。
本文實現的MOCB接口時序適合于突發長度傳輸模式,讀寫都是一次性完成一整包數據傳輸。
寫時序如圖4所示,主要步驟如下文所述。
(1)在第2個周期,波形應用組件作為發起方通過發起寫使能(WR_EN)來開始一次寫傳輸,同時發出有效的地址(A1)、數據(D1)、突發大小有效(SizeV)和突發大?。⊿ize)。
(2)MOCB作為目的方,經過內部邏輯處理后能受理發起方的寫傳輸,則將命令接收信號CmdA置高,發起方繼續后面的寫傳輸。直到整個突發傳輸過程全部完成。例如,發起方連續地向同一個地址A1寫4次,可表示為向一個內存映射物理地址為A1的波形應用組件連續寫4個數據。
(3)目的方在每個時鐘周期采樣寫使能、地址、數據、突發大小有效和突發大小信號,并在其內部使用這些信號執行寫操作。
讀時序如圖5所示,主要步驟如下文所述。
(1)在第2個周期,波形應用組件作為發起方通過發起讀使能(RD_EN)來開始一次讀傳輸,同時發出有效的地址(A1)、突發大小有效(SizeV)和突發大小(Size)。
(2)如果MOCB作為目的方,經過內部邏輯處理后能受理發起方的讀操作,則將命令接收信號CmdA置高,發起方繼續后面的讀傳輸。直到整個突發傳輸過程全部完成。例如,發起方連續地向同一個地址A1讀4次,可表示為向一個內存映射物理地址為A1的波形應用組件連續讀4個數據。
(3)目的方在每個時鐘周期采樣讀使能、地址、突發大小有效和突發大小信號,并在其內部使用這些信號執行讀操作。目的方判斷發送方的DataA信號,為高則開始發出DataV和Data信號。
(4)發送方根據DataV信號接收相應長度的Data,DataA為高表示發起方能一直接收目的方的數據。
FPGA MOCB的引入必然會帶來時延與吞吐率的開銷。本文搭建如圖3所示實際測試環境來測試其性能,其中PS端跑freertos操作系統構建了只有1個測試波形組件的簡化版PS_MOCB,該組件完成與PL上組件交互,同時統計收包數、校驗對錯及性能統計,PL端構建了兩個測試波形組件。測試結果有效性以PL與PS都不掉包為標準,性能如表1所示,表中值表示發10 000包統計的每包傳輸速率,分不同包長進行了對比測試,結果顯示包長越長性能越優,并且無論大包還是小包,包時延均小于32 μs。經分析,包長變短的時候性能下降的原因在于PS端從內存搬數據的任務占用固定時間較長,傳輸短包時候沒有優勢。該問題屬于平臺驅動問題,可以后續優化。

表1 FPGA MOCB的性能
通過結果可知,PL上的測試波形組件與PS測試波形組件的經過共享內存交互速率能達到1 901 Mb/s,因此FPGA MOCB完全能滿足波形應用組件需求,同時如果PL上的兩個組件不直接互通而是經過FPGA MOCB互通。經過Modelsim仿真,延時也只有5個時鐘處理周期,能保證波形處理的實時性。
本文結合實際應用場景對MOCB的原理進行了深入研究,提煉出設計要點,基于FPGA給出了詳細的實現方案,為他人設計MOCB給出一種參考。同時經過實際環境測試MOCB性能得出,MOCB實現了軟件無線電架構移植靈活性的同時,兼顧了波形處理的實時性結論。但本文沒有將MOCB置于基于SCA架構開發的實際無線通信波形環境中進行驗證,后續將設計一套基于該MOCB的通用軟件無線電驗證平臺。