视频国产一区二区三区-久精品视频在线-HD免费看片,欧美一级少妇,闺房里的呻吟h玉势,tai9国产一区二区

0731-84728105
15116127200
四行代碼定乾坤:硬件二層交換機(jī)設(shè)計(jì)與實(shí)現(xiàn)
發(fā)布時(shí)間:2022-11-04
     “我OpenBox又回來(lái)了!” 沉寂了16個(gè)月,終于又提筆開(kāi)始寫(xiě)《硬件二層交換設(shè)計(jì)與實(shí)現(xiàn)》。從軟件設(shè)計(jì)到硬件設(shè)計(jì)需要這么長(zhǎng)時(shí)間嗎?答案是肯定的,不僅需要,而且這點(diǎn)時(shí)間還只能初入Verilog代碼編程之門(mén)。 但從網(wǎng)絡(luò)實(shí)驗(yàn)教學(xué)的角度來(lái)看,這是不可接受的。故我們想換個(gè)思路,走走捷徑。然而這一走,便走了整整16月有余。 所幸略有小成,與君分享,共勉自學(xué)、自研、自證之艱辛與快樂(lè)。
     A)P4與Tofino
     書(shū)上或網(wǎng)上能找到的內(nèi)容請(qǐng)大家自行查找了解。見(jiàn):https://p4.org
     B)FAST全軟件可編程平臺(tái)
     FAST架構(gòu)在我們之前的文章中有介紹,該平臺(tái)也是一種典型的SDN架構(gòu)設(shè)計(jì),硬件數(shù)據(jù)平面主要包括FPGA OS和UM兩部分,核心邏輯處理在UM模塊中。UM又分成了5個(gè)不同邏輯功能流水線, 用戶可以針對(duì)此流水線進(jìn)行改造升級(jí)或擴(kuò)展新的流水級(jí)功能。然而,使用Verilog語(yǔ)言來(lái)開(kāi)發(fā)FPGA芯片功能著實(shí)是一件比較有難度的事情,至少在成為一個(gè)合格的Verilog代碼工程師之前來(lái)說(shuō),確實(shí)有比較漫長(zhǎng)和艱辛的路程要走。
     受P4編程思想的啟發(fā),我們決定將FAST架構(gòu)中的UM部分更換成具備P4開(kāi)發(fā)能力的硬件邏輯部件。故該平臺(tái)依然采用多核CPU加FPGA架構(gòu),P4邏輯全采用FPGA編寫(xiě),所有功能和指令邏輯全在硬件實(shí)現(xiàn)。
     C)基本功能
     1.分組前96字節(jié)內(nèi),小于128的任意bit位,任意多個(gè)PHV對(duì)象定義;
     2.支持32字節(jié)Metadata對(duì)象編程,含16字節(jié)用戶自定義Metadata內(nèi)容;
     3.分組前60字節(jié)內(nèi),任意bit位對(duì)象查表匹配,精確匹配與帶掩碼匹配,匹配字段支持輸入端口等Metadata字段;
     4.每動(dòng)作支持14條指令,支持加、減、與、或、異或、取反等操作;
     5.每個(gè)指令執(zhí)行器中含16個(gè)臨時(shí)寄存器,支持臨時(shí)變量暫存與讀取,位寬支持1到64位;
     6.支持有狀態(tài)的存儲(chǔ)寄存器對(duì)象定義與操作,存儲(chǔ)寄存器位寬支持1到64位,最大個(gè)數(shù)支持128個(gè)。支持多個(gè)寄存器對(duì)象編程;
     7.支持對(duì)分組進(jìn)行協(xié)議插入與刪除,長(zhǎng)度支持1到16字節(jié);
     8.動(dòng)作與指令均支持參數(shù)化配置,即可運(yùn)行前實(shí)例化,也可運(yùn)行時(shí)調(diào)整;
     9.支持32種不同邏輯業(yè)務(wù)處理功能在線編譯、在線加載、在線配置、在線卸載,不影響其他業(yè)務(wù)邏輯;
     10.提供P4后端編譯器,支持用戶P4代碼編譯;
     11.提供P4運(yùn)行時(shí)配置管理工具,支持用戶流表配置、動(dòng)作配置和寄存器初始配置。
     擁有上述平臺(tái)編程功能后,對(duì)硬件的設(shè)計(jì)要求便會(huì)變得較為簡(jiǎn)單。原來(lái)要花較長(zhǎng)時(shí)間,寫(xiě)較多代碼的功能,現(xiàn)在可以簡(jiǎn)單、快速的實(shí)現(xiàn)。
     A)設(shè)計(jì)原理
     從交換機(jī)的幾個(gè)功能步驟開(kāi)始,先實(shí)現(xiàn)源MAC地址的學(xué)習(xí)。從平臺(tái)功能分析,使用寄存器部件比較合適。 擬定義一個(gè)端口與MAC地址的映射表,存儲(chǔ)在寄存器對(duì)象中,使用源MAC地址作為寄存器對(duì)象的索引,分組輸入端口號(hào)作為該索引位置的值。在使用目的MAC查表時(shí),亦使用MAC地址作為索引進(jìn)行查找,即可獲取該地址學(xué)習(xí)存儲(chǔ)的端口號(hào)。
     由于MAC地址為48位,本平臺(tái)支持寄存器的深度有限,故本案例中僅取MAC地址的后4位作為索引。故實(shí)驗(yàn)演示時(shí),要求測(cè)試主機(jī)的MAC地址尾數(shù)不同。
     單播地址可以采用上述思路進(jìn)行設(shè)備,那組播與廣播地址呢,我們本案例擬采用全泛洪的方式先來(lái)實(shí)現(xiàn)一個(gè)基礎(chǔ)版本。 想要做組播功能可以將組播協(xié)議配置規(guī)則送CPU處理,CPU學(xué)習(xí)到入組和退組信息后,通過(guò)P4的運(yùn)行時(shí)工具進(jìn)行組播MAC與相應(yīng)端口號(hào)的規(guī)則配置即可。
     B)代碼實(shí)現(xiàn)

