專利名稱:路由器多隊列數(shù)據(jù)包緩存管理與輸出隊列調(diào)度系統(tǒng)的制作方法
路由器多隊列數(shù)據(jù)包緩存管理與輸出隊列調(diào)度系統(tǒng)技術(shù)領(lǐng)域路由器多隊列數(shù)據(jù)包緩存管理與輸出隊列調(diào)度系統(tǒng)屬于因特網(wǎng)主干網(wǎng)核心路由器的技術(shù) 領(lǐng)域。
背景技術(shù):
在路由器線卡入口, 一個數(shù)據(jù)包按照一定的規(guī)則被拆分為多個數(shù)據(jù)片,然后,通過交換結(jié) 構(gòu),在路由器線卡輸出端口,被拆分的多個數(shù)據(jù)片進行組合,恢復(fù)為原來的數(shù)據(jù)包。為了支 持服務(wù)質(zhì)量(Quality of Sevice),在輸出端口,不同源端口和優(yōu)先級的數(shù)據(jù)片需要各自歸 入獨立的隊列進行管理。數(shù)據(jù)包分成的一個或多個數(shù)據(jù)片具有固定的長度,CSIX協(xié)議規(guī)定信元的長度最長不得超 過256個字節(jié)。數(shù)據(jù)包分成的數(shù)據(jù)片只有最后一個可以小于系統(tǒng)定義的固定長度,其它數(shù)據(jù)片 的長度必須是固定長度。隊列保存有兩種常見方法, 一種是靜態(tài)分配緩存方法,該方法為每個隊列劃分一個固定的 區(qū)域,這些區(qū)域的地址是連續(xù)的,即使某個隊列的存儲區(qū)域在某個時刻沒有使用,空閑,其它的 隊列也不能使用它。 一種是動態(tài)共享分配緩存方法,該方法不為每個隊列劃分一個固定的區(qū)域, 所有的存儲區(qū)域被不同隊列動態(tài)共享,任何空閑的區(qū)域,可以被首先需要使用的隊列使用。在 支持多優(yōu)先級的高性能路由器中,采用動態(tài)共享分配存儲的方法,可以大大地提高緩存的利用 效率。為了支持服務(wù)質(zhì)量,路由器必須采用一定的調(diào)度策略,將輸出端口緩存中保存的數(shù)據(jù)包發(fā) 送到輸出端的數(shù)據(jù)鏈路。核心路由器中多隊列數(shù)據(jù)緩存管理與輸出隊列調(diào)度,不同廠家的具體實現(xiàn)方式各不相同, 有的使用專門定制的專用集成電路芯片與存儲器相連實現(xiàn),也有的使用FPGA與存儲器相連實 現(xiàn)。FPGA (Field Programmable Gate Array)是上世紀80年代末開始使用的大規(guī)??删幊虜?shù)字集成電路器件。它充分利用計算機輔助設(shè)計技術(shù)進行器件的開發(fā)與應(yīng)用。用戶借助于計 算機不僅能自行設(shè)計專用集成電路芯片,還可在計算機上進行功能仿真和實時仿真,及時發(fā) 現(xiàn)問題,調(diào)整電路,改進設(shè)計方案。這樣,設(shè)計者不必動手搭接電路、調(diào)試驗證,只須在計 算機上操作很短的時間,即可設(shè)計出與實際系統(tǒng)相差無幾的理想電路。而且,F(xiàn)PGA器件采用 標準化結(jié)構(gòu),體積小、集成度高、功耗低、速度快,可無限次反復(fù)編程,因此,成為科研產(chǎn) 品開發(fā)及其小型化的首選器件,其應(yīng)用極為廣泛。發(fā)明內(nèi)容本發(fā)明目的在于提供一種核心路由器線卡輸出端多隊列數(shù)據(jù)包緩存管理與輸出隊列調(diào)度 的實現(xiàn)機制,其特征在于,它含有一個FPGA芯片,作為該FPGA芯片片外存儲器的鏈表存儲器,以及同 樣作為該FPGA芯片片外存儲器的數(shù)據(jù)片存儲器,其中數(shù)據(jù)片存儲器,被分成大小相等的2(N+')個存儲塊,N—般取不小于8192的自然數(shù),每 個存儲塊存儲一個數(shù)據(jù)包的一個數(shù)據(jù)片,組成每個存儲塊的存儲單元的地址是連續(xù)的;來自 同一個輸入線卡,具有相同優(yōu)先權(quán)的數(shù)據(jù)包構(gòu)成一個隊列,每個隊列所占用的存儲塊采用鏈 表的形式進行管理;鏈表存儲器,用于保存數(shù)據(jù)片存儲器中的所有鏈表,每一個鏈表結(jié)點保存數(shù)據(jù)片存儲器 的一個存儲塊,鏈表結(jié)點的存儲地址和存儲塊的序列號一一對應(yīng),每一個鏈表結(jié)點存儲在鏈 表存儲器的一個存儲單元中,作為鏈表存儲器的存儲器,每個存儲單元的數(shù)據(jù)寬度由數(shù)據(jù)片 存儲器分成的存儲塊數(shù)量,以及數(shù)據(jù)片的最大長度決定,具有如下數(shù)據(jù)結(jié)構(gòu)(TN比特位,表示同一隊列的下一個鏈表結(jié)點地址,N+l比特位,表示數(shù)據(jù)包的邊界結(jié)點,N+2比特位,為存儲單元使用的指示標識,N+3 N+K比特位,為數(shù)據(jù)片長度,K和系統(tǒng)定義的數(shù)據(jù)片最大值相關(guān),K最大值為8, 其中N+2比特位為l,表示該節(jié)點對應(yīng)的存儲塊存有數(shù)據(jù)片,該存儲器單元已經(jīng)被使用,否則 置0;N+l比特位為l,表示這是數(shù)據(jù)包的最后一個數(shù)據(jù)片,否則置0;N+3、+K比特位,保存對應(yīng)數(shù)據(jù)片的實際長度,長度以4字節(jié)為單位;鏈表結(jié)點分為數(shù)據(jù)片隊列鏈表結(jié)點和空鏈表結(jié)點;FPGA芯片含有數(shù)據(jù)片存儲器接口電路、數(shù)據(jù)片F(xiàn)IFO存儲器、數(shù)據(jù)片輸入電路、鏈表 管理電路、數(shù)據(jù)包輸出電路、鏈表存儲器接口電路、隊列狀態(tài)存儲器、調(diào)度結(jié)果FIFO存儲器,以及隊列調(diào)度電路,其中數(shù)據(jù)片F(xiàn)IFO存儲器,含有外界數(shù)據(jù)輸入端,所連數(shù)據(jù)片輸入電路輸出的讀數(shù)據(jù)信息輸入 端,還含有指向所連外界數(shù)據(jù)輸入端的快滿信號;數(shù)據(jù)片輸入電路,第一個輸入端與所連FIFO存儲器的數(shù)據(jù)片輸出端相連,第一個輸出端 與所連鏈表管理電路的數(shù)據(jù)片輸入端相連,而第二個輸入端則與所連鏈表管理電路的快滿信 號輸出端相連;隊列狀態(tài)存儲器,是由4個雙端口的片內(nèi)RAM存儲器組合而成,其數(shù)據(jù)輸入端口和所連 鏈表管理電路的數(shù)據(jù)輸出端相連,若輸入的隊列含有至少一個完整的數(shù)據(jù)包,則隊列對應(yīng)的 存儲單元置l,反之,置0,它的讀地址和讀信號來自隊列調(diào)度電路,組成隊列狀態(tài)存儲器的 每個RAM存儲器讀寫端口地址線、數(shù)據(jù)線寬度不同,讀端口地址線有3根,輸出數(shù)據(jù)位寬為 32位,它的寫端口,有8根寫地址線,但寫入數(shù)據(jù)寬度為l位;隊列調(diào)度電路,數(shù)據(jù)輸入端和所連隊列狀態(tài)存儲器的數(shù)據(jù)輸出端相連,而該隊列調(diào)度的 數(shù)據(jù)輸出端和所連隊列調(diào)度電路FIFO存儲器的輸入端相連;隊列調(diào)度結(jié)果FIFO存儲器,它的輸入端和所連隊列調(diào)度電路的輸出端相連,同時它輸出 快滿信號給隊列調(diào)度電路,它的輸出端和鏈表管理電路相連,而讀信號也來自鏈表管理電路;數(shù)據(jù)片存儲器接口電路,兩個輸入端分別和所連數(shù)據(jù)片輸入電路、鏈表管理電路的數(shù)據(jù) 輸出端相連,同時,另外又和數(shù)據(jù)片存儲器相連;鏈表存儲器接口電路,分別和所連鏈表管理電路、鏈表存儲器互聯(lián);數(shù)據(jù)包輸出電路,數(shù)據(jù)包輸入端與所連數(shù)據(jù)片存儲器接口電路的輸出端相連,另外還有 一個數(shù)據(jù)包輸出端和外界相連;鏈表管理電路,含有存儲器、寄存器和內(nèi)部邏輯控制電路,用于管理片外的鏈表存儲 器,最多管理1024個鏈表隊列,其中存儲器,含有隊列含數(shù)據(jù)片個數(shù)存儲器、隊列含數(shù)據(jù)包個數(shù)存儲器、鏈表隊列頭地址 存儲器、鏈表隊列尾地址存儲器以及待發(fā)送數(shù)據(jù)片首地址FIFO存儲器,其中鏈表隊列頭地址存儲器,是雙端口存儲器,地址寬度為10位,數(shù)據(jù)寬度為N+1位,各個存儲單元存放不同隊列的鏈表頭地址,以便索引某個隊列的第一個數(shù)據(jù)片鏈表結(jié)點地址和相應(yīng)的數(shù)據(jù)片;鏈表隊列尾地址存儲器,是雙端口存儲器,地址寬度為10位,數(shù)據(jù)寬度為N+1位,各個 存儲單元存放不同隊列的尾地址,以便索引某個隊列的最后一個數(shù)據(jù)片鏈表結(jié)點地址和相應(yīng) 的數(shù)據(jù)片;隊列含數(shù)據(jù)片個數(shù)存儲器,是雙端口存儲器,地址寬度為10位,數(shù)據(jù)寬度為N+1位,各 個存儲單元存放不同隊列含數(shù)據(jù)片個數(shù)信息;隊列含數(shù)據(jù)包個數(shù)存儲器,是雙端口存儲器,地址寬度為10位,數(shù)據(jù)寬度為N+1位,各 個存儲單元存放不同隊列含數(shù)據(jù)包個數(shù)信息;待發(fā)送數(shù)據(jù)片首地址FIFO存儲器,是一個先入先出FIFO隊列存儲器,數(shù)據(jù)寬度為N+l 比特,深度為8,存儲4個數(shù)據(jù)后,發(fā)出快滿信號寄存器含有空鏈表頭指針寄存器、空鏈表下一個頭指針寄存器、空鏈表尾指針寄存器、 數(shù)據(jù)片隊列頭指針寄存器、數(shù)據(jù)片隊列尾指針寄存器、外存含數(shù)據(jù)片個數(shù)寄存器,每個寄存 器的位寬為N+1位,其中數(shù)據(jù)片隊列頭指針指定當(dāng)前隊列第一個數(shù)據(jù)包的第一個數(shù)據(jù)片的 結(jié)點地址,數(shù)據(jù)片隊列尾指針指定當(dāng)前隊列最后一個數(shù)據(jù)包的最后一個數(shù)據(jù)片的結(jié)點地址;內(nèi)部邏輯控制電路,對鏈表管理電路內(nèi)的存儲器和寄存器進行數(shù)據(jù)信息和控制信息的交 互,同時對所連數(shù)據(jù)片存儲器接口電路、數(shù)據(jù)片輸入電路、鏈表存儲器接口電路、隊列狀態(tài) 存儲器,以及調(diào)度結(jié)果FIFO存儲器進行控制信息和數(shù)據(jù)信息的交互;隊列調(diào)度電路,由隊列加權(quán)和更新電路、1024選1數(shù)據(jù)比較器構(gòu)成,其中隊列加權(quán)和更新電路,含有隊列調(diào)度結(jié)果存儲器、隊列加權(quán)和存儲器以及加權(quán)和計算 電路,其中隊列調(diào)度結(jié)果存儲器,是一個雙端口存儲器,輸入端與1024選1數(shù)據(jù)比較器的輸出端相 連,也與加權(quán)計算電路相連,從加權(quán)計算電路中輸入存儲器讀地址和讀信號,輸出端和加權(quán) 計算電路相連,輸出隊列調(diào)度結(jié)果;隊列加權(quán)和存儲器,是一個雙端口存儲器,與加權(quán)計算電路相連,輸入輸出每個隊列的 加權(quán)和W;加權(quán)計算電路,從隊列狀態(tài)存儲器得到兩個線卡共128個優(yōu)先權(quán)隊列的狀態(tài)信息,同時根據(jù)隊列調(diào)度結(jié)果存儲器保存的最后一次1024個隊列的調(diào)度結(jié)果,按以下方式計算出2個線 卡128個隊列的加權(quán)和,對于來自某線卡優(yōu)先級為m的數(shù)據(jù)包隊列若通過隊列調(diào)度結(jié)果存儲器,知道最近一次調(diào)度中它沒有被選中,但從隊列加權(quán)和存 儲器了解其以前加權(quán)和為W,且從隊列狀態(tài)存儲器輸入值了解該隊列含有完整未發(fā)送的數(shù)據(jù) 包,則優(yōu)先級為m的隊列新的加權(quán)和為W+m;若最近一次調(diào)度它未被選中,以前的加權(quán)和為W,該隊列不含有未發(fā)送數(shù)據(jù)包,則優(yōu) 先級為m的隊列新的加權(quán)和為0;若最近一次調(diào)度被選中,該隊列以前的加權(quán)和為W,且含有完整未發(fā)送的數(shù)據(jù)包,則優(yōu)先級為m的隊列新加權(quán)和為m;若最近一次調(diào)度被選中,以前的加權(quán)和為W,但不含有完整未發(fā)送的數(shù)據(jù)包,則優(yōu)先級為m的隊列的新加權(quán)和為0,加權(quán)計算電路輸出每次輸出2個線卡號,以及每個線卡64個隊列的加權(quán)和,它實現(xiàn) 來自16個線卡的1024個數(shù)據(jù)包隊列加權(quán)和更新;1024選1比較器含有加權(quán)和比較和當(dāng)前加權(quán)和最大的優(yōu)先級生成電路,以及16選1 數(shù)據(jù)比較器電路,其中加權(quán)和比較與當(dāng)前加權(quán)和最大的優(yōu)先級生成電路,共分兩組,每組由延時電路、64選1 數(shù)據(jù)比較器和線卡加權(quán)和最大優(yōu)先級更新電路組成,兩個延時電路分別輸入0-7線卡號及 8-15線卡號,兩個64選1數(shù)據(jù)比較器分別輸入相應(yīng)線卡內(nèi)64個隊列的各自加權(quán)和,各自輸 出來自一個線卡的64個隊列中隊列加權(quán)和的最大值,該最大值是通過來自同一線卡的64個 隊列中,每個隊列的加權(quán)和經(jīng)過倆倆比較以后,得到的;而兩個線卡加權(quán)和最大優(yōu)先級更新 電路共同輸出更新后的16個加權(quán)和及16個加權(quán)和對應(yīng)的線卡號;16選1數(shù)據(jù)比較器電路,含有兩個含優(yōu)先級輸入的8選1數(shù)據(jù)比較器及一個2選1數(shù)據(jù) 比較器,兩個含優(yōu)先級輸入的8選1數(shù)據(jù)比較器共同輸入16個更新后的隊列加權(quán)和,共同輸 出其中兩個最大的加權(quán)和及相應(yīng)的最大加權(quán)和隊列編碼,而2選1數(shù)據(jù)比較器則從輸入的2 個加權(quán)和及相應(yīng)編碼中挑選一個最大的輸出;構(gòu)成64選1的8選1數(shù)據(jù)比較器和16選1數(shù)據(jù)比較器電路的含優(yōu)先級輸入的8選1數(shù) 據(jù)比較器都包含28個16位數(shù)據(jù)比較器,一個多路選擇器,16位數(shù)據(jù)比較器有A和B 2個16 位輸入數(shù)據(jù),復(fù)位RESET是16位數(shù)據(jù)比較器的復(fù)位端,如果A大于或等于B, 16位數(shù)據(jù)比較器的輸出AgeB為1,否則為0, 16位數(shù)據(jù)比較器完成2個16位數(shù)據(jù)的比較需要耗費一個時鐘周 期,對應(yīng)8選1數(shù)據(jù)比較器或含優(yōu)先級輸入的8選1數(shù)據(jù)比較器,讓8個輸入數(shù)據(jù)A8 A1,進 行倆倆比較,根據(jù)所有的比較結(jié)果,可以確定8個輸入數(shù)據(jù)中,哪一個最大;如果A8》A7, A8 》A6, A8》A5, A8》A4, A8》A3, A8》A2, A8》A1都成立,則A8就是最大數(shù),否則,若A7》 A6, A7》A5, A7》A4, A7》A3, A7》A2, A7》A1都成立,則A7就是最大數(shù),以此類推,通過 28個16位數(shù)據(jù)比較器和一個多路選擇器的配合,可以從8個輸入數(shù)據(jù)中選擇到一個最大數(shù) 據(jù),8選1數(shù)據(jù)比較器完成一次運算需要2個時鐘周期;隊列調(diào)度電路把從1024選1數(shù)據(jù)比較器得到的加權(quán)和最大的隊列及其編碼送往調(diào)度結(jié)果 FIF0存儲器,由鏈表管理電路讀取后,通過鏈表管理電路的運行,得到調(diào)度成功隊列隊頭數(shù) 據(jù)包的所有數(shù)據(jù)片在數(shù)據(jù)片存儲器存儲的首地址,這些地址保存在待發(fā)送數(shù)據(jù)片首地址FIFO 存儲器,通過該FIFO存儲器,發(fā)往數(shù)據(jù)片存儲器接口電路,數(shù)據(jù)片存儲器接口電路從FPGA 片外數(shù)據(jù)片存儲器讀取數(shù)據(jù)包的每一個分片,發(fā)送到數(shù)據(jù)包輸出電路,通過數(shù)據(jù)包輸出電路 輸出。通過上述方法構(gòu)建的線卡輸出端多隊列數(shù)據(jù)包緩存管理與輸出隊列調(diào)度系統(tǒng),達到的性 能指標為Q0S支持1024個數(shù)據(jù)包隊列;隊列鏈表式存儲共享;支持加權(quán)輪詢優(yōu)先級調(diào)度策略;每8個時鐘周期產(chǎn)生一個隊列調(diào)度結(jié)果;線卡接收數(shù)據(jù)包速率為2. 5Gbps時,系統(tǒng)能夠保證線速處理輸入輸出數(shù)據(jù)包。
圖1多隊列數(shù)據(jù)包緩存管理與輸出隊列調(diào)度系統(tǒng)的系統(tǒng)結(jié)構(gòu)圖; 圖2路由器線卡和交換結(jié)構(gòu)的連接示意圖;說明多隊列數(shù)據(jù)包緩存管理與輸出隊列調(diào)度系統(tǒng)寓于分片組合成數(shù)據(jù)包電路之 中,是該電路必不可少的組成部分;圖3共享緩存的多隊列數(shù)據(jù)存儲示意圖;說明 一個數(shù)據(jù)片由 一個英文字母加一個阿拉伯?dāng)?shù)字代表,英文字母相同的數(shù)據(jù)片屬于同一個隊列,阿拉伯?dāng)?shù)字表示當(dāng)前數(shù)據(jù)片在各自隊列中,被存入存儲器的順序. 圖4空鏈表隊列結(jié)構(gòu)和數(shù)據(jù)包隊列結(jié)構(gòu); 圖5鏈表存儲器的初始化后效果圖;說明圖中初始化是以存儲器被分成64*1024個存儲塊為例。圖6鏈表初始化示意圖;圖7鏈表管理電路內(nèi)部功能框圖;圖8隊列頭或尾地址存儲器接口圖;圖9隊列數(shù)據(jù)包或數(shù)據(jù)片個數(shù)存儲器接口圖;圖10隊列狀態(tài)存儲器接口及其組成的4個雙端口存儲器接口圖;說明A1和A2輸入輸出端口供0 7號線卡使用,B1和B2輸入輸出端口供8 15號線卡使用圖11 8選1數(shù)據(jù)比較器功能框圖;說明圖中的比較器都是16位數(shù)據(jù)比較器; 圖12 16位數(shù)據(jù)比較器接口框圖;說明如果輸入的16位數(shù)據(jù)A大于或等于16位數(shù)據(jù)B,則輸出值A(chǔ)geB為l,否則 為0, 16位數(shù)據(jù)比較器從數(shù)據(jù)輸入到得到輸出結(jié)果,需要一個時鐘周期; 圖13含優(yōu)先級輸入的8選1數(shù)據(jù)比較器功能框圖;說明圖中的比較器都是16位數(shù)據(jù)比較器;圖14 64選1數(shù)據(jù)比較器功能框圖;圖15 1024選1數(shù)據(jù)比較器功能框圖; 圖16隊列調(diào)度電路功能框圖; 圖17隊列加權(quán)和更新電路功能框圖;具體實施方式
核心路由器線卡輸出端多隊列數(shù)據(jù)包緩存管理與輸出隊列調(diào)度調(diào)度功能由一片F(xiàn)PGA配 合2片存儲芯片完成的。1.整個系統(tǒng)含有(1)數(shù)據(jù)片F(xiàn)IFO存儲器,它是一個先入先出隊列存儲器,它接收外界寫入的數(shù)據(jù)片和數(shù)據(jù)片輸入電路的讀數(shù)據(jù)信號,同時反饋給外界存儲器快滿信號。(2) 數(shù)據(jù)片輸入電路,它的輸入端和鏈表管理電路的輸出端相連,它接收鏈表管理電路 發(fā)送的數(shù)據(jù)片存儲器快滿信號。(3) 鏈表存儲器,它是FPGA片外存儲器,它的輸入端口和輸出端口都和鏈表管理電路相連。(4) 數(shù)據(jù)片存儲器,它的輸入端、輸出端和存儲器接口電路相連,它是一個FPGA片外 存儲器。(5) 隊列狀態(tài)存儲器,是由4個雙端口的片內(nèi)RAM存儲器組合而成,其數(shù)據(jù)輸入端口和 鏈表管理電路的數(shù)據(jù)輸出端相連,若輸入的隊列含有至少一個完整的數(shù)據(jù)包,則隊列對應(yīng)的 存儲單元置l,反之,置0。它的讀信號來自隊列調(diào)度電路。組成隊列狀態(tài)存儲器的每個RAM 存儲器讀寫端口地址線、數(shù)據(jù)線寬度不同。讀端口地址線有3根,輸出數(shù)據(jù)位寬為32位;寫 端口,有8根地址線,但寫入數(shù)據(jù)寬度為l位。(6) 隊列調(diào)度電路,它的輸入端和隊列狀態(tài)存儲器的輸出端口相連,它還輸出讀存儲器 需要的地址信號和讀信號給隊列狀態(tài)存儲器。(7) 隊列調(diào)度結(jié)果FIFO存儲器,它是一個先入先出隊列存儲器,它的輸入端和隊列調(diào)度 電路輸出端相連,它的讀信號來自鏈表管理電路。(8) 數(shù)據(jù)包輸出電路,它的輸入端和數(shù)據(jù)片存儲器接口電路相連。(9) 數(shù)據(jù)片存儲器接口電路,它的輸入端和數(shù)據(jù)片輸入電路、鏈表管理電路、數(shù)據(jù)片存 儲器相連。(10) 鏈表存儲器接口電路,它的輸入端和鏈表管理電路,鏈表存儲器輸出端相連。(11) 鏈表管理電路,它的輸入端分別和數(shù)據(jù)片輸入電路、鏈表存儲器接口電路、調(diào)度 結(jié)果FIF0相連。數(shù)據(jù)片存儲器被分成大小相等的2(N+1)個存儲塊,N—般取不小于8192的自然數(shù),每個 存儲塊可以存儲一個數(shù)據(jù)片,組成每個存儲塊的存儲單元地址是連續(xù)的。 一個數(shù)據(jù)包常常由一 個以上的數(shù)據(jù)片組成,這些數(shù)據(jù)片保存在不同的存儲塊中,這些存儲塊在存儲器中的位置可以 是互不相鄰。為了便于管理,來自同一個輸入線卡,具有相同優(yōu)先級的數(shù)據(jù)包構(gòu)成一個隊列。 每個隊列占用的存儲塊采用鏈表的形式進行管理。所有的鏈表保存在鏈表存儲器中,每一個鏈 表結(jié)點對應(yīng)數(shù)據(jù)片存儲器的一個存儲塊,鏈表結(jié)點的存儲地址和存儲塊的序列號一一對應(yīng)。也就是說如果一個鏈表結(jié)點在鏈表存儲器中的存儲地址是n,它就對應(yīng)數(shù)據(jù)片存儲器的第n個存 儲塊。作為鏈表存儲器的存儲器,每個存儲單元的數(shù)據(jù)寬度由數(shù)據(jù)片存儲器分成的存儲塊數(shù)量, 以及數(shù)據(jù)片的最大長度決定,鏈表存儲器每個存儲單元的數(shù)據(jù)結(jié)構(gòu)如下比特位置N+K~N+3N+2N+lN 0說明數(shù)據(jù)片長度存儲單元使用指示信號數(shù)據(jù)包邊界信號下一個鏈表結(jié)點地址bitN bit。位保存同一個隊列下一個鏈表節(jié)點的地址,因為系統(tǒng)中數(shù)據(jù)片存儲器被劃分為2,>個存儲塊,所以每個存儲塊的地址為N+1位。如果鏈表存儲器某個單元對應(yīng)的存儲塊 存有數(shù)據(jù)片,則這個存儲塊被使用了,鏈表存儲器相應(yīng)存儲單元的biW2位置l,否則,置0。 數(shù)據(jù)包之間的邊界信號,用來將數(shù)據(jù)包和數(shù)據(jù)包分隔開來。 一個隊列中擁有一個以上數(shù)據(jù)包 時,為了便于區(qū)別,排在鏈表隊列前面的每個數(shù)據(jù)包的最后一個信元節(jié)點的bitw位置l,表 示這是數(shù)據(jù)包的最后一個信元節(jié)點,但該隊列鏈表后面還有其它數(shù)據(jù)包的信元。 一個數(shù)據(jù)包 由一個或一個以上的數(shù)據(jù)片組成。在數(shù)據(jù)片的鏈表信息中,存儲有數(shù)據(jù)片的長度信息,存儲單元的bit, bit,+3位保存對 應(yīng)數(shù)據(jù)片的實際長度,長度以4字節(jié)為單位,K和數(shù)據(jù)片的最大值相關(guān),K最大值為8,表示 數(shù)據(jù)片的最大長度可以定義為128字節(jié)。鏈表存儲器保存的鏈表結(jié)點分兩種數(shù)據(jù)片隊列鏈表結(jié)點和空鏈表結(jié)點。鏈表管理電路用來管理片外的鏈表存儲器,它由3個組成部分構(gòu)成存儲器、寄存器、 內(nèi)部邏輯控制,管理最多1024個鏈表隊列。鏈表管理電路包含的存儲器有隊列含數(shù)據(jù)片個數(shù)存儲器length一ram,隊列含數(shù)據(jù)包個 數(shù)存儲器packet_ram,鏈表隊列頭地址存儲器head一ram,鏈表隊列尾地址存儲器tail一ram, 以及待發(fā)送數(shù)據(jù)片首地址FIFO存儲器。length—ram、 packet—ram 、 head—ram、 tail—ram 的地址線都為10位,數(shù)據(jù)寬度都為N+l位。length—ram、 packet—ram 、 head—ram、 tail_ram 的每個存儲單元,對應(yīng)一個數(shù)據(jù)包隊列。上述除FIFO外的片內(nèi)存儲器都為雙端口存儲器,一 個輸入端口, 一個輸出端口,兩個端口的數(shù)據(jù)寬度和地址寬度一樣。它們的作用分別是鏈表頭地址存儲器它的各個存儲單元存放不同隊列的鏈表頭地址,使用該地址可以索 引到某個隊列的第一個數(shù)據(jù)片鏈表結(jié)點地址和相應(yīng)的數(shù)據(jù)片。鏈表尾地址存儲器它的各個存儲單元存放不同隊列的尾地址,使用該地址可以索引到某個隊列的最后一個數(shù)據(jù)片鏈表結(jié)點地址和相應(yīng)的數(shù)據(jù)片。數(shù)據(jù)片個數(shù)存儲器它的各個存儲單元存放不同隊列含數(shù)據(jù)片的個數(shù)信息。數(shù)據(jù)包個數(shù)存儲器它的各個存儲單元存放不同隊列含數(shù)據(jù)包的個數(shù)信息。待發(fā)送數(shù)據(jù)片首地址存儲器是一個先入先出隊列存儲器,它的數(shù)據(jù)寬度為N+l比特,深度 為8,存儲4個數(shù)據(jù)后,就會發(fā)出快滿信號。鏈表管理模塊包含的寄存器有空鏈表頭指針寄存器freespace一linkheader,空鏈表下 一個頭指針寄存器nextspace—linkheader,空鏈表尾指針寄存器freespace—linktail,數(shù)據(jù) 片隊列頭指針寄存器為s_qn—linkheader,數(shù)據(jù)片隊列尾指針寄存器為s—qn—linktail,外存 含數(shù)據(jù)片個數(shù)寄存器cell—number。以上每個寄存器的位寬為N+l位??真湵眍^指針freespace—linkheader所指存儲單元,存儲的下一個空鏈表結(jié)點為 nextspacejinkheader。 一個鏈表由一個頭指針和一個尾指針指定。數(shù)據(jù)片隊列頭指針指定 當(dāng)前隊列第一個數(shù)據(jù)包第一個數(shù)據(jù)片的結(jié)點地址,數(shù)據(jù)片隊列尾指針指定當(dāng)前隊列最后一個 數(shù)據(jù)包最后一個數(shù)據(jù)片的結(jié)點地址。鏈表管理電路由內(nèi)部邏輯控制模塊來協(xié)調(diào)數(shù)據(jù)信息和控制信息的交互。同時對所連數(shù)據(jù) 片存儲器接口電路、數(shù)據(jù)片輸入電路、鏈表存儲器接口電路、隊列狀態(tài)存儲器,以及調(diào)度結(jié) 果FIFO存儲器進行控制信息和數(shù)據(jù)信息的交互。隊列狀態(tài)存儲器,它指示每個隊列是否有完整的數(shù)據(jù)包,如果某隊列含有一個或一個以上 完整的數(shù)據(jù)包,則對應(yīng)該隊列的存儲器單元為1;相反,如果某隊列不含有一個完整的數(shù)據(jù) 包,對應(yīng)該隊列的存儲器單元為0。隊列狀態(tài)存儲器由4個結(jié)構(gòu)一樣的雙端口存儲器組成, 每個存儲器的結(jié)構(gòu)為 一個輸入入端口, 一個輸出端口,輸入和輸出端口數(shù)據(jù)寬度和地址寬 度不一樣。輸入端口含l根數(shù)據(jù)線,8根地址線;輸出端口含32根數(shù)據(jù)線,3根地址線。隊列調(diào)度電路由隊列加權(quán)和更新電路、1024選1數(shù)據(jù)比較器構(gòu)成。隊列加權(quán)和更新電路 根據(jù)從隊列狀態(tài)存儲器讀入的隊列狀態(tài)和1024選1數(shù)據(jù)比較器輸入的當(dāng)前隊列調(diào)度結(jié)果,更 新1024個隊列的加權(quán)和。1024選1數(shù)據(jù)比較器,每個時鐘周期它接收隊列加權(quán)和更新電路輸出的2個線卡號以及 每個線卡的64個優(yōu)先級隊列的加權(quán)和,每8個周期得到16個線卡,1024個隊列的更新加權(quán) 和。每8個周期,1024選1數(shù)據(jù)比較器電路利用得到更新的各個隊列加權(quán)和,從1024個隊 列中調(diào)度出一個隊列。1024選1數(shù)據(jù)比較器由加權(quán)和比較與當(dāng)前加權(quán)和最大的優(yōu)先級生成電路、16選1數(shù)據(jù)比較器電路構(gòu)成,前者由線卡號延時電路、64選1數(shù)據(jù)比較器電路、線卡加 權(quán)和最大優(yōu)先級更新電路組成;后者由含優(yōu)先級輸入的8選1數(shù)據(jù)比較器和2選1數(shù)據(jù)比較 器構(gòu)成。64選1數(shù)據(jù)比較器從一個線卡的當(dāng)前64個優(yōu)先級中挑選一個加權(quán)和最高的優(yōu)先級 輸出,從數(shù)據(jù)輸入到結(jié)果輸出,64選1數(shù)據(jù)比較器需要消耗5個時鐘周期。線卡號延時電路 完成線卡號輸出延時作用,以便系統(tǒng)以流水方式工作時,線卡加權(quán)和最大優(yōu)先級更新電路知 道當(dāng)前需要更新的是哪一個線卡的比較結(jié)果。線卡加權(quán)和最大優(yōu)先級更新電路,為16個線卡中的每個線卡保存一個該線卡當(dāng)前最大加 權(quán)和以及該最大加權(quán)和對應(yīng)的優(yōu)先級記錄,并將該記錄輸出給16選1數(shù)據(jù)比較器電路。每8 個時鐘周期,線卡加權(quán)和最大優(yōu)先級更新電路將保存的每個線卡的當(dāng)前最大加權(quán)和以及該最 大加權(quán)和對應(yīng)的優(yōu)先級更新一次,以反映最新的變化情況。16選1數(shù)據(jù)比較器由2個含優(yōu)先級輸入的8選1數(shù)據(jù)比較器和一個2選1數(shù)據(jù)比較器構(gòu) 成。16選1數(shù)據(jù)比較器從16個線卡中挑選一個加權(quán)和最大的優(yōu)先級,并將挑選的當(dāng)前加權(quán) 和最大的線卡的編號和加權(quán)和優(yōu)先級編號組合輸出,也就是隊列號輸出,該結(jié)果就是隊列調(diào) 度結(jié)果。含優(yōu)先級輸入的8選1數(shù)據(jù)比較器和8選1數(shù)據(jù)比較器略有不同,前者的輸入包括不同 的8個加權(quán)、各個加權(quán)的優(yōu)先級編碼,輸出為最大加權(quán)值、最大加權(quán)的優(yōu)先級編碼、8個加 權(quán)中的哪一個被選中,例如如果輸入的8個加權(quán)和al a8,通過比較得到al為最大值,則輸 出pod—data=al,則pocLptr
為高電平,pod—ptr [7: l]每一位都是低電平。后者的輸入只 有8個不同的加權(quán),輸出為最大加權(quán)值、8個加權(quán)中的哪一個被選中。含優(yōu)先級輸入的8選1 數(shù)據(jù)比較器由28個16位數(shù)據(jù)比較器和16個延時器構(gòu)成,8選1數(shù)據(jù)比較器由28個16位 數(shù)據(jù)比較器和8個延時器構(gòu)成。64選一數(shù)據(jù)比較器由9個8選一數(shù)據(jù)比較器構(gòu)成。 一個8選1數(shù)據(jù)比較器從輸入數(shù)據(jù)到 得到比較結(jié)果需要2個時鐘周期。構(gòu)成64選1的8選1數(shù)據(jù)比較器和16選1數(shù)據(jù)比較器電路的含優(yōu)先級輸入的8選1數(shù) 據(jù)比較器都包含28個16位數(shù)據(jù)比較器, 一個多路選擇器。16位數(shù)據(jù)比較器有A和B 2個16 位輸入數(shù)據(jù),復(fù)位RESET是16位數(shù)據(jù)比較器的復(fù)位端,如果A大于或等于B, 16位數(shù)據(jù)比較器 的輸出AgeB為1,否則為0。 16位數(shù)據(jù)比較器完成2個16位數(shù)據(jù)的比較需要耗費一個時鐘周 期。對應(yīng)8選1數(shù)據(jù)比較器或含優(yōu)先級輸入的8選1數(shù)據(jù)比較器,讓8個輸入數(shù)據(jù)A8~A1,進的比較結(jié)果,可以確定8個輸入數(shù)據(jù)中,哪一個最大。例如:如果A8》A7, A8》A6, A8》A5, A8》A4, A8》A3, A8》A2, A8》A1都成立,則A8就是最大數(shù),否則,若A7 》A6, A7^A5, A7》A4, A7》A3, A7》A2, A7》A1都成立,則A7就是最大數(shù),以此類推,通 過28個16位數(shù)據(jù)比較器和一個多路選擇器的配合,可以從8個輸入數(shù)據(jù)中選擇到一個最大數(shù) 據(jù)。8選1數(shù)據(jù)比較器或含優(yōu)先級輸入的8選1數(shù)據(jù)比較器完成一次運算需要2個時鐘周期。隊列加權(quán)和更新電路由隊列調(diào)度結(jié)果存儲器、隊列加權(quán)和存儲器以及加權(quán)計算電路構(gòu)成。 加權(quán)計算電路輸出讀隊列狀態(tài)存儲器需要的讀地址信號和讀信號,同時接收隊列狀態(tài)存儲輸 出的隊列狀態(tài)數(shù)據(jù)。輸出的隊列狀態(tài)數(shù)據(jù)用0或1表示對應(yīng)隊列是否有完整數(shù)據(jù)包。2.它的工作過程為 (1)系統(tǒng)的初始化 系統(tǒng)上電后,立即對系統(tǒng)進行初始化。初始化要完成的工作有復(fù)位系統(tǒng),將FPGA片內(nèi)存儲器length—ram、 packet_ram每個存儲單元的值都變?yōu)?, 外存含數(shù)據(jù)片個數(shù)寄存器清0,所有片內(nèi)FIFO清空。對鏈表存儲器進行初始化,建立一條覆 蓋片外數(shù)據(jù)片存儲器所有存儲塊的空鏈表,鏈表結(jié)點和存儲塊一一對應(yīng),鏈表結(jié)點地址就是 對應(yīng)存儲塊的序號,實際指明存儲塊的位置。建立空鏈表的方法比較簡單,只需要在鏈表存儲器每個存儲單元存儲比存儲單元的地址 大1的數(shù),在2(N+1) - 1存儲單元不寫數(shù),就可以了。此外,鏈表的頭指針freespace-Unkheader 值為0, nextspace—linkheader值為1, freespace—linktail值為2(N+1) - 1。這樣,就建立 了空鏈表。(2)數(shù)據(jù)片的接收與新鏈表結(jié)點的建立 初始化完成后,系統(tǒng)進入正常工作,外部數(shù)據(jù)片輸入到數(shù)據(jù)片F(xiàn)IF0。如果鏈表管理電 路沒有反饋給數(shù)據(jù)片輸入電路數(shù)據(jù)片存儲器快滿信號,數(shù)據(jù)片輸入電路就從數(shù)據(jù)片F(xiàn)IFO中讀 取數(shù)據(jù)片。數(shù)據(jù)片輸入電路提取數(shù)據(jù)片所屬隊列信息4位的源端口號(表明數(shù)據(jù)包來自哪 一個線卡),和6位的數(shù)據(jù)包優(yōu)先級號;并將數(shù)據(jù)片的隊列信息發(fā)送給鏈表管理電路。鏈表結(jié)點需要為一個數(shù)據(jù)片保存的信息有3種數(shù)據(jù)包邊界信號、緩存塊的序列號以 及數(shù)據(jù)片的長度。鏈表管理電路每接收到一個數(shù)據(jù)片,進行鏈表結(jié)點插入操作。每發(fā)送一個數(shù)據(jù)片,進行 鏈表結(jié)點刪除操作。數(shù)據(jù)包隊列總是從s—qn_linktail指針所指方向添加一個數(shù)據(jù)片,從s—qn—linkheader 指針所指方向輸出 一個數(shù)據(jù)片。鏈表管理電路每接收一個新的數(shù)據(jù)片隊列信息,在內(nèi)部控制邏輯的作用下,對length—ram 存儲器進行讀操作,將相應(yīng)隊列的數(shù)據(jù)片個數(shù)計算器的值s一queue—length讀出來,根據(jù)讀取 得到的值,知道該數(shù)據(jù)片是否是隊列的第一個結(jié)點。由于新數(shù)據(jù)片的加入,隊列長度增加了 一個單位,所以,接下來系統(tǒng)進行s—queue—length加1操作,再寫回到length—ram原來的 存儲單元。鏈表管理電路采用freespace-linkheader所指鏈表存儲單元做為新的鏈表結(jié)點,同時將 freespace-linkheader值傳送給數(shù)據(jù)片存儲器接口電路,數(shù)據(jù)片存儲器將接收的新數(shù)據(jù)片存 儲在freespace-linkhe油r所指存儲塊中。因為空鏈表的頭結(jié)點已經(jīng)成為新數(shù)據(jù)片結(jié)點,所以空鏈表頭指針必須指向新的空鏈表頭 結(jié)點freespace-linkheader的值更新為nextspace_linkheader。鏈表管理電路提供給鏈表 存儲器接口電路nextspace一linkheader值,后者利用該值做為地址訪問鏈表存儲器,讀出存 儲單元數(shù)據(jù)值,并將該值賦給nextspace—linkheader值。通過以上操作, nextspace—linkheader更新為原來空鏈表中nextspace—linkheader所指存儲單元下一個鏈 表結(jié)點地址域指的存儲單元的地址值。如果新結(jié)點是隊列的第一個節(jié)點,則鏈表接口電路直接將數(shù)據(jù)片結(jié)點信息寫入鏈表存儲 器,因為該結(jié)點是隊列的最后一個結(jié)點,所以寫入的結(jié)點信息中下一個鏈表結(jié)點地址域bi" 、it。部分沒有實際作用,通常設(shè)為0。在將新結(jié)點信息寫入鏈表存儲器的同時,鏈表管理電 路將新結(jié)點地址寫入鏈表尾地址存儲器和鏈表頭地址存儲器,這樣新的結(jié)點即是隊列的頭結(jié) 點,也是隊列的尾結(jié)點。當(dāng)前鏈表隊列的尾指針s_qn_linktail和頭指針s_qn_linkheader 都指向該結(jié)點。如果新結(jié)點不是隊列的第一個節(jié)點,鏈表管理電路通過讀鏈表尾地址存儲器,得到數(shù)據(jù) 片待加入鏈表隊列尾指針s—qn—linktail,并將它傳送給鏈表存儲器接口電路,后者利用 s—qn_linktail地址,訪問鏈表存儲器,置s—qn—linktail所指存儲單元的下一個鏈表結(jié)點 地址域為新鏈表結(jié)點的地址。此外,鏈表接口電路還將新數(shù)據(jù)片結(jié)點信息寫入新鏈表結(jié)點對 應(yīng)的鏈表存儲器存儲單元,鏈表管理電路更新鏈表尾地址存儲器,使當(dāng)前鏈表隊列的尾指針 s—qn—1 inktai 1指向新加入結(jié)點的鏈表存儲地址。通過上述過程,就完成新結(jié)點加入隊列的操作。鏈表管理電路接收完一個數(shù)據(jù)包的所有分片后,更新存儲器packet一ram相應(yīng)存儲單元的 數(shù)據(jù)包個數(shù)值。同時將隊列有完整數(shù)據(jù)包的信息傳送給隊列狀態(tài)存儲器,使隊列狀態(tài)存儲器 相應(yīng)存儲單元置l,說明該隊列有完整的數(shù)據(jù)包。隊列調(diào)度電路通過讀隊列狀態(tài)存儲器的輸 出,知道數(shù)據(jù)片存儲器存有完整的待發(fā)送數(shù)據(jù)包,就會將該數(shù)據(jù)包隊列調(diào)度出來,經(jīng)數(shù)據(jù)包 發(fā)送電路發(fā)送到外界下一級電路。(3)加權(quán)輪詢優(yōu)先級隊列調(diào)度整個FPGA的調(diào)度分兩種隊列級調(diào)度和數(shù)據(jù)片級調(diào)度,隊列級調(diào)度在隊列調(diào)度電路中完 成,數(shù)據(jù)片級調(diào)度在鏈表管理電路中完成。隊列級調(diào)度從1024個隊列中挑選一個加權(quán)和最大 的隊列,數(shù)據(jù)片級調(diào)度從獲得發(fā)送資格的隊列中,挑選出排在隊頭的數(shù)據(jù)包,并將組成該數(shù)據(jù) 包的所有數(shù)據(jù)片結(jié)點從鏈表中遍歷出來。每個線卡輸出端緩存的1024數(shù)據(jù)包隊列,來自16個不同線卡。隊列調(diào)度電路,將1024 個隊列按照來自的不同線卡分成16組,每組64個隊列,對應(yīng)64個優(yōu)先級,同一組內(nèi)不同優(yōu) 先級的數(shù)據(jù)包隊列來自于同一個線卡。隊列調(diào)度電路每8時鐘周期從1024個隊列中調(diào)度出一 個隊列。每個時鐘周期,隊列加權(quán)更新電路從隊列狀態(tài)存儲器得到兩個線卡共128個優(yōu)先級隊列 的狀態(tài)信息,知道這128個隊列每個隊列是否有待發(fā)送的完整數(shù)據(jù)包,同時根據(jù)隊列加權(quán)更 新電路內(nèi)部存儲器保存的最近一次1024個隊列調(diào)度結(jié)果,計算出2個線卡128個隊列的加權(quán) 和。計算方法是優(yōu)先級n的隊列,最初賦加權(quán)值為n。例如線卡l的優(yōu)先級為m的隊列, 它的加權(quán)計算分四種情況(a) 通過隊列調(diào)度結(jié)果存儲器,知道它在最近一次調(diào)度中沒有被選中,但從隊列加權(quán) 和存儲器得到它以前的加權(quán)和為W,隊列狀態(tài)存儲器輸出值表明該隊列含有完整未發(fā)送的數(shù) 據(jù)包,通過加權(quán)計算電路的計算,優(yōu)先級為m的隊列新的加權(quán)和應(yīng)該為W+m 。(b) 它在最近一次調(diào)度中沒有被選中,從隊列加權(quán)和存儲器得到它以前的加權(quán)和為 W,隊列狀態(tài)存儲器輸出值表明該隊列不含有完整未發(fā)送的數(shù)據(jù)包,通過加權(quán)計算電路的計算, 優(yōu)先級為m的隊列新的加權(quán)和應(yīng)該為O 。(c) 它在最近一次調(diào)度中被選中,隊列狀態(tài)存儲器輸出值表明該隊列含有完整未發(fā)送 的數(shù)據(jù)包,盡管從隊列加權(quán)和存儲器得到它以前的加權(quán)和為W,通過加權(quán)計算電路的計算,優(yōu)先級為m的隊列新的加權(quán)和應(yīng)該為ra 。(d) 它在最近一次調(diào)度中被選中,隊列狀態(tài)存儲器輸出值表明該隊列不含有完整未發(fā) 送的數(shù)據(jù)包,盡管從隊列加權(quán)和存儲器得到它以前的加權(quán)和為W,通過加權(quán)計算電路的計算, 優(yōu)先級為m的隊列新的加權(quán)和應(yīng)該為0。隊列加權(quán)更新電路每個時鐘周期能輸出2個線卡所有128個隊列的加權(quán)和數(shù)據(jù)。每個時 鐘周期,加權(quán)和比較與當(dāng)前加權(quán)和最大的優(yōu)先級生成電路,對線卡加權(quán)和最大的優(yōu)先級和它 的加權(quán)和進行更新。例如,如果8個時鐘周期之前,線卡l的加權(quán)和最大的優(yōu)先級為nl,通 過64選1數(shù)據(jù)比較器計算,知道當(dāng)前線卡1的加權(quán)和最大的優(yōu)先級為n2。則線卡加權(quán)和最 大優(yōu)先級更新電路就將線卡1的最大加權(quán)和優(yōu)先級更新為n2。 16個線卡,完成一次加權(quán)和最 大的優(yōu)先級更新,需要8個時鐘周期。如果調(diào)度結(jié)果FIFO存儲器沒有給隊列調(diào)度電路反饋存儲器快滿信號,則16選1數(shù)據(jù)比 較器進行隊列調(diào)度工作每8個時鐘周期,16選1比較器電路利用線卡加權(quán)和最大優(yōu)先級更 新電路輸出的每個線卡最大加權(quán)和、最大加權(quán)和對應(yīng)的優(yōu)先級編碼,從16個線卡中挑選一個 加權(quán)和最大的線卡和優(yōu)先級,換句話說,就是從1024個隊列中挑選出一個隊列,做為調(diào)度結(jié) 果輸出。當(dāng)然如果所有1024個隊列都沒有完整數(shù)據(jù)包,也會進行同樣的運算過程,只是不會 成功調(diào)度出任何隊列。(4)數(shù)據(jù)片的發(fā)送與鏈表結(jié)點的刪除由于流水線作業(yè)的原因,調(diào)度結(jié)果和隊列實際狀態(tài)存在一個滯后時間,有可能某個隊 列已經(jīng)沒有完整數(shù)據(jù)包了,但仍然被隊列調(diào)度電路調(diào)度成功,這時隊列調(diào)度電路經(jīng)調(diào)度結(jié)果 FIFO存儲器傳送過來的調(diào)度結(jié)果稱為虛調(diào)度。發(fā)生虛調(diào)度時,鏈路管理電路不會進行任何鏈 表遍歷操作。鏈表管理電路只有在待發(fā)送數(shù)據(jù)片首地址FIFO存儲器快滿信號無效時,才會讀 調(diào)度結(jié)果FIFO存儲器。數(shù)據(jù)鏈路管理電路每接收到一個調(diào)度結(jié)果,就讀數(shù)據(jù)包個數(shù)存儲器packet—ram,査看 看該隊列是否確實存在未發(fā)送的完整數(shù)據(jù)包。如果對應(yīng)隊列數(shù)據(jù)包個數(shù)不為0,說明該隊列 確實存在待發(fā)送的數(shù)據(jù)包,該調(diào)度不是虛調(diào)度,在將數(shù)據(jù)包個數(shù)存儲器相應(yīng)存儲單元的數(shù)據(jù)包 個數(shù)減l后再寫回該存儲器。如果減1后,相應(yīng)存儲單元的數(shù)據(jù)包個數(shù)值為0,則使隊列狀 態(tài)存儲器相應(yīng)存儲單元置0,說明該隊列沒有別的完整數(shù)據(jù)包。鏈表管理電路在確知接收到的隊列級調(diào)度結(jié)果不是虛調(diào)度之后,開始進行數(shù)據(jù)片級調(diào)度,進行鏈表遍歷操作,將排在該隊列隊頭的數(shù)據(jù)包的所有數(shù)據(jù)片地址找到。鏈表管理電路利用調(diào)度得到的隊列號,通過鏈表頭地址存儲器找到該隊列所在鏈表 頭地址s一qn一linkheadei",開始數(shù)據(jù)片級調(diào)度。由于一個數(shù)據(jù)包由一個或一個以上的數(shù)據(jù)片 構(gòu)成,鏈表管理電路將隊列頭地址s—qn一linkheader傳送給鏈表存儲器接口電路,找到該隊 列的頭結(jié)點,并根據(jù)該結(jié)點的bit^、 bitN+2可以知道該結(jié)點對應(yīng)的存儲塊是否存有數(shù)據(jù)片, 該結(jié)點是否是當(dāng)前數(shù)據(jù)包的最后一個結(jié)點。如果不是最后一個結(jié)點,就繼續(xù)進行鏈表遍歷操 作。遍歷得到的存有數(shù)據(jù)片的有效鏈表結(jié)點存儲地址寫入鏈表管理電路內(nèi)部的待發(fā)送數(shù)據(jù)片 首地址FIF0存儲器。如果該存儲器快滿了,就暫定數(shù)據(jù)片結(jié)點的遍歷,直到快滿信號無效時, 再繼續(xù)進行數(shù)據(jù)片鏈表結(jié)點的遍歷操作。此外如果在遍歷的過程中如果遇上了數(shù)據(jù)包邊界信 號有效,說明當(dāng)前數(shù)據(jù)包的所有分片,都遍歷出來了,于是,當(dāng)前隊列數(shù)據(jù)片級調(diào)度結(jié)束。 每個遍歷出來的數(shù)據(jù)片結(jié)點,因為它們馬上就會成為空結(jié)點,所以需要依次添加到空鏈表的 尾部。這樣就完成了數(shù)據(jù)片鏈表結(jié)點刪除操作。數(shù)據(jù)存儲器接口電路利用從待發(fā)送數(shù)據(jù)片首地址FIFO存儲器得到的地址,依次將組成數(shù) 據(jù)包的每個數(shù)據(jù)片讀出,通過數(shù)據(jù)包輸出電路輸出到數(shù)據(jù)包發(fā)送電路。這種數(shù)據(jù)片輸出方式 象流水一樣, 一個緊接一個不間斷。雖然某個數(shù)據(jù)片結(jié)點從包隊列鏈表中刪除了,但實際上該結(jié)點對應(yīng)的數(shù)據(jù)片有可能還在 待發(fā)送數(shù)據(jù)片首地址存儲器內(nèi)保存,它對應(yīng)的存儲塊還保存著原來的數(shù)據(jù)片,所以不能立刻存 放新接收的數(shù)據(jù)片。為了防止這種新接收的數(shù)據(jù)片沖掉還會發(fā)送的數(shù)據(jù)片情況出現(xiàn)。寄存器Cell一number對 外部數(shù)據(jù)片存儲器內(nèi)保存的數(shù)據(jù)片進行計數(shù),如果剩余的存儲塊,只能再容納16個數(shù)據(jù)片時, 就給數(shù)據(jù)片輸入電路發(fā)出數(shù)據(jù)片存儲器快滿信號,數(shù)據(jù)片輸入電路此時不再讀入新的數(shù)據(jù)片。 這樣在數(shù)據(jù)包隊列鏈表中刪除了,但實際上數(shù)據(jù)片還沒有真正輸出的存儲塊就不會被新接收 的數(shù)據(jù)片占用。鏈表管理電路每遍歷出一個數(shù)據(jù)片結(jié)點,在內(nèi)部控制邏輯的作用下,對lengtturam存儲 器進行讀操作,將對應(yīng)隊列的數(shù)據(jù)片個數(shù)計算器的值s—queue—length讀出來,并將該值減l, 再寫回到length—ram原來的存儲單元。鏈表管理電路每遍歷出一個數(shù)據(jù)片結(jié)點,就更新鏈表頭地址存儲器對應(yīng)的隊列存儲單元 值,使它指向隊列新的頭結(jié)點地址。
權(quán)利要求
1. 路由器多隊列數(shù)據(jù)包緩存管理與輸出隊列調(diào)度系統(tǒng),其特征在于它含有一個FPGA芯片,作為該FPGA芯片片外存儲器的鏈表存儲器,以及同樣作為該FPGA芯片片外存儲器的數(shù)據(jù)片存儲器,其中數(shù)據(jù)片存儲器,被分成大小相等的2(N+1)個存儲塊,N一般取不小于8192的自然數(shù),每個存儲塊存儲一個數(shù)據(jù)包的一個數(shù)據(jù)片,組成每個存儲塊的存儲單元的地址是連續(xù)的;來自同一個輸入線卡,具有相同優(yōu)先權(quán)的數(shù)據(jù)包構(gòu)成一個隊列,每個隊列所占用的存儲塊采用鏈表的形式進行管理;鏈表存儲器,用于保存數(shù)據(jù)片存儲器中的所有鏈表,每一個鏈表結(jié)點保存數(shù)據(jù)片存儲器的一個存儲塊,鏈表結(jié)點的存儲地址和存儲塊的序列號一一對應(yīng),每一個鏈表結(jié)點存儲在鏈表存儲器的一個存儲單元中,作為鏈表存儲器的存儲器,每個存儲單元的數(shù)據(jù)寬度由數(shù)據(jù)片存儲器分成的存儲塊數(shù)量,以及數(shù)據(jù)片的最大長度決定,具有如下數(shù)據(jù)結(jié)構(gòu)0~N比特位,表示同一隊列的下一個鏈表結(jié)點地址,N+1比特位,表示數(shù)據(jù)包的邊界結(jié)點,N+2比特位,為存儲單元使用的指示標識,N+3~N+K比特位,為數(shù)據(jù)片長度,K和系統(tǒng)定義的數(shù)據(jù)片最大值相關(guān),K最大值為8,其中N+2比特位為1,表示該節(jié)點對應(yīng)的存儲塊存有數(shù)據(jù)片,該存儲器單元已經(jīng)被使用,否則置0;N+1比特位為1,表示這是數(shù)據(jù)包的最后一個數(shù)據(jù)片,否則置0;N+3~N+K比特位,保存對應(yīng)數(shù)據(jù)片的實際長度,長度以4字節(jié)為單位;鏈表結(jié)點分為數(shù)據(jù)片隊列鏈表結(jié)點和空鏈表結(jié)點;FPGA芯片含有數(shù)據(jù)片存儲器接口電路、數(shù)據(jù)片F(xiàn)IFO存儲器、數(shù)據(jù)片輸入電路、鏈表管理電路、數(shù)據(jù)包輸出電路、鏈表存儲器接口電路、隊列狀態(tài)存儲器、調(diào)度結(jié)果FIFO存儲器,以及隊列調(diào)度電路,其中數(shù)據(jù)片F(xiàn)IFO存儲器,含有外界數(shù)據(jù)輸入端,所連數(shù)據(jù)片輸入電路輸出的讀數(shù)據(jù)信息輸入端,還含有指向所連外界數(shù)據(jù)輸入端的快滿信號;數(shù)據(jù)片輸入電路,第一個輸入端與所連FIFO存儲器的數(shù)據(jù)片輸出端相連,第一個輸出端與所連鏈表管理電路的數(shù)據(jù)片輸入端相連,而第二個輸入端則與所連鏈表管理電路的快滿信號輸出端相連;隊列狀態(tài)存儲器,是由4個雙端口的片內(nèi)RAM存儲器組合而成,其數(shù)據(jù)輸入端口和所連鏈表管理電路的數(shù)據(jù)輸出端相連,若輸入的隊列含有至少一個完整的數(shù)據(jù)包,則隊列對應(yīng)的存儲單元置1,反之,置0,它的讀地址和讀信號來自隊列調(diào)度電路,組成隊列狀態(tài)存儲器的每個RAM存儲器讀寫端口地址線、數(shù)據(jù)線寬度不同,讀端口地址線有3根,輸出數(shù)據(jù)位寬為32位,它的寫端口,有8根寫地址線,但寫入數(shù)據(jù)寬度為1位;隊列調(diào)度電路,數(shù)據(jù)輸入端和所連隊列狀態(tài)存儲器的數(shù)據(jù)輸出端相連,而該隊列調(diào)度的數(shù)據(jù)輸出端和所連隊列調(diào)度電路FIFO存儲器的輸入端相連;隊列調(diào)度結(jié)果FIFO存儲器,它的輸入端和所連隊列調(diào)度電路的輸出端相連,同時它輸出快滿信號給隊列調(diào)度電路,它的輸出端和鏈表管理電路相連,而讀信號也來自鏈表管理電路;數(shù)據(jù)片存儲器接口電路,兩個輸入端分別和所連數(shù)據(jù)片輸入電路、鏈表管理電路的數(shù)據(jù)輸出端相連,同時,另外又和數(shù)據(jù)片存儲器相連;鏈表存儲器接口電路,分別和所連鏈表管理電路、鏈表存儲器互聯(lián);數(shù)據(jù)包輸出電路,數(shù)據(jù)包輸入端與所連數(shù)據(jù)片存儲器接口電路的輸出端相連,另外還有一個數(shù)據(jù)包輸出端和外界相連;鏈表管理電路,含有存儲器、寄存器和內(nèi)部邏輯控制電路,用于管理片外的鏈表存儲器,最多管理1024個鏈表隊列,其中存儲器,含有隊列含數(shù)據(jù)片個數(shù)存儲器、隊列含數(shù)據(jù)包個數(shù)存儲器、鏈表隊列頭地址存儲器、鏈表隊列尾地址存儲器以及待發(fā)送數(shù)據(jù)片首地址FIFO存儲器,其中鏈表隊列頭地址存儲器,是雙端口存儲器,地址寬度為10位,數(shù)據(jù)寬度為N+1位,各個存儲單元存放不同隊列的鏈表頭地址,以便索引某個隊列的第一個數(shù)據(jù)片鏈表結(jié)點地址和相應(yīng)的數(shù)據(jù)片;鏈表隊列尾地址存儲器,是雙端口存儲器,地址寬度為10位,數(shù)據(jù)寬度為N+1位,各個存儲單元存放不同隊列的尾地址,以便索引某個隊列的最后一個數(shù)據(jù)片鏈表結(jié)點地址和相應(yīng)的數(shù)據(jù)片;隊列含數(shù)據(jù)片個數(shù)存儲器,是雙端口存儲器,地址寬度為10位,數(shù)據(jù)寬度為N+1位,各個存儲單元存放不同隊列含數(shù)據(jù)片個數(shù)信息;隊列含數(shù)據(jù)包個數(shù)存儲器,是雙端口存儲器,地址寬度為10位,數(shù)據(jù)寬度為N+1位,各個存儲單元存放不同隊列含數(shù)據(jù)包個數(shù)信息;待發(fā)送數(shù)據(jù)片首地址FIFO存儲器,是一個先入先出FIFO隊列存儲器,數(shù)據(jù)寬度為N+1比特,深度為8,存儲4個數(shù)據(jù)后,發(fā)出快滿信號;寄存器含有空鏈表頭指針寄存器、空鏈表下一個頭指針寄存器、空鏈表尾指針寄存器、數(shù)據(jù)片隊列頭指針寄存器、數(shù)據(jù)片隊列尾指針寄存器、外存含數(shù)據(jù)片個數(shù)寄存器,每個寄存器的位寬為N+1位,其中數(shù)據(jù)片隊列頭指針指定當(dāng)前隊列第一個數(shù)據(jù)包的第一個數(shù)據(jù)片的結(jié)點地址,數(shù)據(jù)片隊列尾指針指定當(dāng)前隊列最后一個數(shù)據(jù)包的最后一個數(shù)據(jù)片的結(jié)點地址;內(nèi)部邏輯控制電路,對鏈表管理電路內(nèi)的存儲器和寄存器進行數(shù)據(jù)信息和控制信息的交互,同時對所連數(shù)據(jù)片存儲器接口電路、數(shù)據(jù)片輸入電路、鏈表存儲器接口電路、隊列狀態(tài)存儲器,以及調(diào)度結(jié)果FIFO存儲器進行控制信息和數(shù)據(jù)信息的交互;隊列調(diào)度電路,由隊列加權(quán)和更新電路、1024選1數(shù)據(jù)比較器構(gòu)成,其中隊列加權(quán)和更新電路,含有隊列調(diào)度結(jié)果存儲器、隊列加權(quán)和存儲器以及加權(quán)和計算電路,其中隊列調(diào)度結(jié)果存儲器,是一個雙端口存儲器,輸入端與1024選1數(shù)據(jù)比較器的輸出端相連,也與加權(quán)計算電路相連,從加權(quán)計算電路中輸入存儲器讀地址和讀信號,輸出端和加權(quán)計算電路相連,輸出隊列調(diào)度結(jié)果;隊列加權(quán)和存儲器,是一個雙端口存儲器,與加權(quán)計算電路相連,輸入輸出每個隊列的加權(quán)和W;加權(quán)計算電路,從隊列狀態(tài)存儲器得到兩個線卡共128個優(yōu)先權(quán)隊列的狀態(tài)信息,同時根據(jù)隊列調(diào)度結(jié)果存儲器保存的最后一次1024個隊列的調(diào)度結(jié)果,按以下方式計算出2個線卡128個隊列的加權(quán)和,對于來自某線卡優(yōu)先級為m的數(shù)據(jù)包隊列若通過隊列調(diào)度結(jié)果存儲器,知道最近一次調(diào)度中它沒有被選中,但從隊列加權(quán)和存儲器了解其以前加權(quán)和為W,且從隊列狀態(tài)存儲器輸入值了解該隊列含有完整未發(fā)送的數(shù)據(jù)包,則優(yōu)先級為m的隊列新的加權(quán)和為W+m;若最近一次調(diào)度它未被選中,以前的加權(quán)和為W,該隊列不含有未發(fā)送數(shù)據(jù)包,則優(yōu)先級為m的隊列新的加權(quán)和為0;若最近一次調(diào)度被選中,該隊列以前的加權(quán)和為W,且含有完整未發(fā)送的數(shù)據(jù)包,則優(yōu)先級為m的隊列新加權(quán)和為m;若最近一次調(diào)度被選中,以前的加權(quán)和為W,但不含有完整未發(fā)送的數(shù)據(jù)包,則優(yōu)先級為m的隊列的新加權(quán)和為0,加權(quán)計算電路輸出每次輸出2個線卡號,以及每個線卡64個隊列的加權(quán)和,它實現(xiàn)來自16個線卡的1024個數(shù)據(jù)包隊列加權(quán)和更新;1024選1比較器含有加權(quán)和比較和當(dāng)前加權(quán)和最大的優(yōu)先級生成電路,以及16選1數(shù)據(jù)比較器電路,其中加權(quán)和比較與當(dāng)前加權(quán)和最大的優(yōu)先級生成電路,共分兩組,每組由延時電路、64選1數(shù)據(jù)比較器和線卡加權(quán)和最大優(yōu)先級更新電路組成,兩個延時電路分別輸入0-7線卡號及8-15線卡號,兩個64選1數(shù)據(jù)比較器分別輸入相應(yīng)線卡內(nèi)64個隊列的各自加權(quán)和,各自輸出來自一個線卡的64個隊列中隊列加權(quán)和的最大值,該最大值是通過來自同一線卡的64個隊列中,每個隊列的加權(quán)和經(jīng)過倆倆比較以后,得到的;而兩個線卡加權(quán)和最大優(yōu)先級更新電路共同輸出更新后的16個加權(quán)和及16個加權(quán)和對應(yīng)的線卡號;16選1數(shù)據(jù)比較器電路,含有兩個含優(yōu)先級輸入的8選1數(shù)據(jù)比較器及一個2選1數(shù)據(jù)比較器,兩個含優(yōu)先級輸入的8選1數(shù)據(jù)比較器共同輸入16個更新后的隊列加權(quán)和,共同輸出其中兩個最大的加權(quán)和及相應(yīng)的最大加權(quán)和隊列編碼,而2選1數(shù)據(jù)比較器則從輸入的2個加權(quán)和及相應(yīng)編碼中挑選一個最大的輸出;構(gòu)成64選1的8選1數(shù)據(jù)比較器和16選1數(shù)據(jù)比較器電路的含優(yōu)先級輸入的8選1數(shù)據(jù)比較器都包含28個16位數(shù)據(jù)比較器,一個多路選擇器,16位數(shù)據(jù)比較器有A和B2個16位輸入數(shù)據(jù),復(fù)位RESET是16位數(shù)據(jù)比較器的復(fù)位端,如果A大于或等于B,16位數(shù)據(jù)比較器的輸出AgeB為1,否則為0,16位數(shù)據(jù)比較器完成2個16位數(shù)據(jù)的比較需要耗費一個時鐘周期,對應(yīng)8選1數(shù)據(jù)比較器或含優(yōu)先級輸入的8選1數(shù)據(jù)比較器,讓8個輸入數(shù)據(jù)A8~A1,進行倆倆比較,根據(jù)所有的比較結(jié)果,可以確定8個輸入數(shù)據(jù)中,哪一個最大;如果A8≥A7,A8≥A6,A8≥A5,A8≥A4,A8≥A3,A8≥A2,A8≥A1都成立,則A8就是最大數(shù),否則,若A7≥A6,A7≥A5,A7≥A4,A7≥A3,A7≥A2,A7≥A1都成立,則A7就是最大數(shù),以此類推,通過28個16位數(shù)據(jù)比較器和一個多路選擇器的配合,可以從8個輸入數(shù)據(jù)中選擇到一個最大數(shù)據(jù),8選1數(shù)據(jù)比較器完成一次運算需要2個時鐘周期;隊列調(diào)度電路把從1024選1數(shù)據(jù)比較器得到的加權(quán)和最大的隊列及其編碼送往調(diào)度結(jié)果FIFO存儲器,由鏈表管理電路讀取后,通過鏈表管理電路的運行,得到調(diào)度成功隊列隊頭數(shù)據(jù)包的所有數(shù)據(jù)片在數(shù)據(jù)片存儲器存儲的首地址,這些地址保存在待發(fā)送數(shù)據(jù)片首地址FIFO存儲器,通過該FIFO存儲器,發(fā)往數(shù)據(jù)片存儲器接口電路,數(shù)據(jù)片存儲器接口電路從FPGA片外數(shù)據(jù)片存儲器讀取數(shù)據(jù)包的每一個分片,發(fā)送到數(shù)據(jù)包輸出電路,通過數(shù)據(jù)包輸出電路輸出。
全文摘要
路由器多隊列數(shù)據(jù)包緩存管理與輸出隊列調(diào)度系統(tǒng)屬于因特網(wǎng)主干網(wǎng)核心路由器技術(shù)領(lǐng)域。其特征在于用一片F(xiàn)PGA配合片外數(shù)據(jù)片存儲器和鏈表存儲器構(gòu)成。該FPGA芯片含有接收外界數(shù)據(jù)的數(shù)據(jù)片F(xiàn)IFO存儲器及鏈表管理電路,鏈表管理電路通過兩個接口電路分別和數(shù)據(jù)片存儲器及鏈表存儲器相連,鏈表管理電路輸出經(jīng)過隊列狀態(tài)存儲器的1024個隊列狀態(tài)信息到隊列調(diào)度電路,隊列調(diào)度電路把1024個隊列中加權(quán)和最大的隊列調(diào)度出來,并將調(diào)度出來的隊列編號通過調(diào)度結(jié)果FIFO存儲器送到鏈表管理電路,鏈表管理電路通過數(shù)據(jù)片存儲器接口電路,將數(shù)據(jù)片存儲器存儲的數(shù)據(jù)片經(jīng)數(shù)據(jù)包發(fā)送電路輸出。系統(tǒng)支持質(zhì)量服務(wù),數(shù)據(jù)包速率為2.5Gbps時,能線速處理進出存儲器的數(shù)據(jù)包。
文檔編號H04L12/02GK101252536SQ20081010305
公開日2008年8月27日 申請日期2008年3月31日 優(yōu)先權(quán)日2008年3月31日
發(fā)明者全成斌, 徐明偉, 珂 楊, 趙有健 申請人:清華大學(xué)