Vivado HLS推動(dòng)協(xié)議處理系統蓬勃發(fā)展(下)
7 用多級層級創(chuàng )建系統
本文引用地址:http://dyxdggzs.com/article/273295.htm上文討論了如何使用Vivado HLS實(shí)現簡(jiǎn)單的三級流水線(xiàn)。但是一般的包處理系統可能會(huì )包含分布在層級結構中多個(gè)層面的多個(gè)模塊。圖2即是這種系統的示例。在本例中,層級結構的第一層由兩個(gè)模塊組成,每個(gè)模塊下面包括三個(gè)子模塊。這個(gè)示例中的頂層模塊與前面介紹的簡(jiǎn)單系統中頂層模塊相似。但包含有三個(gè)子模塊的較低層模塊使用INLINE編譯指令來(lái)解析函數,將其子模塊推送到頂層,如例6所示。
例6:Vivado HLS中的中間模塊
1 void module2 (stream < axiWord > &inData,
stream&outData) {
2 #pragma HLS INLINE
3
4 ………
因此在Vivado HLS完成綜合后,系統基本如圖3所示。這樣Vivado HLS就能正確地根據這些模塊創(chuàng )建數據流架構,完成模塊的流水線(xiàn)化,然后同步執行。在嵌入該函數后,各模塊和信號保持原來(lái)的名稱(chēng)不變。
8 使用高級語(yǔ)言結構
高層次綜合的主要優(yōu)勢之一在于可以使用高級語(yǔ)言結構來(lái)表達復雜對象,與傳統RTL設計相比,顯著(zhù)提高了抽象水平。下面的例子是描述一個(gè)小型查找表。
例7中的代碼用于內容可尋址存儲器(CAM)類(lèi)定義,它使用類(lèi)對象創(chuàng )建一個(gè)表,供存儲和恢復上述原型系統的ARP數據。該類(lèi)有一個(gè)私有成員,這個(gè)私有成員是一個(gè)由“noOfArpTableEntries”條“arpTableEntry”類(lèi)型記錄組成的陣列。這種類(lèi)型屬于一種數據結構,包括MAC地址、對應的IP地址和用于說(shuō)明該條記錄是否包含有效數據的一個(gè)數位。
例7:CAM類(lèi)定義
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è)類(lèi)也包括四種在這個(gè)表上運算方法(其中一個(gè)是構造器)。其中的一個(gè),即比較法,用于實(shí)現真正的查找功能。本例通過(guò)提供IP地址來(lái)返回相應的MAC地址。處理的方法是使用“for”循環(huán)查找表中的每一條記錄,搜索有相同IP地址的有效記錄。然后完整地返回這條記錄。如果沒(méi)有找到,就返回無(wú)效記錄。為讓設計實(shí)現II=1的目標,必須完全展開(kāi)這個(gè)循環(huán)。
例8:用于CAM類(lèi)的比較法
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)驗和示例明確說(shuō)明,用戶(hù)可以使用Vivado HLS充分發(fā)揮高級編程結構的作用,用類(lèi)似軟件的方法描述包處理系統。采用RTL是難以實(shí)現的。
9 10GBps速率下的協(xié)議處理
與傳統RTL相比,Vivado HLS可使用C/C++在FPGA上迅速方便地實(shí)現協(xié)議處理設計,充分發(fā)揮高級語(yǔ)言帶來(lái)的效率提升優(yōu)勢。另外還具有下列優(yōu)點(diǎn):使用C函數輕松完成系統構建;數據通過(guò)流交換,提供類(lèi)似FIFO的標準化接口;靈活的流控制和HLS編譯指令,便于使用該工具實(shí)現需要的架構。借助這些功能,用戶(hù)無(wú)需重寫(xiě)源代碼就能夠迅速判研多種不同設計方案的利弊。
出于解釋這類(lèi)設計的基本概念的目的,上文討論了一種能夠應答ping和ARP請求,解析IP地址查詢(xún)的簡(jiǎn)單ARP服務(wù)器。結果證明用Vivado HLS設計的模塊能夠以10Gbp乃至更高的線(xiàn)速完成協(xié)議處理。
c++相關(guān)文章:c++教程
評論