在 KeyStone 器件上實(shí)現(xiàn)高效的 LTE 上行基帶前端處理
摘要
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ì)資料參見[5]
• TCI6618,詳細(xì)資料參見[6]
• TCI6614 和 TCI6612,詳細(xì)資料參見[7]和[8]
• TMS320C6670,詳細(xì)資料參見[9]
KeyStone II 家族基于 28nm 工藝,包括如下基帶 SoC 器件型號(hào):
• TCI6636K2H,詳細(xì)資料參見[10]
• TCI6634K2K,詳細(xì)資料參見[11]
• TCI6638K2K,詳細(xì)資料參見[12]
• TCI6630K2L,詳細(xì)資料參見[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é)。
雖然這里以單片 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)單起見,要求一個(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 的部分沒有在圖 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的大小,參見圖 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)使用的是乓(而非乒)緩存。
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ì),參見后面關(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 沒有PUSCH/PUCCH 分離的問題,所以一個(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)部事件路由,參見[19]。關(guān)于 CIC(Chip Interrupt Controller),參見[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:
只要處理能力足夠,多個(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。參見 3.1 節(jié)。
l 混合法。該方法使用核完成下變頻和濾波降采樣,然后用 FFTC 在降低后的采樣率上執(zhí)行小點(diǎn) DFT。參見 3.2 節(jié)。
o 對(duì)更窄帶寬的小區(qū),可以直接用 FFTC 執(zhí)行 DFT。參見 3.3 節(jié)。
•短 RACH:
o 總是可以直接用 FFTC 執(zhí)行 DFT。參見 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 定義為
對(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)抽取)由 EDMA 完成,步驟 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)的該 PaRAM 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)記為紅色。
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 倍降采樣。
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)存訪問效率抵消。
采用逐符號(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ù)載沒有包含多任務(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 沒有實(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ù)載。
從本文的描述可見,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)存的使用情況選擇。