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