海軍航空工程學(xué)院青島校區(qū) 卞金來(lái) 林成浴 蔡慧敏
FPGA外掛DDR的存儲(chǔ)管理設(shè)計(jì)
海軍航空工程學(xué)院青島校區(qū) 卞金來(lái) 林成浴 蔡慧敏
FPGA芯片的硬件平臺(tái)上要實(shí)現(xiàn)6000個(gè)用戶的HSUPA上行用戶平面L2協(xié)議高效實(shí)時(shí)處理,就需要處理大量的數(shù)據(jù)緩存,如果給每個(gè)用戶分配固定的DDR空間,將導(dǎo)致DDR的需求激增。為了減少設(shè)計(jì)成本,對(duì)DDR的空間分配,采用動(dòng)態(tài)分配方式,以提高緩沖數(shù)據(jù)區(qū)的存儲(chǔ)效率。在FPGA中設(shè)計(jì)存儲(chǔ)管理模塊,負(fù)責(zé)DDR存儲(chǔ)塊的動(dòng)態(tài)分配以及DDR存儲(chǔ)塊的回收。
FPGA;動(dòng)態(tài)分配;存儲(chǔ)管理
Kintex-7系列支持高達(dá)32路12.5G收發(fā)器和DDR3-1866,與之前的40nm器件相比,降低一半功耗。并且其還具有可擴(kuò)展的優(yōu)化架構(gòu)、全面的工具、IP以及開(kāi)發(fā)板和套件。
Kintex-7系列片內(nèi)Block RAM和分布式RAM都有限,如Kintex-7 325T分布式RAM只有4000Kb,塊 RAM只有16020Kb。當(dāng)需要進(jìn)行緩存大量數(shù)據(jù)時(shí),只能外掛存儲(chǔ)器DDR或者QDR負(fù)責(zé)存儲(chǔ)接收緩沖數(shù)據(jù)。
當(dāng)在Kintex-7 325T FPGA芯片的硬件平臺(tái)上要實(shí)現(xiàn)6000個(gè)用戶的HSUPA上行用戶平面L2協(xié)議高效實(shí)時(shí)處理,平均每個(gè)用戶400kbps吞吐量,獲得總共2.4Gbps的HUSPA上行數(shù)據(jù)平面協(xié)議處理吞吐量,利用FPGA對(duì)HSUPA的RNC用戶面協(xié)議處理進(jìn)行加速,需要在FPGA內(nèi)需要完成RNC內(nèi)的RLC層協(xié)議、MAC層協(xié)議和FP幀協(xié)議的加速處理。
當(dāng)設(shè)計(jì)需要實(shí)現(xiàn)大量用戶數(shù)據(jù)處理,這就需要大量的DDR進(jìn)行緩存數(shù)據(jù),如果給每個(gè)用戶分配固定的DDR空間,將導(dǎo)致DDR的需求激增。為了減少設(shè)計(jì)成本,對(duì)DDR的空間分配,采用動(dòng)態(tài)分配方式,以提高緩沖數(shù)據(jù)區(qū)的存儲(chǔ)效率。在FPGA中設(shè)計(jì)存儲(chǔ)管理模塊,負(fù)責(zé)DDR存儲(chǔ)塊的動(dòng)態(tài)分配以及DDR存儲(chǔ)塊的回收。
K7-325T片內(nèi)RAM數(shù)目有限,分布式RAM只有4000Kb,塊RAM只有16020Kb,無(wú)法將6000個(gè)用戶的上行緩沖數(shù)據(jù),只能在DDR中進(jìn)行緩沖存儲(chǔ),導(dǎo)致大量DDR讀寫(xiě)操作。
設(shè)計(jì)需要支持6000個(gè)用戶,如果為每個(gè)用戶都規(guī)劃固定的緩沖空間將增加所需DDR,增加設(shè)計(jì)成本,并且FPGA的IO口數(shù)量有限,不能支持過(guò)大的DDR,這就需要根據(jù)需要為用戶動(dòng)態(tài)分配DDR存儲(chǔ)空間,以提高緩沖數(shù)據(jù)區(qū)的存儲(chǔ)效率。
根據(jù)用戶空間的大小采用1G容量的DDR。每個(gè)DDR的地址空間,一部分采用靜態(tài)分配方式(256MB),一部分采用動(dòng)態(tài)分配方式(768MB)。DDR存儲(chǔ)的收發(fā)處理數(shù)據(jù)結(jié)構(gòu)采用靜態(tài)分配方式,這樣雖然DDR存儲(chǔ)器利用率不高,但是可以減少DDR讀寫(xiě)次數(shù)。而MAC-es接收數(shù)據(jù)緩沖區(qū)和RLC AM接收數(shù)據(jù)緩沖區(qū)采用動(dòng)態(tài)分配方式,以提高緩沖數(shù)據(jù)區(qū)的存儲(chǔ)效率。
64位的DDR分配給MAC-es模塊使用。其整序緩沖區(qū)靜態(tài)分配,8(字節(jié)/元素)×128(元素)×4(邏輯信道)×6000=24,000KB。CFN子幀緩沖隊(duì)列靜態(tài)分配,1(字節(jié)/元素)×256(元素/隊(duì)列)×4(邏輯信道)×6000=6,000KB。
32位的DDR分配給RLC模塊使用。接收窗口緩沖區(qū)靜態(tài)分配:8(字節(jié)/元素)×2048(元素)×6000=96,000KB;重組緩沖區(qū):512×6000=3,000KB
相對(duì)于固定分配DDR區(qū)域的256MB,開(kāi)銷完全可以接受。
數(shù)據(jù)緩沖區(qū)采用動(dòng)態(tài)分配方式。動(dòng)態(tài)存儲(chǔ)器大小為768MB,768MB內(nèi)存空間按照2KB(64位的DDR)或者512B(32位DDR)大小進(jìn)行分片編號(hào)(即地址)。如此,在64中DDR中,可將后面的768MB劃分為384K個(gè)2MB的存儲(chǔ)塊;在32位的DDR中,可將后面的768MB劃分為1536K個(gè)512B的存儲(chǔ)塊。
DDR存儲(chǔ)管理模塊的任務(wù)是對(duì)對(duì)2個(gè)DDR中768MB的空間實(shí)現(xiàn)動(dòng)態(tài)管理。考慮構(gòu)造出2個(gè)FREE FIFO,分別用于2個(gè)DDR的動(dòng)態(tài)存儲(chǔ)空間的存儲(chǔ)管理,在FIFO中存儲(chǔ)每個(gè)動(dòng)態(tài)存儲(chǔ)塊的分片編號(hào)(即地址)。
當(dāng)需要分配內(nèi)存塊時(shí)從頭部輸出內(nèi)存塊的分片編號(hào);當(dāng)需要回收內(nèi)存塊時(shí),將使用完成的內(nèi)存塊的分片編號(hào)寫(xiě)回FREE FIFO的尾部實(shí)現(xiàn)動(dòng)態(tài)存儲(chǔ)區(qū)內(nèi)存塊的動(dòng)態(tài)回收操作。如圖1所示。

