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