摘要
LTE 上行基帶前端處理包括為PUSCH,、PUCCH,、SRS 信道執(zhí)行的FFT,,以及為PRACH信道執(zhí)行的時頻轉(zhuǎn)換,。這些操作處理的是原始時域天線數(shù)據(jù),,數(shù)據(jù)量大,,對計算資源和存儲資源的需求都較高,。文本針對TI 的KeyStone 器件給出了完整的LTE 上行基帶前端處理設(shè)計,,目標(biāo)是盡可能減少核的干預(yù),消耗盡可能少的資源,。本文還詳細(xì)列出了該設(shè)計對各種硬件資源的需求,,以及c66x 核上任務(wù)的實測負(fù)載。
1,、引言
LTE(Long Term Evolution)是由3GPP 組織制定的3G 演進(jìn)標(biāo)準(zhǔn),,在物理層采用OFDM和MIMO 技術(shù)。LTE 分為FDD 和TDD 兩種雙工模式,。目前,,LTE-FDD 在20MHz 頻譜帶寬下的實際速率大約能達(dá)到下行100Mbps、上行50Mbps,。LTE-TDD(國內(nèi)通常稱為TD-LTE)的實際速率會隨上,、下行子幀的配比關(guān)系而變化。
[1][2][3][4]是主要的幾個LTE 物理層協(xié)議文本,。[1]描述了上,、下行發(fā)射機(jī)從星座點調(diào)制到基帶信號上變頻之間的處理步驟,通常稱為符號級處理,。[2]描述了星座點調(diào)制之前的處理步驟,,通常稱為比特級處理。[3]描述了各種物理層過程,。[4]描述了各種物理層測量。
LTE 的上行物理信道信道包括用來傳輸數(shù)據(jù)和物理層隨路控制信令的PUSCH,,專門用來傳輸物理層控制信令的PUCCH,,用于隨機(jī)接入的PRACH,,以及用于上行信道探測的SRS。下行物理信道包括用來傳輸數(shù)據(jù)的PDSCH,,用來傳輸各種物理層控制信令的控制信道PCFICH,、PHICH和PDCCH。
本文描述的是LTE 上行基帶前端處理,。如圖1 所示,,LTE 上行基帶前端處理包括從天線接口接收時域數(shù)據(jù),以及隨后的時頻變換,。LTE 中所有上行信道接收機(jī)的第一步都是把信號從時域變到頻域,,這是上行基帶前端處理最主要的任務(wù)。PRACH 采用和其它上行物理信道不同的時頻結(jié)構(gòu),,因此,,前端時頻變換需要做兩次,一次用于PRACH,,一次用于其它上行物理信道,。本文把前者稱為“PRACH 前端時頻轉(zhuǎn)換”,把后者稱為“上行前端FFT”,。
TI 推出了一系列用于LTE 基站基帶處理的SoC(System On Chip),。這些SoC 基于TI 的KeyStone 架構(gòu),該架構(gòu)目前已演進(jìn)了兩代——KeyStone I 和KeyStone II,。KeyStone I 家族基于40nm 工藝,,包括如下基帶SoC 器件型號:
• TCI6616,詳細(xì)資料參見[5]
• TCI6618,,詳細(xì)資料參見[6]
• TCI6614 和TCI6612,,詳細(xì)資料參見[7]和[8]
• TMS320C6670,詳細(xì)資料參見[9]
KeyStone II 家族基于28nm 工藝,,包括如下基帶SoC 器件型號:
• TCI6636K2H,,詳細(xì)資料參見[10]
• TCI6634K2K,詳細(xì)資料參見[11]
• TCI6638K2K,,詳細(xì)資料參見[12]
• TCI6630K2L,,詳細(xì)資料參見[13]
所有這些器件都具有多模能力,支持GSM/EDGE,、WCDMA,、TD-SCDMA、WiMAX,、LTE 的單模實現(xiàn)或混模實現(xiàn),。所有這些器件使用的DSP 核都是c66x,但個數(shù)不同,。TCI6614 和TCI6612帶一顆ARM Cortex A8,,TCI6636K2H 和TCI6638K2K 帶4 顆ARM Cortex A15,,TCI6630K2L帶2 顆A15,它們除支持物理層以外,,還支持高層(層2,,層3)和傳輸處理。這些器件也可用于基于OFDM的無線回傳(wireless backhaul),,如LTE relay 站,。
本文介紹如何在上述KeyStone 器件上實現(xiàn)高效的LTE 上行基帶前端處理。上述KeyStone 器件中,,只有TCI6630K2L 包含中頻處理模塊,,稱為DFE 模塊,該模塊通過IQNet 模塊和系統(tǒng)總線相連,。圖1 中的天線接口對TCI6630K2L 來說指的是IQNet,,對其它器件來說指的是AIF2。IQNet和AIF2 都使用PktDMA 作為對內(nèi)接口,,行為方式類似,。本文用AIF 統(tǒng)一指代IQNet 和AIF2,描述的前端處理方法同時適用于兩者,。關(guān)于KeyStone I 和II 的AIF2,,請參考[14]和[15]。關(guān)于PktDMA,,請參考[16],。天線接口一旦配置完畢,在實時運(yùn)行過程中不需要軟件干預(yù),,不產(chǎn)生實時負(fù)載,。本文重點描述時頻轉(zhuǎn)換。對天線接口,,僅描述其與時頻轉(zhuǎn)換交互的部分,。
基帶前端工作在基帶時域采樣率上,對20MHz 載波通常為30.72Msps,,而系統(tǒng)中通常存在多個這樣的數(shù)據(jù)流,,對應(yīng)多天線和/或多載波。對這樣高速的數(shù)據(jù)流做處理,,效率至關(guān)重要,,應(yīng)盡量減少對處理資源、存儲資源,、總線資源的占用,。上行基帶前端的處理效率是基帶整體效率的重要組成部分。本文給出了在KeyStone 器件上用FFTC 硬件加速器完成盡可能多的時頻轉(zhuǎn)換,并將天線接口和兩類時頻轉(zhuǎn)換用EDMA 進(jìn)行直連的方法,。該方法使相關(guān)的軟件負(fù)載降至最低,,并且盡可能地降低對內(nèi)存和總線的占用。本文還給出了由c66x 和FFTC 共同完成PRACH 時頻轉(zhuǎn)換的方法,,并給出了實測負(fù)載。該方法減少了對FFTC,、內(nèi)存,、總線的占用,但增加了c66x 負(fù)載,。用戶可根據(jù)自身系統(tǒng)的資源消耗情況選擇不同的PRACH 時頻轉(zhuǎn)換方法,。關(guān)于EDMA,請參考[17],。關(guān)于FFTC,,請參考[18]。
本文中的“符號”默認(rèn)指的是OFDM符號,。
2,、上行前端FFT
圖2 以單片TCI6634K2K 或TCI6638K2K 實現(xiàn)2 個8 天線TD-LTE 載扇為例,描述了上行前端FFT 的設(shè)計,,包括對Tx/Rx 通道,、flow、Q(本文用Q 表示硬件隊列),、Tx 和Rx 描述符,、Acc(本文用Acc 表示Accumulator)等物理資源的使用,以及描述符的傳遞路徑,。相關(guān)的原理和更多的細(xì)節(jié)參見以下各節(jié),。
雖然這里以單片TCI6634K2K/TCI6638K2K 實現(xiàn)8 天線TDD 雙載扇為例,本文描述的設(shè)計實際上適用于在所有KeyStone 器件上實現(xiàn)各種部署場景,。注意,,對于TCI6634K2K/TCI6638K2K,當(dāng)不要求所有載扇同時達(dá)到最高規(guī)格(比如在所有RB 上執(zhí)行帶信道估計時域內(nèi)插的MU-MIMO IRC均衡,,下行每載扇瞬時數(shù)據(jù)流量300Mbps,,每載扇400 個激活用戶等)且經(jīng)過充分優(yōu)化時,單片可支持8 天線TDD 三載扇,。
該設(shè)計以一個載扇為基本設(shè)計單位,。多載扇時,每個載扇使用相同的設(shè)計,,但可以配置不同的硬件資源,。考慮到一個FFTC 可以在一個符號周期內(nèi)完成8 次帶1/2 子載波頻偏校正的2048 點FFT,為簡單起見,,要求一個載扇的上行前端FFT 處理由一個FFTC 完成,。
圖2 中的例子采用的物理層核間分工策略是:8 個c66x 核分為2 組,核0~3 是一組,,核4~7 是另一組,,每組處理一個載扇。對第一組:核0 和核1 處理PUSCH,,其中信道估計按天線分工,,均衡按時隙分工;核2 處理PUCCH 和PRACH,;核3 處理下行和SRS,,包括上行子幀最后一個符號上的SRS,以及UpPTS 內(nèi)的SRS,。第二組內(nèi)的核間分工與第一組相同,。
2.1 FFTC Tx 側(cè)設(shè)計
AIF 每收齊一根天線上的一個完整符號,就把一個包push 到一個RxQ 中,。本設(shè)計假設(shè)一個載扇的NA根接收天線與基帶之間的延時是相同的,,則對一個符號,NA根天線對應(yīng)的NA個包幾乎同時被AIF 的Rx PktDMA push 到RxQ 中,。為避免對Rx 描述符的回收操作,,可把AIF 的RxQ 和Rx FDQ 配置成同一個Q。除了AT timer,,其它關(guān)于AIF 的部分沒有在圖2 中畫出,。
AIF 和FFTC 之間的直連不是通過AIF 的Rx PktDMA 把接收包直接push 到FFTC 的TxQ 來實現(xiàn)的。實際上,,AIF 可以通過內(nèi)部的AT timer 產(chǎn)生符號級事件,,在一個符號的NA個Rx 包被push 到RxQ 之后,立即產(chǎn)生一個系統(tǒng)事件,。該事件被用于觸發(fā)一個EDMA 操作,,該操作把NA個包push到FFTC 的TxQ 中。稱該EDMA 為FFT 入隊EDMA,。
對TD-LTE,,AIF 可以做到只接收上行子幀和UpPTS 內(nèi)的符號數(shù)據(jù),但無法屏蔽其它符號對應(yīng)的AT timer 事件,。FFT 入隊EDMA 接收所有的AT timer 事件,,但僅為上行符號對應(yīng)的事件執(zhí)行入隊操作。
為了給應(yīng)用提供盡可能多的靈活性,,為一個子幀內(nèi)的每個【符號,,天線】分配一個FFTC Tx 描述符,并使用描述符的PS data 承載FFTC 本地配置(Local Configuration)。記一個子幀的符號數(shù)為??sym,,則需要分配??symNA個Tx 描述符,,每個描述符的大小是64B。這樣,,應(yīng)用可以在初始化時為每個【符號,,天線】配置任意的參數(shù),如destination Q,、output scaling 等,。
用Acc 對Tx return Q 中的描述符進(jìn)行自動回收,但不需要產(chǎn)生Acc 中斷或EDMA 事件,。為了正常工作,Acc 要求在一個乒或乓List Buffer Page 滿了之后,,向Interrupt N Count 寄存器寫1,,作為應(yīng)用對Acc 的響應(yīng)。因為不需要產(chǎn)生Acc 事件,,響應(yīng)時不需要寫EOI 寄存器,。
結(jié)合以上幾點,F(xiàn)FT 入隊EDMA 的設(shè)計如圖3 和圖4 所示,。
圖3 以Normal CP 為例給出了FDD 時的設(shè)計,。此時用到了3 個PaRAM set:PaRAM set 0 只用一次,為系統(tǒng)啟動后的第一個上行子幀的符號執(zhí)行FFTC 入隊操作,;PaRAM set 2 以子幀為單位被周期性地使用,,為第一個上行子幀之后的所有上行符號執(zhí)行入隊操作;PaRAM set 1 用于在每個上行子幀開始時,,響應(yīng)前一個上行子幀的Acc 操作,。注意,為了使Acc 操作正常,,這里實際上有一個隱性前提:Acc 總能以略短于一個符號的延時處理完被FFTC 的Tx PktDMA push 進(jìn)Tx return Q 的描述符,。該條件在通常的Acc 負(fù)載下都能被滿足。對Extended CP,,只要把PaRAM set 0 和2 中的CCNT 從14 改為12 即可,。
FFT 入隊EDMA 在處理完入隊操作后,通過chain 機(jī)制產(chǎn)生PRACH 觸發(fā)事件,,該事件將觸發(fā)PRACH 前端時頻轉(zhuǎn)換,。
圖4 以“UL/DL 配置6、特殊子幀配置5~8(UpPTS 包含2 個符號),、Normal CP”為例給出了TDD 時的FFT 入隊EDMA 設(shè)計,。在該系統(tǒng)配置下,用到了8 個PaRAM set:
• PaRAM set 0 只用一次,用于消耗掉系統(tǒng)啟動后的第一個UpPTS 之前的所有AT timer 事件,,不執(zhí)行有實際意義的數(shù)據(jù)搬移操作,。
• PaRAM set 2 和5 以無線幀為單位被周期性地使用,分別為一個無線幀的前,、后半幀中的所有上行子幀的符號執(zhí)行FFTC 入隊操作,。
• PaRAM set 1 和4 分別為一個無線幀的前、后半幀中的UpPTS 符號執(zhí)行FFTC 入隊操作,。
• PaRAM set 3 和6 負(fù)責(zé)消耗掉非上行符號對應(yīng)的AT timer 事件,。
• PaRAM set 7 響應(yīng)前一個操作周期的Acc 操作,這里的操作周期指的是從一個無線幀的第一個UpPTS 開始的一個10ms,。
對UL/DL 配置6,,需要為前、后半幀的上行子幀集合,、UpPTS,、其它符號集合的AT timer 事件響應(yīng)使用不同的PaRAM set,這是因為兩個半幀包含的上行子幀數(shù)是不一樣的,。對其它所有UL/DL配置,,只需要5 個PaRAM set,對應(yīng)的操作周期等于上下行切換周期(UL/DL 配置0~2 是5ms,,3~5 是10ms),。
不論是FDD 還是TDD,服務(wù)于上行子幀或UpPTS 的PaRAM set 使用AB-sync,,每次事件觸發(fā)當(dāng)前上行符號的NA個Tx 描述符的FFTC 入隊操作,。CCNT 等于該上行子幀集合或UpPTS 包含的符號數(shù)。
上行子幀集合和UpPTS 對應(yīng)的PaRAM set 使用的源buffer 的大小,,以及Acc 的List Buffer Page的大小,,參見圖2。
對TDD,,如果當(dāng)前載扇使用的是長RACH(PRACH preamble 格式0~3),,上行子幀中的FFT入隊EDMA 在處理完入隊操作后,還需通過chain 機(jī)制產(chǎn)生長RACH 觸發(fā)事件,,該事件將觸發(fā)針對長RACH 的前端時頻轉(zhuǎn)換,;如果當(dāng)前扇區(qū)使用的是短RACH(PRACH preamble 格式4),UpPTS 中的FFT 入隊EDMA 通過chain 機(jī)制產(chǎn)生短RACH 觸發(fā)事件,,觸發(fā)針對短RACH 的前端時頻轉(zhuǎn)換,。一個TDD 小區(qū)不會同時使用長RACH 和短RACH,因此這兩類PRACH 觸發(fā)事件不需要同時配置,。注意,,AIF 無法屏蔽非上行符號對應(yīng)的AT timer 事件,,但是,經(jīng)過FFT 入隊EDMA 的過濾,,PRACH 前端時頻轉(zhuǎn)換功能模塊只會收到上行子幀對應(yīng)的符號級事件,。
圖5 以TDD 8 天線、normal CP 為例描述了Tx 描述符的配置,。所有的配置域都是靜態(tài)的,,也就是說,只需要在小區(qū)建立或重配時配置,,實時運(yùn)行過程中無需修改,。大部分配置域的取值對上行前端FFT 應(yīng)用來說是確定的,也有一些域的配置具有一定程度的靈活度,,可根據(jù)算法,、軟件框架、資源分配等方面的考慮靈活配置,,這些域在圖5 中用下劃線標(biāo)識,,并說明如下。
• Return Q 和flow 根據(jù)應(yīng)用的硬件資源分配進(jìn)行配置,。
• 為了盡可能節(jié)省內(nèi)存,這個例子為AIF 接收數(shù)據(jù)使用符號級乒乓緩存,。掛在Tx 描述符上的buffer 指針根據(jù)該描述符對應(yīng)的【符號,,天線】指向16 個buffer 中的一個。AIF 使用的是monolithic 描述符,,這種描述符的凈荷直接跟在描述符頭的后面,。為了避免數(shù)據(jù)搬移,F(xiàn)FTC Tx 描述符的buffer 指針直接指向AIF Rx monolithic 描述符中凈荷的起始位置,。注意,,即使不按符號乒乓設(shè)計AIF 接收數(shù)據(jù)緩存,其它方面的設(shè)計無需變化,,只影響Tx 描述符中buffer 指針的配置,。
• 這個例子使用了FFTC 的動態(tài)scaling 功能,使FFT 計算過程完全不發(fā)生飽和截位,,同時每步蝶形運(yùn)算的輸入數(shù)據(jù)都有最大有效位寬,,因而獲得最高的計算精度。此時,,每個【符號,,天線】的FFT 輸出數(shù)據(jù)塊的定標(biāo)各不相同,應(yīng)用應(yīng)使能FFTC 的side information 輸出,,該信息包括FFTC 內(nèi)部實際執(zhí)行的各級scaling 的總和,,應(yīng)用在隨后的信道估計,、測量、均衡處理中應(yīng)考慮到各【符號,,天線】上的scaling 的不同,,執(zhí)行必要的定標(biāo)對齊。應(yīng)用也可以不使用動態(tài)scaling,,直接配置各級蝶形運(yùn)算之前的移位量。無論使用動態(tài)還是靜態(tài)scaling,,都需要配置靜態(tài)的output scaling factor 參數(shù),。該參數(shù)限制了FFT 輸出I/Q 分量的最大幅度,應(yīng)用可根據(jù)隨后的信道估計和均衡所執(zhí)行的計算,,分別限制導(dǎo)頻符號和數(shù)據(jù)符號的FFT 輸出最大幅度,,使隨后的計算在不出現(xiàn)飽和或溢出的情況下具有盡可能高的有效數(shù)據(jù)位寬。這個例子把output scaling factor 配置成了0x40,,這使得輸出數(shù)據(jù)的I/Q 分量最大幅度是Q15 定標(biāo)下的1/2,,也就是說,輸出復(fù)樣本的最大幅度是Q15 定標(biāo)下的1,。不使用動態(tài)scaling 時,,通常不需要使能side information 輸出。
• 上行前端FFT 通過將Rx 描述符push 進(jìn)相應(yīng)的QPend RxQ 來通知c66x 核,,從而啟動信道估計或均衡,。在這個例子中,一個核處理天線0~3 的信道估計,,另一個核處理天線4~7 的信道估計,,因此:每個導(dǎo)頻符號上的天線3 的Rx 包被push 進(jìn)一個QPend Q,觸發(fā)前一個核上的信道估計,;每個導(dǎo)頻符號上的天線7 的Rx 包被push 進(jìn)另一個QPend Q,,觸發(fā)后一個核上的信道估計。另外,,子幀中最后一個符號上的天線7 的Rx 包被push 進(jìn)第3 個QPend Q,,該QPend Q 觸發(fā)均衡。剩下的所有【符號,,天線】對應(yīng)的Rx 包進(jìn)一個General Purpose Q,。對不同的核間分工,觸發(fā)c66x 核的細(xì)節(jié)也會不同,,但只影響Tx 描述符中的destination Q 的配置,,其它方面的設(shè)計不變。
o 本設(shè)計用FFTC 提供的destination Q 本地配置域指定RxQ,。其實還可以把FFTC 本地配置中的destination Q 配置成無效值(0x3FFF),,然后配置多個flow,,為每個flow配置不同的destination Q,并為每個【符號,,天線】的Tx 描述符指定相應(yīng)的flow,。
o 如果一個上行子幀的最后一個符號是SRS 符號,當(dāng)PUSCH 和SRS 由不同的核處理時,,收到QPend 中斷的PUSCH 核應(yīng)向SRS 核發(fā)送核間中斷,,觸發(fā)后者的SRS 處理。
• UpPTS 使用和上行子幀不同的flow,。UpPTS 符號統(tǒng)一由一個核來處理,,每個UpPTS 符號的最后一根天線對應(yīng)的Rx 包觸發(fā)對該符號的處理。UpPTS 也采用符號級乒乓緩存,,且和上行子幀共用緩存,,但需要注意,當(dāng)UpPTS 僅含一個符號時,,該符號使用的是乓(而非乒)緩存,。
Front-end FFT Tx packet 0~14*8-1 for UL TTI
圖5: 上行前端FFT Tx 描述符配置(例子:同圖2)
2.2 FFTC Rx 側(cè)設(shè)計
在Tx 側(cè),在一個符號內(nèi)接收到的時域天線數(shù)據(jù)可以由FFTC 在下一個符號內(nèi)處理完畢,,因此可以使用符號級乒乓緩存,。在Rx 側(cè),F(xiàn)FTC 輸出的頻域數(shù)據(jù)需要被PUSCH,、PUCCH,、SRS 接收機(jī)處理,其中PUSCH 和PUCCH 處理不是符號級的,,需要對整個子幀的數(shù)據(jù)做綜合處理,且處理時間較長,,理論上只要在該子幀全部收齊后1ms 內(nèi)處理完即可,。因此,Rx 側(cè)數(shù)據(jù)的生存期較長,,需要使用子幀級乒乓緩存,。
如前所述,在圖2 所示的例子中,,上行前端FFT 之后,,PUSCH 導(dǎo)頻符號按天線在雙核間分工,PUSCH 數(shù)據(jù)符號按時隙分工,。數(shù)據(jù)符號按時隙分工的優(yōu)點是:當(dāng)使用IRC 均衡算法時,,每個RB的所有RE 共用一個噪聲干擾空間相關(guān)陣Rn,因此,,把一個RB 的所有RE 的處理集中在一個核上,,有利于核盡可能多地復(fù)用加載到寄存器中的Rn元素,,執(zhí)行效率更高;當(dāng)不做時域信道估計內(nèi)插時,,一個子載波在一個時隙內(nèi)的6 個數(shù)據(jù)RE 共用一個信道估計矩陣H,,因此,把一個子載波在一個時隙內(nèi)的所有RE 的處理集中在一個核上,,有利于核盡可能多地復(fù)用加載到寄存器中的H元素,,執(zhí)行效率更高。對不同的核間分工,,基本設(shè)計不變,,只是Rx 描述符中的buffer 指針會有不同的配置,宗旨是盡量把FFT 輸出數(shù)據(jù)直接送到將要處理該數(shù)據(jù)的那個核的LL2,,以使隨后的處理有盡可能高的執(zhí)行效率,。
和Tx 側(cè)類似,在Rx 側(cè),,用Acc 對Rx General Q 中的描述符進(jìn)行自動回收,,但不需要產(chǎn)生Acc中斷或EDMA 事件。為了正常工作,,Acc 要求在一個乒或乓List Buffer Page 滿了之后,,向Interrupt N Count 寄存器寫1,作為應(yīng)用對Acc 的響應(yīng),。因為不需要產(chǎn)生Acc 事件,,響應(yīng)時不需要寫EOI 寄存器。Tx 側(cè)的響應(yīng)由EDMA 完成,,Rx 側(cè)的響應(yīng)由核完成,。對FDD,Rx 側(cè)的Acc 響應(yīng)周期是一個子幀,;對TDD UL/DL 配置0~5,,響應(yīng)周期是UL/DL 切換周期;對TDD UL/DL 配置6,,響應(yīng)周期是10ms,。對FDD,Rx 側(cè)的Acc 響應(yīng)在“TTI 配置函數(shù)”中實現(xiàn),;對TDD,,該響應(yīng)在“UpPTS 配置函數(shù)”中實現(xiàn)。“TTI 配置函數(shù)”和“UpPTS 配置函數(shù)”的主要任務(wù)是修改Rx描述符中的動態(tài)域,,并完成Rx FDQ 入隊,,參見后面關(guān)于Rx 描述符配置的部分。注意,,Acc 不處理進(jìn)入QPend Q 的Rx 描述符——如圖2 所示,,這些Rx 描述符的回收由中斷處理函數(shù)執(zhí)行,。
為了盡量減少實時運(yùn)行時修改Rx 描述符所引入的開銷,為兩個子幀內(nèi)的每個【符號,,天線】分配一組FFTC Rx 描述符,。當(dāng)軟件架構(gòu)要求FFT 輸出的PUSCH 和PUCCH 數(shù)據(jù)分開存放時,每個Rx 包由5 個描述符鏈接而成,;當(dāng)不要求這樣的PUSCH/PUCCH 數(shù)據(jù)分離時,,每個Rx 包由3 個描述符鏈接而成。因此,,總共需要分配的Rx 描述符個數(shù)是2 ? ??sym ? ??A ? 5或2 ? ??sym ? NA? 3,。每個Rx 描述符的大小是32B。
一次FFT 的輸出數(shù)據(jù)塊格式如圖6 所示——先是16 字節(jié)的side information(如果使能的話),,然后是低頻側(cè)保護(hù)子載波,,接著是PUCCH 低頻側(cè)RB、PUSCH RB,、PUCCH 高頻側(cè)RB,,最后是高頻側(cè)保護(hù)子載波。FFTC 的Rx PktDMA 不能自動去除兩邊的保護(hù)子載波,。為了減少內(nèi)存占用,,可以讓所有FFT 輸出數(shù)據(jù)塊的左側(cè)和右側(cè)保護(hù)段都輸出到同一塊內(nèi)存中。
對PUSCH/PUCCH 數(shù)據(jù)分離的情況,,圖7 以動態(tài)scaling 為例描述了上行子幀Rx 描述符的配置,。Rx PktDMA 為每個FFT 輸出塊從Rx FDQ 中pop 出5 個描述符,將這5 個描述符鏈接成一個Rx包,,按順序?qū)⑤敵鰯?shù)據(jù)塊(包括side information)寫入這5 個描述符提供的5 個buffer,,再將這個包的SOP 描述符(也就是構(gòu)成這個包的第一個描述符)push 到RxQ 中。因為每個上行子幀中實際承載PUCCH 的RB 數(shù)是動態(tài)變化的(實際上,,頻段外側(cè)用于2 類格式的RB 數(shù)是半靜態(tài)配置的,,內(nèi)側(cè)用于1 類格式的RB 數(shù)動態(tài)變化的),所以,,用于PUSCH 和PUCCH 的Rx 描述符中的original buffer length 域需要根據(jù)當(dāng)前上行子幀實際包含的PUCCH RB 數(shù)進(jìn)行修改。另外,,當(dāng)存在位于上行子幀的SRS 符號,,且軟件架構(gòu)要求SRS 使用和PUSCH 最后一個數(shù)據(jù)符號不同的buffer 時,上行子幀中最后一個符號對應(yīng)的用于PUSCH 的Rx 描述符中的original buffer pointer域也需要根據(jù)該符號屬于PUSCH 還是SRS 動態(tài)更新,。注意,,SRS 符號上的PUCCH RB 數(shù)和非SRS 符號可能不同(SRS 可能使PUCCH 1 類格式采用協(xié)議中定義的shortened 格式)。上行子幀Rx 描述符動態(tài)域的修改以及它們的Rx FDQ 入隊操作都在“TTI 配置函數(shù)”中完成,,該函數(shù)必須在相應(yīng)上行子幀開始之前,、在該上行子幀之前使用相同的乒或乓描述符集合的最近上行子幀結(jié)束之后調(diào)用,。為降低核負(fù)載,TTI 配置函數(shù)用EDMA 完成Rx 描述符的修改和入隊,,啟動后無需等待傳輸結(jié)束,,最多需要3 個EDMA 通道,分別對應(yīng)非最后一個符號的Rx 描述符修改,、最后一個符號的Rx 描述符修改,、Rx 描述符入Rx FDQ。
在圖7 中,,對乒或乓,,高頻側(cè)保護(hù)段的輸出地址是固定的,低頻側(cè)保護(hù)段的輸出地址按照FFTC實際處理的【符號,,天線】順序從左向右遞進(jìn),,每次增加16B,目的是保存一個子幀中每個【符號,,天線】對應(yīng)的side information,。Side information 區(qū)域必須是子幀級乒乓的,導(dǎo)致保護(hù)段區(qū)域也不得不按乒乓分配,。
當(dāng)不要求PUSCH 和PUCCH 數(shù)據(jù)分離時,,每個Rx 包由3 個描述符鏈接而成,PUCCH 位于每個buffer 的兩側(cè),。
圖8 以動態(tài)scaling 為例描述了UpPTS Rx 描述符的配置,。和上行子幀相比,UpPTS 沒有PUSCH/PUCCH 分離的問題,,所以一個Rx 包總是由3 個描述符鏈接而成,,而且描述符的所有域都是靜態(tài)域,不需要動態(tài)修改,。UpPTS Rx 描述符的Rx FDQ 入隊操作在“UpPTS 配置函數(shù)”中完成,,該函數(shù)必須在相應(yīng)UpPTS 開始之前、前一個UpPTS 結(jié)束之后調(diào)用,。為降低核負(fù)載,,用EDMA 完成描述符入隊。注意,,對TDD UL/DL 配置6,,“UpPTS 配置函數(shù)”每半幀調(diào)一次,但Rx 側(cè)Acc 響應(yīng)每10ms 只需執(zhí)行一次,。
圖9 以單片TCI6634K2K/TCI6638K2K 實現(xiàn)3 載扇為例描述了從QPend 事件到核中斷的傳遞路徑實例,。在這個例子中:
• 分配給每載扇的3 個QPend Q 的Q 編號分別是652/653/654、655/656/657、658/659/660,。
• 每個核的QPend 中斷索引都是10,。
• 核0/1、2/3,、4/5 分別處理三個載扇的PUSCH,。PUSCH 導(dǎo)頻符號按天線分工,數(shù)據(jù)符號按時隙分工,。每對核中的第一個核只需接收導(dǎo)頻符號上第NA⁄2 − 1(從0 開始編號)根天線對應(yīng)的QPend 中斷(觸發(fā)信道估計,,而均衡可以在第二個時隙的信道估計完成后立即執(zhí)行);第二個核既要接收導(dǎo)頻符號上最后一根天線對應(yīng)的QPend 中斷(觸發(fā)信道估計),,還要接收最后一個數(shù)據(jù)符號上最后一根天線對應(yīng)的QPend 中斷(觸發(fā)均衡),。
• 核6 處理前載扇0 和2 的PUCCH,核7 處理載扇1 的PUCCH,。因此,,每個QPend Q 654/657/660 事件要傳遞到2 個核(載扇0 是核1 和核6,載扇1 是核3 和核7,,載扇2 是核5 和核6),。
關(guān)于TCI6634K2K/TCI6638K2K 的內(nèi)部事件路由,參見[19],。關(guān)于CIC(Chip Interrupt Controller),,參見[20]。
2.3 硬件資源需求
對每個載扇,,上行前端FFT 所需的硬件資源如下:
• 1 個FFTC 實例,。
• 該FFTC 實例上的1 個Tx/Rx 通道(和該FFTC 實例的一個TxQ 綁定)。
• 1 個用于上行子幀的flow,。TDD 時,,還需1 個用于UpPTS 的flow。
• 1 個Tx return Q,,1 個用于上行子幀的Rx FDQ,,1 個Rx General Q,若干個Rx QPend Q(具體個數(shù)由核間分工確定,,比如:當(dāng)PUSCH 雙核處理,,PUCCH 在另一個核上處理時,需要3 個,;當(dāng)單核處理單載扇時,,只需1 個)。TDD 時,,還需1 個用于UpPTS 的Rx FDQ。
• ??sym??A個用于上行子幀的Tx 描述符。TDD 時,,還需??UpPTS,sym??A個用于UpPTS 的Tx 描述符,。每個Tx 描述符的大小是64B。
• 2 ? ??sym ? ??A ? 5(要求PUSCH/PUCCH 數(shù)據(jù)分離時)或2 ? ??sym ? ??A ? 3(不要求數(shù)據(jù)分離時)個用于上行子幀的Rx 描述符,。TDD 時,,還需??UpPTS,sym ? ??A ? 3個用于UpPTS 的Rx 描述符。每個Rx 描述符的大小是32B,。
• 用于Tx 和Rx 描述符回收的Acc 所使用的PDSP 實例,。
• 用于Tx 描述符回收的Accumulator 通道,用于Rx 描述符回收的Accumulator 通道,。
• Tx 側(cè)TxQ 入隊EDMA 用到的1 個CC 實例,,1 個TC 實例,1 個EDMA 通道,,3(FDD),、5(TDD UL/DL 配置0~5)或8(TDD UL/DL 配置6)個PaRAM set。
• Rx 側(cè)為上行子幀用到了3 個EDMA 通道,,分別對應(yīng)非最后一個符號的Rx 描述符修改,、最后一個符號的Rx 描述符修改、Rx FDQ 入隊,。每類操作涉及1 個CC 實例,,1 個TC 實例,1個EDMA 通道,,1 個PaRAM set,。Rx FDQ 入隊也可以改用QDMA,其它兩類操作涉及3D搬移,,只能用EDMA,。TDD 時,只要在使用時間上不沖突,,針對上行子幀和針對UpPTS 的操作可以合用一套資源,。
• Acc 內(nèi)存資源:
o 用于Tx 描述符回收的List Buffer Page:
l FDD 時,以子幀為單位乒乓,,總大小為字節(jié),。
l TDD UL/DL 配置0~5 時,以UL/DL 切換周期為單位乒乓,,總大小為字節(jié),,其中??TTI表示一個UL/DL 切換周期包含的上行子幀數(shù)。
l TDD UL/DL 配置6 時,,以10ms 為單位乒乓,,總大小為字節(jié)。
o 用于Rx 描述符回收的List Buffer Page:
l FDD 時,以子幀為單位乒乓,,總大小為字節(jié),,其中??TTI,QPend表示一個上行子幀中進(jìn)入QPend Q 的Rx 包個數(shù)。
l TDD UL/DL 配置0~5 時,,以UL/DL 切換周期為單位乒乓,,總大小為字節(jié),其中??UpPTS,QPend表示一個UpPTS 中進(jìn)入QPend Q 的Rx 包個數(shù),。
l TDD UL/DL 配置6 時,,以10ms 為單位乒乓,總大小為字節(jié),。
只要處理能力足夠,,多個載扇可以共用一個FFTC 實例、一個CC 甚至TC 實例,。多扇區(qū)通常共用一個Acc PDSP 實例,。所有用于通知某個核或某組核的QPend 事件可以來自同一個QPend Q,軟件通過從中pop 出的描述符地址辨別事件類型,。其它資源通常不適合多載扇共用,,需要為每個載扇單獨(dú)分配。
2.4 C66x 核負(fù)載測量
采用本設(shè)計,,大部分配置工作在小區(qū)建立或重配時完成,,需要在實時運(yùn)行過程中調(diào)用的函數(shù)僅限于TTI 配置函數(shù)和UpPTS 配置函數(shù)。表1 給出了TTI 配置函數(shù)的實測cycle 數(shù),。TTI 配置函數(shù)的任務(wù)主要是響應(yīng)Acc 以及配置/啟動用于Rx 描述符修改和入隊的3 個EDMA,,因為無需等待EDMA 傳輸結(jié)束,所以該函數(shù)的負(fù)載和天線數(shù)無關(guān),。UpPTS 配置函數(shù)的負(fù)載比TTI 配置函數(shù)更低,,此處從略。本測試使用TCI6638K2K EVM,;L1P/L1D cache 初始狀態(tài)都為cold,,也就是說,函數(shù)開始執(zhí)行時,,代碼和數(shù)據(jù)都不在L1 cache 中,。
3、PRACH 前端時頻轉(zhuǎn)換
圖10 給出了PRACH 接收機(jī)的流程圖,,本章描述的PRACH 前端時頻轉(zhuǎn)換包括去CP 和轉(zhuǎn)換至頻域這兩個步驟,。
本文用短RACH 指代PRACH preamble 格式4,用長RACH 指代其它格式,。表2 給出了各種小區(qū)帶寬情況下,,長,、短RACH 的前端時頻轉(zhuǎn)換所需的DFT 原始長度。下面分情況描述時頻轉(zhuǎn)換方案設(shè)計:
• 長RACH:
o 對20,、15,、10MHz 小區(qū),F(xiàn)FTC 不支持DFT 原始長度,,需要采用間接的時頻轉(zhuǎn)換法,具體分為兩種:
l 大點DFT 法,。該方法主要使用FFTC,,輔以少量的核處理,直接完成一個大點數(shù)的DFT,。參見3.1 節(jié),。
l 混合法。該方法使用核完成下變頻和濾波降采樣,,然后用FFTC 在降低后的采樣率上執(zhí)行小點DFT。參見3.2 節(jié),。
o 對更窄帶寬的小區(qū),,可以直接用FFTC 執(zhí)行DFT。參見3.3 節(jié),。
•短RACH:
o 總是可以直接用FFTC 執(zhí)行DFT,。參見3.4 節(jié)。
3.1 長RACH——大點DFT 法
本節(jié)先描述原理,,再給出實現(xiàn)方案,。
3.1.1 原理
一個長度為N 的序列??(??)的N 點DFT 定義為
其中??是時間索引,??是頻率索引,,,。大點DFT 法直接實現(xiàn)一個長度超過FFTC 支持范圍的FFT。用于實現(xiàn)快速DFT 的FFT 算法通??梢苑譃闀r域抽取法(DIT)和頻域抽取法(DIF)兩類,。當(dāng)計算完整的DFT 時,DIT 和DIF 的計算復(fù)雜度是一樣的,。但是,,PRACH 前端時頻轉(zhuǎn)換實際上只需要計算一部分X(??),比如,,對20MHz 小區(qū),、頻域僅1 個opportunity 的情況,N=24576,,但真正需要的X(??)只有839 點,。通過對比分析可知,,只有DIT 可以利用到這個應(yīng)用特性降低核負(fù)載。因此,,我們選擇采用DIT 法,。
DIT 法將一個N 點DFT 分解成P 個N/P 點DFT 的方式為
定義????(??) = ??(P ? ??+ ??);??= 0,1,?,N⁄P − 1,下標(biāo)??= 0,1,?, P − 1,,定義F??(??)是????(??)的N/P點DFT,,并注意到= WN⁄P,,可得
進(jìn)一步地,,定義??= ??′+ ??′? N⁄P,??′= 0,1,?,N⁄P − 1,,??′= 0,1,?, P − 1,,因為F??(??)以N/P 為周期,,且X(??)可以拆分成如下的多個表達(dá)式
其中??′= 0,1,?,N⁄P − 1。這組表達(dá)式可以用圖11 表示,,并描述如下:
1. 對輸入N 點序列做P 點抽取,獲得P 個子序列,,每個子序列的長度是N/P,。
2. 分別對P 個子序列做N/P 點DFT 運(yùn)算,得到F??(??),,??= 0,1,?, P − 1,,??= 0,1,?,N⁄P − 1
3. 第p 個子序列F??(??)點乘。
4. 對第3 步輸出的P 個子序列,,執(zhí)行P 點“塊DFT”,,相當(dāng)于每次取P 個子序列相同位置上的點,構(gòu)成一個P 點序列,,然后對該P(yáng) 點序列執(zhí)行P 點DFT,第m 次P 點DFT 輸出的P 個結(jié)果對應(yīng)X(??), X(??+ N/P),?, X(??+ (P − 1) ? N/P),。
對20MHz 小區(qū),,按照FFTC 支持的DFT 長度對整個24576 點序列做分割,有24576 = 8192*3 =6144*4 = 4096*6 = 3072*8 = 2048*12 = ……,,對應(yīng)的抽取因子P 分別是3,、4、6,、8,、12 等,。對P 的選取應(yīng)綜合考慮以下因素:
• C66x 核負(fù)載。P 越大,,步驟3 和4 涉及的計算量就越大,。
• 抽取EDMA 的配置復(fù)雜度。如前一章所述,,AIF 收到的上行時域天線數(shù)據(jù)是按符號乒乓緩存的,,為了用EDMA 完成P 點抽取,最直接的方法是在FFT 入隊EDMA 完成后,,觸發(fā)另一個EDMA 把當(dāng)前符號的時域數(shù)據(jù)以P 點抽取的方式搬到別的地方去,。為了EDMA 配置的簡單性,一個符號內(nèi)的樣本數(shù)最好是P 的倍數(shù),。對20M小區(qū)、normal CP 場景,,為了滿足此需要,,P只能等于1,、2,、4、8,、16,。
• FFTC 執(zhí)行效率。根據(jù)[21],,1GHz KeyStone 器件上的一個FFTC 的流量在DFT 長度為8192,、6144、4096,、3072,、2048 時分別為378、360,、437,、413、431 Msps,。不同長度對應(yīng)的流量有較為可觀的差異,,比如,4096 點時的流量比6144 點時高21.4%,。
綜合考慮以上因素,,本文推薦使用P=4 作為20MHz 小區(qū)的抽取因子,對應(yīng)6144 點DFT,。對15和10MHz 小區(qū),,假設(shè)采樣率按帶寬等比下降,,則PRACH 序列長度從20M 時的24576 降為18432 和12288。對這兩類小區(qū)帶寬,,分別使用P=3 和2,,而保持6144 作為DFT 點數(shù)。這樣的選擇偏向更輕的核負(fù)載和EDMA 配置簡單性,,犧牲了一些FFTC 執(zhí)行效率,。
3.1.2 實現(xiàn)
如上所述,基于DIT 的大點DFT 有4 個處理步驟,。實現(xiàn)時,,步驟1(P 點抽取)由EDMA 完成,,步驟2 由FFTC 完成,,步驟3 和4 由c66x 核完成。
抽取EDMA 需要用到2 個EDMA 通道,,分別稱為trigger 通道和working 通道,。圖12 以“TDD UL/DL 配置1,PRACH 配置10,,20MHz,,Normal CP”為例給出了抽取EDMA 的配置細(xì)節(jié)。
根據(jù)附錄A,,在該系統(tǒng)配置下,,trigger 通道需要7 個EDMA PaRAM set 來響應(yīng)上行前端FFT 產(chǎn)生的長RACH 觸發(fā)事件。第1 個PaRAM set 只用一次,,用于響應(yīng)系統(tǒng)初始化后最初的若干上行子幀符號對應(yīng)的事件,。之后的6 個PaRAM set 以10ms 為周期重復(fù)使用,用于處理該系統(tǒng)配置下一個無線幀包含的3 個opportunity,,以及相鄰opportunity 之間不承載PRACH 數(shù)據(jù)的上行子幀符號,。對不承載PRACH 的上行子幀符號,相應(yīng)的長RACH 觸發(fā)事件不觸發(fā)實際操作,,本文稱這樣不承載實際數(shù)據(jù)搬移任務(wù)的EDMA 為dummy 類型的EDMA,。對承載PRACH 的上行子幀符號,相應(yīng)的長RACH 觸發(fā)事件通過trigger 通道的chain 機(jī)制間接觸發(fā)working 通道,,并且在觸發(fā)working 通道之前先用trigger 通道修改working 通道將要用到的PaRAM set 中的符號級動態(tài)域,。
Working 通道需要NA + 3個PaRAM set。第1 個PaRAM set 只用到1 次,,屬于dummy 類型的,。后面的NA + 2個PaRAM set 以link 加self-chain 的方式,以上行子幀符號為周期重復(fù)使用,。對每個上行子幀符號,,先執(zhí)行1 個dummy 類型的PaRAM set,,用于確保trigger 通道對接下來的NA + 1個PaRAM set 的動態(tài)域的修改已經(jīng)完成。接下來的NA個PaRAM set 用于完成NA根天線的P 點抽取,。最后1 個PaRAM set 用于在整個序列的最后一個符號處執(zhí)行FFTC TxQ 入隊操作,,非序列最后一個符號對應(yīng)的該P(yáng)aRAM set 屬于dummy 類型。
Working 通道的后NA + 1個PaRAM set 中的動態(tài)域包括SRC,、DST 和BCNT,。Trigger 通道為每個上行子幀符號執(zhí)行一次對這NA + 1個working 通道PaRAM set 的動態(tài)更新,數(shù)據(jù)源位于內(nèi)存中,,稱為PaRAM set LUT,,其內(nèi)容在小區(qū)初始化或重配時由驅(qū)動軟件配置。
對圖12 示例之外的其它系統(tǒng)配置,,基本原理是類似的,,但細(xì)節(jié)上有一些差別。
• Trigger 通道用到的PaRAM set 個數(shù)等于附錄A 表格中“EDMA 分段”列給出的值加1,。
• Trigger 通道的每個PaRAM set 負(fù)責(zé)響應(yīng)的上行子幀符號數(shù)等于附錄A 表格中“初始Dummy符號數(shù)”列或“EDMA 段內(nèi)符號數(shù)”列給出的值,。對dummy 類型的PaRAM set,這個值配置到BCNT,;對其它PaRAM set,配置到CCNT,。
• 對PRACH 格式0 和1,,一個抽取目的buffer 包含1 個PRACH 序列,僅需為最后一個符號執(zhí)行FFTC 入隊操作,。對PRACH 格式2 和3,,一個抽取目的buffer 包含2 個序列。此時,,為了在一個序列收齊之后立刻啟動FFTC,,需要為每個序列的最后一個符號執(zhí)行FFTC 入隊操作。這些都通過配置PaRAM set LUT 實現(xiàn),。
• 對PRACH 格式0,,如果兩個相鄰的上行子幀都承載了PRACH,需要分配兩個抽取目的buffer,,以子幀為單位乒乓使用,。此時,每個buffer 有自己的PaRAM set LUT,。對其它PRACH 格式,,一個buffer 就夠了,但格式2 和3 的一個buffer 實際上包含2 個序列,。
• 對PRACH 格式2 和3,,不能把一個opportunity 的兩個序列的抽取輸出連續(xù)排列,,這是因為DCIDX 域最大只有16 位(包括符號位),連續(xù)排列的話正好超出了表達(dá)范圍,。
• 對PRACH 格式2 和3,,為了讓兩個序列各自放在連續(xù)的內(nèi)存中,需要對兩個序列交接處的那個符號的抽取EDMA 做特殊處理,。為此,,對working 通道,在原有的NA + 3個PaRAM set的基礎(chǔ)上增加NA個,,這些新增的PaRAM set 不需要動態(tài)更新,,負(fù)責(zé)處理交接符號中屬于后一個序列的部分的抽取,而原有的用于抽取的NA個PaRAM set 現(xiàn)在只處理屬于前一個序列的部分,。這兩組PaRAM set 以相互交織的方式link 和self-chain,,為此,LINK 必須成為動態(tài)更新域,,以便動態(tài)改變link 目標(biāo),。
步驟2,也就是6144 點DFT,,由FFTC 完成,。這一步采用原位操作以節(jié)省內(nèi)存。推薦采用動態(tài)scaling,,此時每個6144 點的buffer 需要在頭部多留出16B 以容納FFTC 輸出的side information,。
步驟3 和4 由核實現(xiàn)。一個PRACH opportunity 在頻域占用6 個RB,,但并不是整個6 RB 帶寬都被PRACH 占用,,因為兩側(cè)有相同寬度的保護(hù)頻帶。圖13 給出了一個例子,,其中,,PRACH 導(dǎo)頻子載波被標(biāo)記為紅色。
對FDD,,每小區(qū)在一個特定時刻最多只有1 個opportunity,,其起始物理RB 索引是其中,表示半靜態(tài)的PRACH 頻偏參數(shù),。
對TDD,,一個小區(qū)在一個特定時刻可以有多個opportunity,其中第??RA個opportunity 的起始物理RB 索引是其中表示小區(qū)上行RB 數(shù),。
假設(shè)一個PRACH opportunity 的起始物理RB 索引是以20MHz 小區(qū)為例,,它的第一個子載波在整個24576 點DFT 輸出中的位置是
參考圖11,假設(shè)該起始位置落在第??0 ∈[0, P − 1]個大點DFT 輸出塊內(nèi),在該塊內(nèi)的內(nèi)部偏移是O0,,則如果O0≤6144 − 839 = 5305,,這個opportunity位于一個大點DFT 輸出塊內(nèi);否則,,這個opportunity 跨越2 個大點DFT 輸出塊,,其最后O0− 5305個點位于塊??1 = (??0 + 1) mod 6的起始處。
如果該opportunity 位于一個輸出塊內(nèi),,核執(zhí)行下面的計算
如果跨越2 個塊,,計算
當(dāng)FFTC 為步驟2 執(zhí)行動態(tài)scaling 時,核在處理步驟3 和4 時,,除了上述公式描述的計算,,還要執(zhí)行定標(biāo)對齊。
3.1.3 硬件資源需求
對每個載扇,,PRACH 前端時頻轉(zhuǎn)換所需的硬件資源如下:
• 1 個FFTC 實例,。
• 該FFTC 實例上的1 個Tx/Rx 通道(和該FFTC 實例的一個TxQ 綁定)。
• 1 個flow,。
• 1 個Tx return Q,,1 個Rx FDQ,1 個Rx QPend Q,。
• ??X ? ??S? ??A ? P個Tx 描述符,,其中??S表示一個opportunity 中的序列個數(shù),??X表示前面所說的抽取目的buffer 個數(shù)(1 或2,,僅格式0 在部分配置下取2),。每個Tx 描述符的大小是32B。
• Rx 描述符的個數(shù)和Tx 描述符一樣,。每個Rx 描述符的大小是32B,。
• 抽取EDMA 用到的1 個CC 實例,,1 個TC 實例,,2 個EDMA 通道。Trigger 通道需要的PaRAM set 個數(shù)等于附錄A 表格的“EDMA 分段”列取值加1,,最大值等于11,,發(fā)生在TDD UL/DL 配置0、PRACH 配置為15/16/17 時,。對PRACH 格式0 或1,,working 通道需要NA + 3個PaRAM set;對格式2 或3,,需要2NA + 3個,。
• 用于控制的內(nèi)存資源:
o PaRAM set LUT,PRACH 格式0 或1 時的大小是??X ? ??? (??A + 1) ? 12字節(jié),格式2 或3 時的大小是??? (??A + 1) ? 20字節(jié),,其中??表示一個opportunity 的序列部分占用的符號數(shù),,如附錄A 中的表4 所示。
o 描述符地址數(shù)組(用于PRACH 前端FFTC 入隊的源buffer),,大小是Tx 描述符個數(shù)乘以4 字節(jié),。
只要處理能力足夠,多個載扇可以共用一個FFTC 實例,、一個CC 甚至TC 實例,。所有用于通知某個核或某組核的QPend 事件可以來自同一個QPend Q,軟件通過從中pop 出的描述符地址辨別事件類型,。其它資源通常不適合多載扇共用,,需要為每個載扇單獨(dú)分配。
3.1.4 負(fù)載測量
步驟3 和4 在c66x 核上的硬件實測負(fù)載如表3 所示,,對應(yīng)一個opportunity,。如果在頻域有多個opportunity,則總cycle 數(shù)要乘以opportunity 個數(shù),。本測試使用TMS320C6670 EVM,,內(nèi)存配置是:輸入、輸出buffer 都位于LL2,;L1P/L1D cache 初始狀態(tài)都為cold,,也就是說,函數(shù)開始執(zhí)行時,,代碼和數(shù)據(jù)都不在L1 cache 中,。
3.2 增大Cboot 電容的風(fēng)險分析
混合法的原理如圖14 所示。C66x 核負(fù)責(zé)下變頻和低通濾波抽取,,并啟動FFTC 完成降采樣序列的DFT,。當(dāng)頻域有多個opportunity 時,為每個opportunity 分別執(zhí)行整個處理流程,。降采樣后的序列長度等于1536,,20、15,、10MHz 小區(qū)分別對應(yīng)16,、12、8 倍降采樣,。
圖14: 混合法原理
C66x 核處理任務(wù)可以每符號執(zhí)行一次,,也可以在一個PRACH 序列收集完畢后執(zhí)行一次。前者的優(yōu)點是節(jié)省內(nèi)存,;缺點是由多任務(wù)相互打斷而導(dǎo)致的cache 開銷和任務(wù)切換開銷,,由“重疊相加”或“重疊保留”分段濾波帶來的額外計算量,,以及更頻繁的中斷開銷。反之,,后者的優(yōu)點是核開銷較低,,缺點是需要更多的內(nèi)存。對后者,,如果因片內(nèi)內(nèi)存不夠而需要把PRACH 序列收集buffer放到DDR,,則核開銷方面的優(yōu)點可能會被更低的內(nèi)存訪問效率抵消。
采用逐符號處理時,,PRACH 前端EDMA 配置和圖12 之間的區(qū)別是:
• 只用到了trigger 通道,,working 通道及其PaRAM set 不再需要。
• 原本用于觸發(fā)working 通道的事件現(xiàn)在用于觸發(fā)核中斷,,相應(yīng)的PaRAM set 僅做dummy 數(shù)據(jù)搬運(yùn),。
采用逐序列處理時,PRACH 前端EDMA 配置和圖12 之間的區(qū)別是:
• PaRAM set LUT 中的配置參數(shù)對應(yīng)連續(xù)內(nèi)存搬移,,而非抽取操作,。
• Working 通道用于FFTC 入隊的PaRAM set 不再需要,而它之前的那個PaRAM set 的final事件不僅觸發(fā)self-chain 事件,,還產(chǎn)生核中斷,。
下變頻和低通濾波抽取在c66x 核上的硬件實測負(fù)載為:一個opportunity、一個序列,、一根天線上的cycle 數(shù)是55,958,。本測試使用TMS320C6670 EVM,系統(tǒng)參數(shù)和內(nèi)存配置是:20MHz 小區(qū),,32 階濾波器,;分為12 段按重疊相加法處理;輸入,、輸出buffer 都位于LL2,;L1P/L1D cache 初始狀態(tài)都為cold。注意,,這里測量的負(fù)載沒有包含多任務(wù)互相打斷而導(dǎo)致的額外開銷,。
3.3 長RACH——直接DFT
5、3,、1.4MHz 小區(qū)中的長RACH 使用直接DFT,,因為根據(jù)表2,,這些小區(qū)帶寬下的DFT 原始長度可以被FFTC 直接處理,。此時,PRACH 前端EDMA 配置類似圖12,,唯一的區(qū)別是PaRAM set LUT 中的配置參數(shù)對應(yīng)連續(xù)內(nèi)存搬移,,而非抽取操作。
直接DFT 沒有實時c66x 核開銷。
3.4 短RACH
UpPTS 的長度可以是1 或2 個符號,,而短RACH 僅在UpPTS 長度是2 個符號時才允許存在,。短RACH 在UE 側(cè)UpPTS 結(jié)束點之前4832Ts 處發(fā)射,CP 長度是448Ts,,序列部分從第1 個UpPTS 符號的0Ts(normal CP)或736Ts(extended CP)開始,,長度是4096Ts。
如圖4 所示,,前端FFT 入隊EDMA 可以為UpPTS 中的每個符號產(chǎn)生一個短RACH 事件,,該事件觸發(fā)短RACH 的working 通道,完成數(shù)據(jù)搬移和FFTC 入隊,。短RACH 的working 通道使用4 個PaRAM set,,第一個用于初始dummy,接下來的兩個分別用于兩個符號的數(shù)據(jù)搬移,,最后一個用于FFTC 入隊,。
對每個載扇,短RACH 前端時頻轉(zhuǎn)換所需的硬件資源如下:
• 1 個FFTC 實例,。
• 該FFTC 實例上的1 個Tx/Rx 通道(和該FFTC 實例的一個TxQ 綁定),。
• 1 個flow。
• 1 個Tx return Q,,1 個Rx FDQ,,1 個Rx QPend Q。
• NA個Tx 描述符,。每個Tx 描述符的大小是32B,。
• Rx 描述符的個數(shù)和Tx 描述符一樣。每個Rx 描述符的大小是32B,。
• 數(shù)據(jù)搬移EDMA 用到的1 個CC 實例,,1 個TC 實例,1 個EDMA 通道,,4 個PaRAM set,。
• 用于控制的內(nèi)存資源:
o 描述符地址數(shù)組(用于短RACH 前端FFTC 入隊的源buffer),大小是Tx 描述符個數(shù)乘以4 字節(jié),。
只要處理能力足夠,,多個載扇可以共用一個FFTC 實例、一個CC 甚至TC 實例,。所有用于通知某個核或某組核的QPend 事件可以來自同一個QPend Q,,軟件通過從中pop 出的描述符地址辨別事件類型。其它資源通常不適合多載扇共用,,需要為每個載扇單獨(dú)分配,。
4,、小結(jié)
本文詳細(xì)描述了在TI 的KeyStone 器件上實現(xiàn)高效的LTE 上行基帶前端處理的方法,包括對常規(guī)前端FFT 的處理和對PRACH 前端時頻轉(zhuǎn)換的處理,,并給出了實測的c66x 核負(fù)載,。
從本文的描述可見,KeyStone 架構(gòu)提供的EDMA 和Navigator 機(jī)制非常靈活,,可以把數(shù)據(jù)搬運(yùn),、加速器啟動、核觸發(fā)等操作步驟串聯(lián)成一個可自動執(zhí)行的整體流程,,極大降低了對核實時干預(yù)的需求,。
當(dāng)輸入數(shù)據(jù)位于DDR 時,F(xiàn)FTC 的執(zhí)行效率較低,。因此,,對PRACH 前端處理,建議把從符號級乒乓緩存搬移出來的數(shù)據(jù)放在片內(nèi),。
對PRACH 前端處理,,大點DFT 法比混合法節(jié)省10 倍以上的核負(fù)載。當(dāng)FFTC 和片內(nèi)存儲資源足夠時(比如對小基站),,大點DFT 較為合適,。在其它情況下,哪種方法合適需要根據(jù)系統(tǒng)對c66x 核,、FFTC,、內(nèi)存的使用情況選擇。
參考資料
[1] 3GPP TS-36.211
[2] 3GPP TS-36.212
[3] 3GPP TS-36.213
[4] 3GPP TS-36.214
[5] http://www.ti.com/product/tms320tci6616
[6] http://www.ti.com/product/tms320tci6618
[7] http://www.ti.com/product/tms320tci6614
[8] http://www.ti.com/product/tms320tci6612
[9] http://www.ti.com/product/tms320c6670
[10] http://www.ti.com/product/tci6636k2h
[11] http://www.ti.com/product/tci6634k2k
[12] http://www.ti.com/product/tci6638k2k
[13] http://www.ti.com/product/tci6630k2l
[14] KeyStone Architecture Antenna Interface 2 (AIF2) User Guide (SPRUGV7)
[15] KeyStone II Architecture Antenna Interface 2 (AIF2) User Guide (SPRUHL2)
[16] Multicore Navigator User Guide (SPRUGR9)
[17] Enhanced Direct Memory Access (EDMA3) Controller User Guide (SPRUGS5)
[18] Fast Fourier Transform Coprocessor (FFTC) User Guide (SPRUGS2)
[19] TCI6638K2K Data Manual (SPRS836)
[20] KeyStone Architecture Chip Interrupt Controller (CIC) User Guide (SPRUGW4)
[21] Throughput Performance Guide for TCI66x KeyStone Devices (SPRABH2)
附錄A:PRACH 分布與EDMA 參數(shù)
表5 到表12 分別給出了FDD 以及7 種TDD UL/DL 配置下的PRACH 分布描述表,。解釋如下,。
• “緩存數(shù)”一列描述每種配置下需要的緩存?zhèn)€數(shù),等于1 或2,,2 表示需要乒乓緩存,。對于PRACH 格式2 和3,,每個opportunity 包含2 個序列,1 個緩存對應(yīng)一個opportunity,,而非一個序列,。格式2 和3 時,,緩存數(shù)總是等于1,,為了強(qiáng)調(diào)該緩存實際上要容納2 個序列,,在表中用“1’”標(biāo)識。當(dāng)緩存數(shù)等于1 時,,這個唯一的緩存用1 編號,;當(dāng)緩存數(shù)等于2 時,兩個緩存分別用1 和2 編號,。確定緩存數(shù)時,,假設(shè)系統(tǒng)能夠在“下下個”序列到達(dá)前處理完當(dāng)前序列的時頻轉(zhuǎn)換。
• 假設(shè)系統(tǒng)啟動后總是從一個無線幀的第一個子幀開始接收天線數(shù)據(jù),,則一開始會有若干個上行子幀符號不承載PRACH 數(shù)據(jù),,這些上行子幀符號的個數(shù)在“初始Dummy 符號數(shù)”一列給出。注意,,如前所述,,經(jīng)過FFT 入隊EDMA 的過濾,PRACH 前端時頻轉(zhuǎn)換功能模塊只會收到上行子幀對應(yīng)的符號級事件,。
• 經(jīng)過初始階段的不承載PRACH 數(shù)據(jù)的若干個符號后,,隨后的PRACH 時域承載模式按周期重復(fù),每個周期包含若干個EDMA 分段,,在“EDMA 分段”一列給出,。1 表示該分段內(nèi)的符號數(shù)據(jù)被EDMA 搬運(yùn)到緩存1,2 表示該分段內(nèi)的符號數(shù)據(jù)被EDMA 搬運(yùn)到緩存2,,0 表示在該分段內(nèi)不執(zhí)行實際的天線數(shù)據(jù)搬運(yùn),,只是消耗長RACH 觸發(fā)事件。“EDMA 段內(nèi)符號數(shù)”一列給出每個EDMA 分段中的上行子幀符號數(shù),。
??表示一個上行子幀內(nèi)的符號數(shù),,????(??= ??, ??, ??, ??)表示格式??的一個opportunity 中的1 或2 個序列跨越的總符號數(shù),????表示格式??的一個opportunity 從起始子幀的頭部到序列開始前不承載PRACH 的符號數(shù)(字母h 表示head),,????表示格式??的一個opportunity 從序列結(jié)束后到結(jié)束子幀的末尾的不承載PRACH 的符號數(shù)(字母t 表示tail),。
• 表4 給出兩種CP 模式下,這些變量的取值,。