圖1 DDR動(dòng)態(tài)存儲(chǔ)區(qū)與FREE FIFO映射關(guān)系圖
對(duì)于64位的DDR,F(xiàn)IFO數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)384K個(gè)塊號(hào),每個(gè)塊號(hào)用4字節(jié)存儲(chǔ)。共需4*384k=1.5M字節(jié)。對(duì)于32位的DDR,F(xiàn)IFO數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)1536K個(gè)塊號(hào),每個(gè)塊號(hào)用4字節(jié)存儲(chǔ)。共需4*1536k = 6M字節(jié)。而分布式RAM只有4000Kb,塊 RAM只有16020Kb;QDR只有8M。
前面將DDR劃分為靜態(tài)存儲(chǔ)區(qū)域和動(dòng)態(tài)分配區(qū)域。故將這兩個(gè)FREE FIFO存儲(chǔ)到各自的DDR靜態(tài)存儲(chǔ)區(qū)域。
這樣每次分配和回收內(nèi)存塊時(shí),就會(huì)觸發(fā)對(duì)DDR的讀或?qū)憽DR的讀寫(xiě)較慢,并且需要仲裁,導(dǎo)致分配和回收的效率不高。
為了提高動(dòng)態(tài)分配的效率,考慮在RAM實(shí)現(xiàn)利用IP core例化FIFO對(duì)DDR中的FREE FIFO進(jìn)行映射。分別通過(guò)IP CORE例化預(yù)分配FIFO和延遲回收FIFO實(shí)現(xiàn)DDR內(nèi)存塊的動(dòng)態(tài)分配的高效性。FREE FIFO前面的1024個(gè)內(nèi)存塊地址提前取到預(yù)分配FIFO,用戶模塊申請(qǐng)時(shí),快速的從預(yù)申請(qǐng)隊(duì)列直接分片,當(dāng)預(yù)分配FIFO中可分配塊小于512時(shí),一次性從DDR中讀取512個(gè)內(nèi)存塊號(hào)以待分配。當(dāng)用戶模塊釋放內(nèi)存塊時(shí),先放入到延遲回收FIFO,等待需要回收的內(nèi)存塊超過(guò)512個(gè)時(shí),在集中性一次寫(xiě)回FREE FIFO。如圖2所示。

