基于FPGA和IP Core的定制緩沖管理的實(shí)現(xiàn)
在PRAM中存在兩種鏈表形式,PQ List代表已經(jīng)存儲(chǔ)的數(shù)據(jù)包鏈表。為方便數(shù)據(jù)讀出,PQ List需要記錄數(shù)據(jù)包的第一個(gè)數(shù)據(jù)塊地址,即首指針Pq_Hptr,為方便新的數(shù)據(jù)寫(xiě)入,PQ List需要記錄數(shù)據(jù)包的最后一個(gè)數(shù)據(jù)塊地址,即尾指針Pq_Tptr。PQ List同時(shí)需要記錄該鏈表的長(zhǎng)度作為調(diào)度模塊進(jìn)行調(diào)度的權(quán)值計(jì)算使用。
Free List代表空閑的地址隊(duì)列。為方便地辨識(shí)、管理空閑的地址,避免地址沖突,在BM中將所有空閑的地址使用一個(gè)鏈表進(jìn)行管理。這個(gè)鏈表就是空閑地址隊(duì)列??臻e地址隊(duì)列依據(jù)系統(tǒng)需求的不同有著不同的形式,一般空閑地址隊(duì)列的構(gòu)成和PQ List相似,由空閑地址首指針Free_Hptr和空閑地址尾指針Free_Tptr構(gòu)成。BM模塊的所有操作都圍繞著空閑的地址隊(duì)列Free List進(jìn)行。
基于BM模塊的數(shù)據(jù)流結(jié)構(gòu),BM模塊一般分為Write CONtrol模塊、Free List control模塊、Read Control模塊、PRAM Control模塊、BRAM Control模塊。BM的結(jié)構(gòu)如圖3所示。
圖3 BM結(jié)構(gòu)圖
Write Control模塊從Free List模塊處得到空閑地址,向BRAM Control模塊提出寫(xiě)請(qǐng)求,同時(shí)更新PRAM中的內(nèi)容。Free List control模塊負(fù)責(zé)管理空閑地址列表,提供Write Control模塊的寫(xiě)B(tài)RAM地址及PRAM地址,回收經(jīng)Read Control模塊讀出數(shù)據(jù)塊后釋放的地址。Read Control模塊根據(jù)調(diào)度器的調(diào)度結(jié)果,通過(guò)BRAM Control模塊讀出需要發(fā)送的數(shù)據(jù)單元,同時(shí)將釋放的緩沖單元地址寫(xiě)入空閑地址列表。PRAM Control模塊為外部SSRAM的控制模塊,可直接使用參考設(shè)計(jì)完成。BRAM Control模塊為外部DRAM控制模塊,一般分為Datapath與Controler兩個(gè)子模塊。Datapath模塊專門(mén)負(fù)責(zé)數(shù)據(jù)接口部分,完成DRAM接口的DQ、DQS處理以及相應(yīng)的延時(shí)調(diào)整,Controler模塊負(fù)責(zé)完成DRAM的控制需求。
在BM模塊中,BRAM的帶寬與PRAM的帶寬一般為T(mén)M的瓶頸。PRAM的帶寬主要受限于訪問(wèn)的次數(shù),而B(niǎo)RAM的帶寬受限于接口帶寬。例如對(duì)于一個(gè)10G的TM,BRAM的有效帶寬必須保證20G,以接口利用率最差只能達(dá)到65%計(jì)算(考慮SEG模塊切分信元出現(xiàn)的N+1問(wèn)題),需要保證接口帶寬達(dá)到30G。使用64位的DRAM接口,接口速率不能低于500MB/s,這樣對(duì)Datapath模塊的設(shè)計(jì)提出了更高的要求。在實(shí)際系統(tǒng)中,BRAM主要使用DDR SDRAM、DDR II SDRAM。
當(dāng)使用Stratix II FPGA,BRAM使用DDR II SDRAM時(shí),測(cè)試表明DDR II SDRAM接口速率可達(dá)到800MB/s。在常規(guī)使用的情況下,DDR II SDRAM接口速率可保證達(dá)到667MB/s。對(duì)于一個(gè)64位的DRAM接口,接口速率可達(dá)到42.7GB/s,完全可以滿足一個(gè)10G的TM系統(tǒng)。
BM模塊作為緩沖管理模塊,緩沖的基本單元為BCELL,基于對(duì)BCELL的管理,對(duì)于BM的操作都牽涉到空閑地址隊(duì)列的操作以及鏈表的操作。最基本的操作就是寫(xiě)入操作和讀出操作。BM模塊的寫(xiě)入操作由Write Control模塊發(fā)起。
對(duì)于Write Control模塊,有數(shù)據(jù)單元需要寫(xiě)入,首先向Free List模塊申請(qǐng)空閑地址,F(xiàn)ree List將首指針a給Write Control模塊,作為該數(shù)據(jù)塊的寫(xiě)地址,同時(shí)讀出首指針a對(duì)應(yīng)在PRAM中的內(nèi)容,得到下一跳地址b,將下一跳地址b作為新的空閑地址首指針。
評(píng)論