“我Op事街enBox又回來了!”
沉寂了16個月,終劇的于又提筆開(kāi)始寫《硬件二層交換設計與實現》。從軟件暗車設計到硬件設計需要這麼長(cháng)時(shí)間嗎?答(dá)案是肯定的窗空,不(bù)僅需要,而且這點時(shí)間還隻能初入Verilog代碼編程之門老照。
但從網絡實驗教學的角度來看,這是不(bù)可接受的。故我們(m訊不en)想換個思路,走走捷徑。然而這一走,便走了整玩白整16月有餘。
所幸略有小成,與君分享子可,共勉自學、自研、自證之艱辛與快樂。
高商A)P4與Tofino
&nb就兵sp; 書上或網上能找到的内容請大(dà)家(刀長jiā)自行查找了解。見:https://p4.org
錢線
B匠商)FAST全軟件可編程平台
&nbs技影p; FAST架構在我們(men)之前的文章輛音中有介紹,該平台也是一種典型的SDN架構設計,硬麗睡件數據平面主要包括FPGA OS和UM兩部分,核心邏輯處務和理在UM模塊中。UM又分成了5個不(bù)同邏輯功能志章流水線,
用戶可以針對此流水線進行改造升級或擴展新的流水級功能。然要黃而,使用Verilog語言來開(kāi)發FPGA芯片功能着實技靜是一件比較有難度的事情,至少在成為(wèi)一個合近理格的Verilog代碼工(gōng)程師之前來說(shuō),确實暗生有比較漫長(cháng)和艱辛的路程要走。
受微拿P4編程思想的啟發,我們(men)決定将FAST架構購來中的UM部分更換成具備P4開(kāi)發能力的硬件邏輯部件。故路開該平台依然采用多核CPU加FPGA架構,務玩P4邏輯全采用FPGA編寫,所有功能和指令很算邏輯全在硬件實現。
&訊河nbsp; C)基本功能
 水服; 1.分組前96字節内,小于1這畫28的任意bit位,任意多個PHV對象定義;
2中路.支持32字節Metadata對象編程,含16字節用戶自定義Metadata内麗海容;
3.這大分組前60字節内,任意bit位對象查表匹配,精确匹配與帶掩碼匹配,匹配字段支筆很持輸入端口等Metadata字段;
&n為又bsp;4.每動作支持14條指令,支持加、減、與、或、異或數劇、取反等操作;
5.每個指雜山令執行器(qì)中含16個臨時(shí)寄存器(qì),支持文得臨時(shí)變量暫存與讀取,位寬支持1到64位;
年區 6.支持有狀态的存儲寄存器(qì)對象照放定義與操作,存儲寄存器(qì)位寬支持1到64位,最大(dà)個數支持1秒站28個。支持多個寄存器(qì)對象編程;
 秒裡;7.支持對分組進行協議插入與删除,長(cháng)度支持1到16字節;
&nb街微sp; 8.動作與指令均支持參數化配坐坐置,即可運行前實例化,也可運行時(shí)調整;
 會空; 9.支持32種不(bù)同邏輯業務處理功能雜電在線編譯、在線加載、在線配置、在線卸載,不(bù)影響其他(tā)業務場煙邏輯;
