新聞中心

        EEPW首頁 > 網(wǎng)絡(luò)與存儲 > 設(shè)計應(yīng)用 > Vivado HLS推動協(xié)議處理系統(tǒng)蓬勃發(fā)展(下)

        Vivado HLS推動協(xié)議處理系統(tǒng)蓬勃發(fā)展(下)

        作者:KimonKarras JamesHrica 時間:2015-04-29 來源:電子產(chǎn)品世界 收藏

          7 用多級層級創(chuàng)建系統(tǒng)

        本文引用地址:http://www.104case.com/article/273295.htm

          上文討論了如何使用 HLS實現(xiàn)簡單的三級流水線。但是一般的包處理系統(tǒng)可能會包含分布在層級結(jié)構(gòu)中多個層面的多個模塊。圖2即是這種系統(tǒng)的示例。在本例中,層級結(jié)構(gòu)的第一層由兩個模塊組成,每個模塊下面包括三個子模塊。這個示例中的頂層模塊與前面介紹的簡單系統(tǒng)中頂層模塊相似。但包含有三個子模塊的較低層模塊使用INLINE編譯指令來解析函數(shù),將其子模塊推送到頂層,如例6所示。

          例6: HLS中的中間模塊

          1 void module2 (stream < axiWord > &inData,
          stream&outData) {
          2 #pragma HLS INLINE
          3
          4 ………

          因此在 HLS完成綜合后,系統(tǒng)基本如圖3所示。這樣Vivado HLS就能正確地根據(jù)這些模塊創(chuàng)建數(shù)據(jù)流架構(gòu),完成模塊的流水線化,然后同步執(zhí)行。在嵌入該函數(shù)后,各模塊和信號保持原來的名稱不變。

          8 使用高級語言結(jié)構(gòu)

          高層次綜合的主要優(yōu)勢之一在于可以使用高級語言結(jié)構(gòu)來表達(dá)復(fù)雜對象,與傳統(tǒng)RTL設(shè)計相比,顯著提高了抽象水平。下面的例子是描述一個小型查找表。

          例7中的代碼用于內(nèi)容可尋址(CAM)類定義,它使用類對象創(chuàng)建一個表,供存儲和恢復(fù)上述原型系統(tǒng)的ARP數(shù)據(jù)。該類有一個私有成員,這個私有成員是一個由“noOfArpTableEntries”條“arpTableEntry”類型記錄組成的陣列。這種類型屬于一種數(shù)據(jù)結(jié)構(gòu),包括MAC地址、對應(yīng)的IP地址和用于說明該條記錄是否包含有效數(shù)據(jù)的一個數(shù)位。

          例7:CAM類定義

          1 class cam {
          2 private:
          3 arpTableEntry filterEntries[noOfArpTableEntries];
          4 public:
          5 cam();
          6 bool write(arpTableEntry writeEntry);
          7 bool clear(ap_uint<32> clearAddress);
          8 arpTableEntry compare(ap_uint<32>
          searchAddress);
          9 };

          這個類也包括四種在這個表上運算方法(其中一個是構(gòu)造器)。其中的一個,即比較法,用于實現(xiàn)真正的查找功能。本例通過提供IP地址來返回相應(yīng)的MAC地址。處理的方法是使用“for”循環(huán)查找表中的每一條記錄,搜索有相同IP地址的有效記錄。然后完整地返回這條記錄。如果沒有找到,就返回?zé)o效記錄。為讓設(shè)計實現(xiàn)II=1的目標(biāo),必須完全展開這個循環(huán)。

          例8:用于CAM類的比較法

          1 arpTableEntry cam::compare(ap_uint<32> searchAddress)
          {
          2 for (uint8_t i=0; i
          3 if (this->filterEntries[i].valid == 1 &&
          searchAddress == this->filterEntries[i].ipAddress)
          4 return this->filterEntries[i];
          5 }
          6 arpTableEntry temp = {0, 0, 0};
          7 return temp;
          8 }

          上述經(jīng)驗和示例明確說明,用戶可以使用Vivado HLS充分發(fā)揮高級編程結(jié)構(gòu)的作用,用類似軟件的方法描述包處理系統(tǒng)。采用RTL是難以實現(xiàn)的。

          9 10GBps速率下的協(xié)議處理

          與傳統(tǒng)RTL相比,Vivado HLS可使用在FPGA上迅速方便地實現(xiàn)協(xié)議處理設(shè)計,充分發(fā)揮高級語言帶來的效率提升優(yōu)勢。另外還具有下列優(yōu)點:使用C函數(shù)輕松完成系統(tǒng)構(gòu)建;數(shù)據(jù)通過流交換,提供類似的標(biāo)準(zhǔn)化接口;靈活的流控制和HLS編譯指令,便于使用該工具實現(xiàn)需要的架構(gòu)。借助這些功能,用戶無需重寫源代碼就能夠迅速判研多種不同設(shè)計方案的利弊。

          出于解釋這類設(shè)計的基本概念的目的,上文討論了一種能夠應(yīng)答ping和ARP請求,解析IP地址查詢的簡單ARP服務(wù)器。結(jié)果證明用Vivado HLS設(shè)計的模塊能夠以10Gbp乃至更高的線速完成協(xié)議處理。

        c++相關(guān)文章:c++教程



        上一頁 1 2 3 下一頁

        關(guān)鍵詞: Vivado FIFO 存儲器 RAM C/C++

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 新乡市| 冕宁县| 花莲县| 冀州市| 新蔡县| 都兰县| 福安市| 团风县| 夏津县| 金寨县| 宁国市| 同心县| 新野县| 花莲市| 海口市| 文成县| 乐平市| 探索| 永福县| 海宁市| 梓潼县| 松江区| 彭州市| 海淀区| 台安县| 伊宁市| 莱西市| 全州县| 永胜县| 循化| 巴林右旗| 昭平县| 葵青区| 凉山| 中西区| 渝中区| 柳江县| 静安区| 东城区| 揭阳市| 丹东市|