action learn_forward()
{
     MAC_PORT.regwrite((u8)hdr.eth.smac&0xF,std_meta.ioport);
     std_meta.ioport = MAC_PORT.regread((u8)hdr.eth.dmac&0xF);
}

單播自學(xué)習(xí)與轉(zhuǎn)發(fā)

action mb_cast()
{
     MAC_PORT.regwrite((u8)hdr.eth.smac&0xF,std_meta.ioport);
     std_meta.ioport = ~std_meta.ioport;
}

多播泛洪
以上為硬件二層交換機(jī)(原型系統(tǒng))全部業(yè)務(wù)邏輯功能代碼。是的,就是這四行代碼?。。?!
      A)軟件核心代碼

      B)編譯器結(jié)果

      C)硬件配置

      D)Ping通測(cè)試

C:\Users\Administrator>ping 192.168.1.198
正在 Ping 192.168.1.198 具有 32 字節(jié)的數(shù)據(jù):
來(lái)自 192.168.1.198 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=127
來(lái)自 192.168.1.198 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=127
來(lái)自 192.168.1.198 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=127
來(lái)自 192.168.1.198 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=127

     物質(zhì)守恒、能力守恒,苦難亦然守恒。
     為了讓學(xué)生們?cè)谖覀兤脚_(tái)編寫(xiě)硬件邏輯少些痛苦,我們艱苦奮斗了16個(gè)月,對(duì)P4的原理、代碼和編譯器進(jìn)行了仔細(xì)琢磨、分析和領(lǐng)悟。我們認(rèn)為P4是一門(mén)較為優(yōu)秀的編程語(yǔ)言,更是一種硬件編程的創(chuàng)新思路和具體表達(dá)形式。我們無(wú)法去破解P4的硬件實(shí)現(xiàn),固然也無(wú)從參考,而是領(lǐng)悟P4編程方式的精髓理念后,采用了原有FAST架構(gòu)和部分邏輯調(diào)整,并配置P4后端編譯適配,打造了現(xiàn)如今的支持P4的FAST架構(gòu)可編程平臺(tái)。
     本平臺(tái)結(jié)合了FAST架構(gòu)與P4可編程的雙重優(yōu)勢(shì)。支持用戶在最底層硬件到最高層軟件全方便的編程與驗(yàn)證,而且編程語(yǔ)言均使用C語(yǔ)言和類似C的P4語(yǔ)言,進(jìn)一步降低了學(xué)習(xí)與使用難度。
     下一步,做個(gè)硬件路由器?或者您有更美好的想法,我們可以試一試!
     有需要開(kāi)發(fā)可編程硬件(FPGA、ASIC等)的P4后端編譯器,或獲得本平臺(tái)介紹相關(guān)源碼的客戶,請(qǐng)與15116127200(微信同號(hào))聯(lián)系,閱讀更多FAST相關(guān)文章請(qǐng)進(jìn)入以下公眾號(hào)。