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