海軍航空工程學(xué)院青島校區(qū) 卞金來 林成浴 蔡慧敏
FPGA外掛DDR的存儲管理設(shè)計
海軍航空工程學(xué)院青島校區(qū) 卞金來 林成浴 蔡慧敏
FPGA芯片的硬件平臺上要實現(xiàn)6000個用戶的HSUPA上行用戶平面L2協(xié)議高效實時處理,就需要處理大量的數(shù)據(jù)緩存,如果給每個用戶分配固定的DDR空間,將導(dǎo)致DDR的需求激增。為了減少設(shè)計成本,對DDR的空間分配,采用動態(tài)分配方式,以提高緩沖數(shù)據(jù)區(qū)的存儲效率。在FPGA中設(shè)計存儲管理模塊,負(fù)責(zé)DDR存儲塊的動態(tài)分配以及DDR存儲塊的回收。
FPGA;動態(tài)分配;存儲管理
Kintex-7系列支持高達(dá)32路12.5G收發(fā)器和DDR3-1866,與之前的40nm器件相比,降低一半功耗。并且其還具有可擴展的優(yōu)化架構(gòu)、全面的工具、IP以及開發(fā)板和套件。
Kintex-7系列片內(nèi)Block RAM和分布式RAM都有限,如Kintex-7 325T分布式RAM只有4000Kb,塊 RAM只有16020Kb。當(dāng)需要進行緩存大量數(shù)據(jù)時,只能外掛存儲器DDR或者QDR負(fù)責(zé)存儲接收緩沖數(shù)據(jù)。
當(dāng)在Kintex-7 325T FPGA芯片的硬件平臺上要實現(xiàn)6000個用戶的HSUPA上行用戶平面L2協(xié)議高效實時處理,平均每個用戶400kbps吞吐量,獲得總共2.4Gbps的HUSPA上行數(shù)據(jù)平面協(xié)議處理吞吐量,利用FPGA對HSUPA的RNC用戶面協(xié)議處理進行加速,需要在FPGA內(nèi)需要完成RNC內(nèi)的RLC層協(xié)議、MAC層協(xié)議和FP幀協(xié)議的加速處理。
當(dāng)設(shè)計需要實現(xiàn)大量用戶數(shù)據(jù)處理,這就需要大量的DDR進行緩存數(shù)據(jù),如果給每個用戶分配固定的DDR空間,將導(dǎo)致DDR的需求激增。為了減少設(shè)計成本,對DDR的空間分配,采用動態(tài)分配方式,以提高緩沖數(shù)據(jù)區(qū)的存儲效率。在FPGA中設(shè)計存儲管理模塊,負(fù)責(zé)DDR存儲塊的動態(tài)分配以及DDR存儲塊的回收。
K7-325T片內(nèi)RAM數(shù)目有限,分布式RAM只有4000Kb,塊RAM只有16020Kb,無法將6000個用戶的上行緩沖數(shù)據(jù),只能在DDR中進行緩沖存儲,導(dǎo)致大量DDR讀寫操作。
設(shè)計需要支持6000個用戶,如果為每個用戶都規(guī)劃固定的緩沖空間將增加所需DDR,增加設(shè)計成本,并且FPGA的IO口數(shù)量有限,不能支持過大的DDR,這就需要根據(jù)需要為用戶動態(tài)分配DDR存儲空間,以提高緩沖數(shù)據(jù)區(qū)的存儲效率。
根據(jù)用戶空間的大小采用1G容量的DDR。每個DDR的地址空間,一部分采用靜態(tài)分配方式(256MB),一部分采用動態(tài)分配方式(768MB)。DDR存儲的收發(fā)處理數(shù)據(jù)結(jié)構(gòu)采用靜態(tài)分配方式,這樣雖然DDR存儲器利用率不高,但是可以減少DDR讀寫次數(shù)。而MAC-es接收數(shù)據(jù)緩沖區(qū)和RLC AM接收數(shù)據(jù)緩沖區(qū)采用動態(tài)分配方式,以提高緩沖數(shù)據(jù)區(qū)的存儲效率。
64位的DDR分配給MAC-es模塊使用。其整序緩沖區(qū)靜態(tài)分配,8(字節(jié)/元素)×128(元素)×4(邏輯信道)×6000=24,000KB。CFN子幀緩沖隊列靜態(tài)分配,1(字節(jié)/元素)×256(元素/隊列)×4(邏輯信道)×6000=6,000KB。
32位的DDR分配給RLC模塊使用。接收窗口緩沖區(qū)靜態(tài)分配:8(字節(jié)/元素)×2048(元素)×6000=96,000KB;重組緩沖區(qū):512×6000=3,000KB
相對于固定分配DDR區(qū)域的256MB,開銷完全可以接受。
數(shù)據(jù)緩沖區(qū)采用動態(tài)分配方式。動態(tài)存儲器大小為768MB,768MB內(nèi)存空間按照2KB(64位的DDR)或者512B(32位DDR)大小進行分片編號(即地址)。如此,在64中DDR中,可將后面的768MB劃分為384K個2MB的存儲塊;在32位的DDR中,可將后面的768MB劃分為1536K個512B的存儲塊。
DDR存儲管理模塊的任務(wù)是對對2個DDR中768MB的空間實現(xiàn)動態(tài)管理??紤]構(gòu)造出2個FREE FIFO,分別用于2個DDR的動態(tài)存儲空間的存儲管理,在FIFO中存儲每個動態(tài)存儲塊的分片編號(即地址)。
當(dāng)需要分配內(nèi)存塊時從頭部輸出內(nèi)存塊的分片編號;當(dāng)需要回收內(nèi)存塊時,將使用完成的內(nèi)存塊的分片編號寫回FREE FIFO的尾部實現(xiàn)動態(tài)存儲區(qū)內(nèi)存塊的動態(tài)回收操作。如圖1所示。
圖1 DDR動態(tài)存儲區(qū)與FREE FIFO映射關(guān)系圖
對于64位的DDR,F(xiàn)IFO數(shù)據(jù)結(jié)構(gòu)存儲384K個塊號,每個塊號用4字節(jié)存儲。共需4*384k=1.5M字節(jié)。對于32位的DDR,F(xiàn)IFO數(shù)據(jù)結(jié)構(gòu)存儲1536K個塊號,每個塊號用4字節(jié)存儲。共需4*1536k = 6M字節(jié)。而分布式RAM只有4000Kb,塊 RAM只有16020Kb;QDR只有8M。
前面將DDR劃分為靜態(tài)存儲區(qū)域和動態(tài)分配區(qū)域。故將這兩個FREE FIFO存儲到各自的DDR靜態(tài)存儲區(qū)域。
這樣每次分配和回收內(nèi)存塊時,就會觸發(fā)對DDR的讀或?qū)?。DDR的讀寫較慢,并且需要仲裁,導(dǎo)致分配和回收的效率不高。
為了提高動態(tài)分配的效率,考慮在RAM實現(xiàn)利用IP core例化FIFO對DDR中的FREE FIFO進行映射。分別通過IP CORE例化預(yù)分配FIFO和延遲回收FIFO實現(xiàn)DDR內(nèi)存塊的動態(tài)分配的高效性。FREE FIFO前面的1024個內(nèi)存塊地址提前取到預(yù)分配FIFO,用戶模塊申請時,快速的從預(yù)申請隊列直接分片,當(dāng)預(yù)分配FIFO中可分配塊小于512時,一次性從DDR中讀取512個內(nèi)存塊號以待分配。當(dāng)用戶模塊釋放內(nèi)存塊時,先放入到延遲回收FIFO,等待需要回收的內(nèi)存塊超過512個時,在集中性一次寫回FREE FIFO。如圖2所示。
圖2 預(yù)分配FIFO和延遲回收FIFO與FREE FIFO映射關(guān)系圖
這樣分配時直接讀取預(yù)分配FIFO提高了分配的速度,并且不需要等待DDR的仲裁和讀寫。回收時,不是直接回收而是等到待回收的內(nèi)存塊超過512個才一次性回收,大大減少的DDR的寫操作次數(shù)。
為了高效實使用DDR中緩沖存儲區(qū),對DDR的緩沖存儲區(qū)進行動態(tài)存儲管理。動態(tài)存儲管理實現(xiàn)通過在DDR靜態(tài)存儲區(qū)域FREE中構(gòu)建FREE FIFO存儲動態(tài)存儲塊的地址信息來實現(xiàn)。
為了避免每次分配和回收存儲塊時都需要對DDR的讀寫。分別通過IP CORE例化預(yù)分配FIFO和延遲回收FIFO實現(xiàn)DDR內(nèi)存塊的動態(tài)分配的高效性。FREE FIFO前面的1024個內(nèi)存塊地址提前取到預(yù)分配FIFO,用戶模塊申請時,快速的從預(yù)申請隊列直接分片,當(dāng)預(yù)分配FIFO中可分配塊小于512時,一次性從DDR中讀取512個內(nèi)存塊號以待分配。當(dāng)用戶模塊釋放內(nèi)存塊時,先放入到延遲回收FIFO,等待需要回收的內(nèi)存塊超過512個時,在集中性一次寫回FREE FIFO,大大減少DDR的讀寫次數(shù),提高效率。
[1]張浩.高速上行分組接入技術(shù)在WCDMA RNC中的設(shè)計與實現(xiàn)[D].哈爾濱工程大學(xué),2010.
[2]劉琦.WCDMA HSUPA中關(guān)鍵技術(shù)的研究和實現(xiàn)[D].西安電子科技大學(xué),2008.
[3]耿琦,韋再雪,楊大成.HSUPA技術(shù)及其系統(tǒng)級仿真[J].信息通信技術(shù),2008.