<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 對基于FPGA的高速路由查找算法的研究

          對基于FPGA的高速路由查找算法的研究

          作者: 時間:2009-12-20 來源:網(wǎng)絡(luò) 收藏

            2 目標(biāo)層的確定

            在用NT(k,ω)表示前綴長度為w的情況下,還需要找出k個目標(biāo)層時對應(yīng)的最小前綴擴展數(shù)。這樣,其最優(yōu)解就是NT(k,ω)。其遞推公式如下:

          公式

            式中,Nu(l,ω)表示將l+1層至ω-1層擴展到ω層的前綴數(shù)目,其中若某一層不存在,則將那一層直接忽略。另外,在擴展時還要考慮前綴捕獲問題。Nl(ω)是ω層原有的前綴數(shù)目。

            3 硬件結(jié)構(gòu)

            依據(jù)該設(shè)計出的基于4級流水線的并行處理結(jié)構(gòu)如圖3所示,該結(jié)構(gòu)分為存儲器模塊、模塊和更新模塊三個部分。4個存儲模塊可存儲對應(yīng)表TBL中的數(shù)據(jù);模塊可通過讀取對應(yīng)存儲模塊中的數(shù)據(jù)實現(xiàn);更新模塊則可將要更新的路由信息添加到對應(yīng)的存儲塊中。

          依據(jù)該算法設(shè)計出的基于4級流水線的并行處理結(jié)構(gòu)

            在設(shè)計時,每個查找模塊都是一個硬件邏輯塊,每兩個查找模塊間都有一個寄存器用以傳輸數(shù)據(jù),每個查找模塊都可從輸入端或寄存器中讀取信息,并解析出IP地址中的相應(yīng)位,然后計算存儲器的訪問地址,訪問存儲器獲取數(shù)據(jù),并將數(shù)據(jù)寫入寄存器或者輸出端。四個查找模塊按流水線的工作方式進行處理,能夠達到訪問一次存儲器處理一個IP數(shù)據(jù)包。

            4 實驗結(jié)果分析

            通過對BGP Table中前綴的長度進行分析和統(tǒng)計,可模擬生成50,000條前綴。然后用動態(tài)規(guī)劃求出4個目標(biāo)層(20,22,24和32)來進行實驗分析。實驗可采用Stratix系列芯片,并利用Ver-ilog硬件描述語言和QuartusII開發(fā)平臺進行設(shè)計、綜合、布局布線,然后在靜態(tài)時序分析后進行仿真,其時序仿真結(jié)果如圖4所示。由于查找需要一個時鐘周期,而時鐘頻率為100MHz,所以,每秒可以完成100M次查找。若IP分組為40B長,則可以滿足20Gbps的鏈路速率。

          時序仿真結(jié)果

            5 結(jié)束語

            本文給出了一種基于前綴擴展的分段快速路由查找。該可以結(jié)合硬件實現(xiàn)的優(yōu)點,并運用多級流水線處理方法,因而具有查找速度快、支持動態(tài)更新和實現(xiàn)簡單等優(yōu)點,十分適合于20 Gbps核心路由器環(huán)境下的查找機制。


          上一頁 1 2 下一頁

          關(guān)鍵詞: FPGA 高速路由 查找 算法

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();