&nbs電用p; 10.提供P4後端編譯器(qì),支持老腦用戶P4代碼編譯;
11.提大件供P4運行時(shí)配置管理工(gōn些紙g)具,支持用戶流表配置、動作配置和寄存器(qì)初始配置。
飛這
請醫擁有上述平台編程功能後,對硬件的設計要求便會(huì問的)變得(de)較為(wèi)簡單。原來要花較長(cháng)時關時(shí)間,寫較多代碼的功能,現在可以簡單、快速的實現。
&n報場bsp;A)設計原理
&nb村來sp;從交換機的幾個功能步驟開(kāi)始,先實現源M金農AC地址的學習。從平台功能分析,使用寄存器(qì)部件比較合街信适。
拟定義一個端口與MAC地址的映射表,存儲在寄存器(聽雨qì)對象中,使用源MAC地址作為(wèi)寄存器(對低qì)對象的索引,分組輸入端口号作為(wèi)該索引位置的值。在使放錯用目的MAC查表時(shí),亦使用MA弟志C地址作為(wèi)索引進行查找,即可獲取該地址學習存儲的端子影口号。
由于MAC樂資地址為(wèi)48位,本平台支持寄存器(qì)的深度有限,故本案例中僅見友取MAC地址的後4位作為(wèi)索引。故實驗演示時(shí),要求測試主機草開的MAC地址尾數不(bù)同。
&nb票請sp; 單播地址可以采用上述思路進行藍能設備,那組播與廣播地址呢,我們(men)本問們案例拟采用全泛洪的方式先來實現一個基礎版本厭嗎。
想要做組播功能可以将組播協議配置規則送CPU處理,CP南用U學習到入組和退組信息後,通(tōng)過P4的運行時(shí)工(gōng)看廠具進行組播MAC與相應端口号的規則配置即可暗制。
&他匠nbsp;B)代碼實現
action learn_forward()
{
明事 MAC_PORT.regwrit花商e((u8)hdr.eth.smac&0xF,std_meta.鄉山ioport);
&nbs如筆p; std_meta.ioport =明這 MAC_PORT.regread((u8)hdr.eth.dmac&0xF拍刀);
}
單播自學習與轉發
action mb_cast()
{
M劇人AC_PORT.regwrite((u8)hdr.et草銀h.smac&0xF,std_meta.ioport);
&nbs兵我p;std_meta.ioport = ~std_meta.iopo作話rt;
}
多播泛洪
以上為(wèi)硬件二層交換機(原型系統)全部業務邏輯功能代碼。是的,就是但來這四行代碼!!!!
 子國;
A)軟件核心代碼
如線
B)編譯器(qì)結果
用對C)硬件配置
 微月;
D)Ping通(tōng)測試
C:\Users\Administra問外tor>ping 192.168.1.198
正在 Ping 192.168.1.198 具有 32 字頻很節的數據:
來自 192.168.1.198 的回複: 字節視道=32 時(shí)間<1ms TTL=127
來自 192.168.1.198 的回複: 字節=3件飛2 時(shí)間<1ms TTL=12可拍7
來自 192.168.1.198 的回複: 字節=32金報 時(shí)間<1ms TTL=127
來自 192.168.1.198 的回複: 字節=32 時跳還(shí)間<1ms TTL=127
醫答
黑說物質守恒、能力守恒,苦難亦然守恒。
為(w水劇èi)了讓學生們(men)在我們(men)平台編寫硬件邏輯少些痛苦,我們舞體(men)艱苦奮鬥了16個月,對P4的原理、代碼刀在和編譯器(qì)進行了仔細琢磨、分析和領悟。我們(men)認冷什為(wèi)P4是一門較為(wèi)優秀的編程語言討光,更是一種硬件編程的創新思路和具體表達形式。我們(men窗章)無法去破解P4的硬件實現,固然也無從參考,而是領悟P4編數為程方式的精髓理念後,采用了原有FAST架構和部分邏輯調整,并配置P4輛廠後端編譯适配,打造了現如(rú)今的支持P4的FAST架構可編程平台。
器老
資也本平台結合了FAST架構與P4可編程的雙重優勢。支持用戶在最底層硬件到最高通鐘層軟件全方便的編程與驗證,而且編程語言均使用C喝吧語言和類似C的P4語言,進一步降低(dī)了學習與使用難度。
草算
&nb女相sp; 下一步,做個硬件路由器(qì)?或者您有更美好(h少話ǎo)的想法,我們(men)可以試一試!
了森 有需要開(kāi)發可編程硬件(FPGA、問吧ASIC等)的P4後端編譯器(qì),或獲得(de)本船購平台介紹相關源碼的客戶,請與15116127200(微信同号)聯系的風,閱讀更多FAST相關文章請進入以下公衆号。