0731-84728105
15116127200
FAST入門(5)FAST硬件流水線之一(yī)
發布時間:2018-07-12
     FPGA中實現的(de)硬件流水線是FAST平台實現分組硬件處理(lǐ)的(de)基礎。FPGA OS為(wèi)FAST流水線提供了基本的(de)分組收發,高(gāo)速DMA和(hé)查表等服務。FAST 流水線與FPGA OS的(de)接口定義直接反映了分組硬件處理(lǐ)功能在FPGA OS和(hé)FAST流水線中的(de)劃分,也是FAST平台提供商(shāng)必須考慮的(de)關鍵問題。
一(yī)、FAST流水線接口定義
      FAST流水線與FPGA OS之間定義了6個接口,分别是PIn/POut、CIn/COut,MEI和(hé)AUX。如(rú)下圖所示。
     PIn/POut是流水線接收和(hé)發送分組的(de)接口,CIn/COut分别是流水線接收和(hé)發送流水線控制信息的(de)接口,MEI(Match Engine Interface)是流水線訪問FPGA OS提供的(de)匹配引擎的(de)接口。AUX是FPGA OS為(wèi)FAST流水線提供時鍾、複位和(hé)時間戳等信息的(de)接口。
     各接口信号的(de)詳細定義如(rú)下表所示。其中MEI接口中的(de)信号寬度N1/N2與平台相關。Clk時鍾頻率與平台相關,一(yī)般不小于125MHz。所有(yǒu)I/O信号的(de)變化都與CLK同步。
     FAST流水線通過Key接口向查表協處理(lǐ)器提交查表關鍵字,從FlowID接口接收返回的(de)查表結果(匹配的(de)地(dì)址)。包括是否匹配(match_flag為(wèi)1表示匹配,0表示未匹配),以及匹配的(de)規則序号FlowID等。
     隻要me_ready信号有(yǒu)效,FAST流水線可(kě)連續地(dì)向查表協處理(lǐ)器提交查表請求,查表協處理(lǐ)器必須保證這些查表結果按照查表請求提交的(de)順序返回查表結果。
     查表協處理(lǐ)器中規則的(de)配置管理(lǐ)方法與具體的(de)平台相關。FAST庫在實現時必須對不同的(de)平台進行(xíng)适配,提供管理(lǐ)這些規則的(de)API接口。
二、數據通路PIn/POut數據格式
     PIn和(hé)POut兩個接口采用相同的(de)分組格式,分組數據寬度為(wèi)134位,其中低(dī)128位為(wèi)報文數據,高(gāo)6位為(wèi)控制信息,每個數據分組包括32字節的(de)metadata和(hé)分組數據,如(rú)下圖所示。
     分組數據的(de)格式為(wèi)接口收發的(de)以太網報文格式。其中以太網報文格式中不包含最後的(de)4字節CRC字段,接收時,FPGA OS負責接收時進行(xíng)CRC校驗和(hé)剝離(lí),發送時,FPGA OS會計算分組的(de)CRC字段并附加在報文最後。
     數據通路的(de)[133:132]位為(wèi)報文數據的(de)頭尾标識。01标識報文頭部,11标識報文中間數據,10标識報文尾部。由于不同報文具有(yǒu)不同長(cháng)度,因此在報文數據最後一(yī)拍可(kě)能存在一(yī)些無效的(de)字節。數據報文的(de)最後一(yī)拍的(de)[131:128]位用來标識無效字節的(de)個數。其中0000表示16個字節全部有(yǒu)效;0001标識最低(dī)1個字節無效,最高(gāo)15個字節有(yǒu)效;以此類推,1111表示最低(dī)15個字節無效,最高(gāo)1個字節有(yǒu)效。
     設FAST流水線的(de)時鍾頻率為(wèi)xMhz,因此數據通路理(lǐ)論傳輸帶寬為(wèi)128bit*xMHz。例如(rú)當x=125時,通路帶寬為(wèi)16Gbps。
三、控制通路CIn/COut數據格式
     FAST流水線的(de)控制通路CIn和(hé)COut采用相同的(de)消息格式。對FAST流水線模塊的(de)每次讀寫操作都轉換成一(yī)個128位寬的(de)命令字寫入FAST流水線。命令字的(de)格式如(rú)下表所示。與流水線處理(lǐ)分組信息一(yī)樣,每個模塊隻處理(lǐ)DMID等于本地(dì)模塊号的(de)命令字。相應的(de)模塊完成讀寫操作後,修改命令字,并将命令字發送給下遊模塊,最後命令字從COut接口輸出。FPGA OS負責将軟件讀寫請求轉換成FAST流水線的(de)命令字,并将COut輸出的(de)命令字返回給由SMID标識的(de)軟件模塊。
      顯然,每個硬件模塊內(nèi)部的(de)編址與都是32位,且編址方法與其他模塊無關,由模塊開發者獨立确定。