圖2 預(yù)分配FIFO和延遲回收FIFO與FREE FIFO映射關(guān)系圖
這樣分配時(shí)直接讀取預(yù)分配FIFO提高了分配的速度,并且不需要等待DDR的仲裁和讀寫(xiě)。回收時(shí),不是直接回收而是等到待回收的內(nèi)存塊超過(guò)512個(gè)才一次性回收,大大減少的DDR的寫(xiě)操作次數(shù)。
為了高效實(shí)使用DDR中緩沖存儲(chǔ)區(qū),對(duì)DDR的緩沖存儲(chǔ)區(qū)進(jìn)行動(dòng)態(tài)存儲(chǔ)管理。動(dòng)態(tài)存儲(chǔ)管理實(shí)現(xiàn)通過(guò)在DDR靜態(tài)存儲(chǔ)區(qū)域FREE中構(gòu)建FREE FIFO存儲(chǔ)動(dòng)態(tài)存儲(chǔ)塊的地址信息來(lái)實(shí)現(xiàn)。
為了避免每次分配和回收存儲(chǔ)塊時(shí)都需要對(duì)DDR的讀寫(xiě)。分別通過(guò)IP CORE例化預(yù)分配FIFO和延遲回收FIFO實(shí)現(xiàn)DDR內(nèi)存塊的動(dòng)態(tài)分配的高效性。FREE FIFO前面的1024個(gè)內(nèi)存塊地址提前取到預(yù)分配FIFO,用戶模塊申請(qǐng)時(shí),快速的從預(yù)申請(qǐng)隊(duì)列直接分片,當(dāng)預(yù)分配FIFO中可分配塊小于512時(shí),一次性從DDR中讀取512個(gè)內(nèi)存塊號(hào)以待分配。當(dāng)用戶模塊釋放內(nèi)存塊時(shí),先放入到延遲回收FIFO,等待需要回收的內(nèi)存塊超過(guò)512個(gè)時(shí),在集中性一次寫(xiě)回FREE FIFO,大大減少DDR的讀寫(xiě)次數(shù),提高效率。
[1]張浩.高速上行分組接入技術(shù)在WCDMA RNC中的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱工程大學(xué),2010.
[2]劉琦.WCDMA HSUPA中關(guān)鍵技術(shù)的研究和實(shí)現(xiàn)[D].西安電子科技大學(xué),2008.
[3]耿琦,韋再雪,楊大成.HSUPA技術(shù)及其系統(tǒng)級(jí)仿真[J].信息通信技術(shù),2008.