0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

并行循環(huán)冗余校驗算法

電子設(shè)計 ? 來源:電子設(shè)計 ? 作者:電子設(shè)計 ? 2022-02-08 16:42 ? 次閱讀

作者:劉歡,來源:網(wǎng)絡(luò)交換FPGA 微信公眾號

另外,F(xiàn)PGA LUT可編程的內(nèi)容也可以參考本公眾號之前的文章《【重磅干貨】手把手教你動態(tài)編輯Xilinx FPGA內(nèi)LUT內(nèi)容》。

循環(huán)冗余碼校驗(CRC)是一種眾所周知的錯誤檢測代碼,已廣泛用于以太網(wǎng),PCIe和其他傳輸協(xié)議中?,F(xiàn)有的基于FPGA的實現(xiàn)解決方案在高性能場景中會遇到資源過度利用的問題。填充零問題和可編程性的引入進一步加劇了這個問題。在本文中,提出了stride-by-5算法,以實現(xiàn)FPGA資源的最佳利用。提出了pipelining go back算法來解決填充零問題。提出了使用HWICAP進行重編程的方法,以實現(xiàn)資源占用少且恒定的可編程性。實驗結(jié)果表明,所提出的非分段架構(gòu)的資源利用率與兩種基于FPGA的最新CRC實現(xiàn)相比,降低80.7%-87.5%和25.1%-46.2%,并且所提出的分段架構(gòu)具有比兩種最新狀態(tài)更低的資源利用率,分別降低了81.7%-85.9%和2.9%-20.8%藝術(shù)建筑。此外,保證了吞吐量和可編程性。源代碼已在GitHub開源。

1. 引言

“在硬件加速計算時代,識別并卸載通用的抽象和原語,而不是單獨的算法和協(xié)議?!?/p>

隨著網(wǎng)絡(luò)吞吐量的不斷增加,越來越多的數(shù)據(jù)包處理任務(wù)被轉(zhuǎn)移到基于現(xiàn)場可編程門陣列的智能網(wǎng)卡上,包括循環(huán)冗余校驗的生成和驗證。400G等技術(shù)和即將到來的多太比特以太網(wǎng)要求更快的CRC計算[5],而基于FPGAs的高性能CRC計算的實現(xiàn)必須滿足三個要求:1)降低并行化成本。Dennard縮放[2]的結(jié)束導(dǎo)致了提高集成電路頻率的瓶頸,更高的吞吐量意味著芯片中更寬的總線。4切片和8切片算法是在[3]中提出的并行處理算法,適用于CPU,但不適用于FPGAs [4]。2)解決補零問題。并行化意味著事務(wù)的最后一個字由有效字節(jié)和填充零組成。填充零的數(shù)量是不確定的,并且使用完整的最終字的循環(huán)冗余校驗計算將導(dǎo)致錯誤的結(jié)果,這被稱為填充零問題。[5]說明解決這個問題的最新方案。最后一個字對應(yīng)的表是以流水線的方式組織的,每個流水線步驟對應(yīng)于一個二叉查找樹層。介紹了一種O(n)資源利用方式。3)保持可編程性。循環(huán)冗余校驗算法的可編程實現(xiàn)可以實現(xiàn)更好的可重用性;因此,無需修改電路即可支持廣泛的應(yīng)用。需求可以在iSCSI [6]和P4 [7]找到。使用特定的電路架構(gòu)來保證可編程性[8],但不適用于FPGAs。[4]是適用于FPGAs的最先進的方案,但它需要復(fù)雜的配置電路,導(dǎo)致資源利用率隨著總線寬度的增加而大幅提高。

上述三個要求導(dǎo)致了可觀的資源利用率。盡管slicing[3] [4]、aggressive strides、多個流的同時處理[5]以及支持循環(huán)冗余校驗加速的許多其他原則是眾所周知的,但它們不能同時實現(xiàn)低成本、高性能和可編程性。采用英特爾循環(huán)冗余校驗指令[9]的多核多插槽系統(tǒng)可以實現(xiàn)高吞吐量,但在數(shù)據(jù)包處理應(yīng)用中會面臨高延遲和高功耗的問題。簡單地說,提出了兩種算法和一種對應(yīng)于這三種要求的方法,以在保證吞吐量和可編程性的情況下降低資源利用率。首先,提出了stride-by-5算法,與slicing-by-4和slicing-by-8算法相比,該算法的資源利用率降低了79.69%-79.98%。其次,提出了pipelining go back算法來解決填充零問題,這將引入一個O (log2 n)資源利用率。最后,硬件內(nèi)部配置訪問端口(HWICAP)用于實現(xiàn)動態(tài)可編程性,無論總線寬度如何,它都可以實現(xiàn)小而恒定的資源利用率。

本文的其余部分組織如下。第二節(jié)介紹了一些基礎(chǔ)知識。第三節(jié)討論了系統(tǒng)架構(gòu)和三個創(chuàng)新。第四節(jié)顯示了綜合結(jié)果。第五節(jié)是本文的結(jié)尾。

2. 基礎(chǔ)知識

2.1 并行循環(huán)冗余校驗算法

并行循環(huán)冗余校驗算法可以同時處理多個數(shù)據(jù)輸入位[10]。并行處理的位數(shù)設(shè)為,這也是本文剩余部分中內(nèi)部總線的寬度。并行輸入數(shù)據(jù)為

pIYBAGAJkfmAEk4iAAA8iCCCnX4303.png 。在Bn進入之前,循環(huán)冗余校驗寄存器的值為Ck。Cn+k和Ck的關(guān)系是:

pIYBAGAJkjeAX0EVAABLthpy_jc622.png

pIYBAGAJko2AJYYUAADPyb7EmS4627.png

pIYBAGAJks6Af0PAAAErvtms1x8676.png

3. 設(shè)計思路

3.1 非分段系統(tǒng)架構(gòu)

所提出的非分段系統(tǒng)架構(gòu)如圖1所示。在非分段系統(tǒng)架構(gòu)中,單個字中應(yīng)該有一個幀,分段系統(tǒng)架構(gòu)可以同時處理多個幀[13]。區(qū)域1和2對應(yīng)于(1)中WlnBn的計算。區(qū)域1消耗大部分查找表,消耗的查找表數(shù)量線性地取決于Wln的大小。在第二節(jié)中討論的stride-by-5算法是為了減少區(qū)域1的LUT消耗而提出的。區(qū)域2通過異或樹而不是一級異或函數(shù)來實現(xiàn),以獲得更高的性能。區(qū)域3完成了公式(1)的計算。區(qū)域4解決了填充零問題,并在第五節(jié)中提出和討論了導(dǎo)致O(log2n)資源利用率的pipelining go back算法。區(qū)域5是一個HWICAP控制器,可以動態(tài)修改查找表的內(nèi)容。操作程序在第四節(jié)中討論。分段系統(tǒng)架構(gòu)在第五節(jié)中提出。上述建議的實施細節(jié)可訪問[1]。

pIYBAGAJkw6AdT-IAAIeGWXcG30914.png

3.2 stride-by-5算法

o4YBAGAJk1GAUs6dAARqQ54-q54071.png

在這一部分中,建立了資源利用模型,證明了對于不同的總線寬度,5步是最佳的步幅(stride),stride-by-5算法在算法1中描述。顧名思義,Stride是指單個邏輯表處理的位數(shù)。邏輯表可以用FPGA LUTs實現(xiàn),可以加載一個函數(shù)的真值表。例如,八輸入函數(shù)定義為:

pIYBAGAJk5OAUZViAABlBPM7v-U612.png

步幅為8和4的等式(3)和(4)可以分別如圖2(a)和圖2(b)所示實現(xiàn)。較小的步長意味著較小的邏輯表可以通過單個LUT或級聯(lián)查找表來實現(xiàn)。步長等于1可以認為是FPGA實現(xiàn)的最佳步距嗎?我們將建立資源利用模型并確定答案。

pIYBAGAJk_CAKzoRAAHjEznWBU4281.png

pIYBAGAJlDCAFPidAAG3lrUnh9o781.png

stride-by-5算法對于FPGAs中的5輸入查找表是最佳的。與slicing-by-4和slicing-by-8算法中使用的stride-by-8相比,stride-by-5將資源利用率降低了79.69%-79.98%。對于具有非5輸入查找表的FPGAs(Xilinx Virtex-5或Altera Stratix II之前),應(yīng)使用由LUT輸入數(shù)定義的步長,并應(yīng)利用LUT共享機制。stride-by-5算法在算法1中描述;它在這里處理區(qū)域1中的計算,但是該算法也可以在區(qū)域3和4中使用。

3.3 Pipelining Go Back算法

在這一部分中,提出了一種資源利用率為O(log2n)的pipelining go back算法,并給出了算法的推導(dǎo)和描述。

o4YBAGAJlHCADh6JAAGg7XuBU2E261.png

q可以表示為:

pIYBAGAJlLGASsr7AAKv4SMu4Is259.png

pIYBAGAJlPKAXxnDAANqlXvHi3k789.png

3.4 通過HWICAP進行重編程

圖1中的區(qū)域5代表一個HWICAP IP核,它可以動態(tài)修改查找表的內(nèi)容。對于任何總線寬度,它消耗186個查找表。相比之下,邏輯資源實現(xiàn)的配置邏輯導(dǎo)致n ≥ 1024 [4]時消耗幾千個lut,資源利用率隨著總線寬度的增加而增加。使用HWICAP IP核重新編程的操作程序如下所述:

1. 完成初始設(shè)計,使用Vivado生成比特流,并將比特流下載到FPGA

2. 提取所用查找表的位置;

3. 當需要重新編程時,使用(1)和(12)計算查找表的新內(nèi)容;

4. 將查找表的內(nèi)容映射到查找表的初始值;

5. 使用HWICAP IP核的AXI Lite 接口將初始值寫入查找表。

重編程方法在工程上是有用的。我們的貢獻如下:

1. 我們驗證了使用HWICAP IP核對循環(huán)冗余校驗算法的現(xiàn)場可編程門陣列實現(xiàn)進行重新編程的可行性。不考慮總線寬度,導(dǎo)致資源利用率小且恒定;

2. 該方法可以直接改變循環(huán)冗余校驗多項式,無需重新編碼和合成;

3. 上述程序的代碼可作為整個項目的一部分在[1]中訪問。據(jù)我們所知,這是第一個涵蓋上述整個過程的開源代碼。

3.5 分段系統(tǒng)架構(gòu)

非分段系統(tǒng)架構(gòu)無法在一個字(時鐘)中處理多個幀,這降低了短幀或未對齊幀的吞吐量。這就是總線效率問題。針對這一問題,提出了一種分段的系統(tǒng)架構(gòu)??偩€格式與[5]中的相同,[5]中的塊(block)是[13]中段(segment)的另一個名稱。比如一條4096位總線可以同時處理8個完整的幀;因此,總線可以分為八個區(qū)域[5]。區(qū)域的數(shù)量僅取決于總線寬度。不同的段寬度是可行的,如果選擇64位的段寬度,一個區(qū)域可以分成八個段(塊)。圖3示出了所提出的分段系統(tǒng)架構(gòu)。與建議的非分段系統(tǒng)架構(gòu)相比,建議的分段系統(tǒng)架構(gòu)具有稍微更復(fù)雜的區(qū)域1和區(qū)域2以及區(qū)域3和區(qū)域4的多個副本。重復(fù)的數(shù)量只是單個字中處理的最大幀數(shù)。

pIYBAGAJlTOANNM4AAKOsOJBLpw682.png

在圖4中可以找到所提出的分段系統(tǒng)架構(gòu)和所提出的非分段系統(tǒng)架構(gòu)之間的比較。紅色長方體代表非分段系統(tǒng)架構(gòu)。藍色長方體表示建議的分段系統(tǒng)架構(gòu)和建議的非分段系統(tǒng)架構(gòu)之間的增量。黃色切片(總線寬度= 1024,段寬度=512) 表示兩種體系結(jié)構(gòu)之間的減量。圖4a示出了資源利用率的增加主要取決于總線寬度而不是段寬度。這是因為資源利用率的增加主要取決于區(qū)域3和4的副本數(shù)量,而區(qū)域3和4的副本數(shù)量僅取決于總線寬度。圖4b顯示,在大多數(shù)情況下,65字節(jié)幀吞吐量的增加是明顯的。當總線寬度為1024位,段寬度為512位時,吞吐量只會下降,其中兩種架構(gòu)對于65字節(jié)幀吞吐量具有相同的總線效率,而非分段架構(gòu)的頻率略高。因此,在本文的其余部分,選擇64位作為段寬。分段和非分段架構(gòu)之間的詳細比較可以在本簡報的擴展版本中找到[11]。

o4YBAGAJlXaANfxtAAS3a8VSYJY793.png

4. 實驗結(jié)果

有三個最先進的研究[5][4][14]。[4][14]中的體系結(jié)構(gòu)可以重新編程,而[5]中的體系結(jié)構(gòu)不能重新編程。提出的兩種架構(gòu)分別用Virtex-7 XC7VX690T實現(xiàn),[5][4][14]使用Virtex-7 XCVH870T、Virtex-6 XC6VLX550T和Stratix-V 5SGSED6N1F45I2。在本節(jié)中,從資源利用率和最大吞吐量的角度將兩種建議的體系結(jié)構(gòu)與這些工作進行了比較。就各種幀長度的吞吐量而言,將所提出的分段架構(gòu)與[5]進行了比較。還報告了兩種建議架構(gòu)的功耗。在下文中,我們使用SA來指代分段架構(gòu)。

綜合結(jié)果如圖5所示。圖5a示出了建議的非SA的資源利用率較分別比[4]和[5]中的體系結(jié)構(gòu)低80.7%-87.5%和25.1%-46.2%,SA的分別為81.7%-85.9%和2.9%-20.8%。資源利用率較低是由于實施了第三節(jié)中描述的算法和方法,這也可以保證高性能和可編程性。[14]中的體系結(jié)構(gòu)的資源利用率比非SA體系結(jié)構(gòu)低74.4%-81.3%。[14]資源利用率較低的原因如下:1)。[14]只需要處理半滿和全滿的數(shù)據(jù)包。換句話說,補零問題得到了部分解決。相比之下,兩個建議的架構(gòu)和[5][4]可以完全解決填充零問題。2)。Nios II IP核的成本在[14]中沒有考慮。相比之下,兩種建議的體系結(jié)構(gòu)都考慮了HWICAP的成本。此外,很難將[14]的總線寬度擴展到1024位。

o4YBAGAJlceALLr4AAY8ltYjHSI351.png

圖5b顯示,所提出的非SA的最大吞吐量分別比[4][5][14]中的架構(gòu)高24.2%-37.9%、37.4%-75.0%和259.4%-284.5%。提出的SA的最大吞吐量分別比[4][5]中的架構(gòu)高28.7%-30.2%和32.2%-80.2%。更高的頻率導(dǎo)致更高的吞吐量,并且兩個建議的架構(gòu)可以為區(qū)域1、2和4中排列良好的流水線實現(xiàn)更高的頻率。

幀長度從64字節(jié)到256字節(jié)的吞吐量可以在圖5c中找到。只有[5]和提議的SA被比較,因為它們在一個字中處理多個幀的能力。這兩種架構(gòu)使用4096位總線寬度和64位段寬度;因此,它們具有相同的總線效率。提議的SA的頻率和吞吐量比[5]高80.2%。當幀長度為65字節(jié)時,最低吞吐量為1933.9 Gbps。

兩種提出架構(gòu)的功耗如圖5d所示。它們以500Mhz運行。數(shù)據(jù)集來自vivado生成的實施后功耗報告。功耗由靜態(tài)功耗和動態(tài)功耗組成。靜態(tài)功耗從0.32 W到0.48 W不等,動態(tài)功耗隨著總線寬度的增加而線性增加。提議的SA的功耗比提議的非SA的功耗增長更快。這是因為提議的SA的資源消耗比提議的非SA的資源消耗增加得更快。

板級實現(xiàn)和與其他作品的比較可以在本文的擴展版本中找到[11]。

5. 結(jié)論和未來工作

本文提出了兩種算法和一種方法來實現(xiàn)低成本、高性能和可編程的循環(huán)冗余校驗計算。這些算法和所提出的方法可用于分段或非分段架構(gòu)。綜合結(jié)果表明,與現(xiàn)有的兩種體系結(jié)構(gòu)相比,所提出的體系結(jié)構(gòu)可以實現(xiàn)更低的資源利用率和更高的吞吐量。源代碼可以在[1]中訪問。我們未來的工作將集中在使硬件重配置方法(HWICAP)技術(shù)獨立。

審核編輯:何安

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4587

    瀏覽量

    92501
收藏 人收藏

    評論

    相關(guān)推薦

    循環(huán)神經(jīng)網(wǎng)絡(luò)算法原理及特點

    循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,簡稱RNN)是一種具有記憶功能的神經(jīng)網(wǎng)絡(luò),能夠處理序列數(shù)據(jù)。與傳統(tǒng)的前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Network
    的頭像 發(fā)表于 07-04 14:49 ?461次閱讀

    循環(huán)神經(jīng)網(wǎng)絡(luò)算法有哪幾種

    循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks,簡稱RNN)是一種適合于處理序列數(shù)據(jù)的深度學(xué)習算法。與傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)不同,RNN具有記憶功能,可以處理時間序列中的信息。以下是對循環(huán)
    的頭像 發(fā)表于 07-04 14:46 ?413次閱讀

    CRC(循環(huán)冗余校驗)應(yīng)用舉例

    CRC(循環(huán)冗余校驗)應(yīng)用舉例
    的頭像 發(fā)表于 05-16 16:12 ?990次閱讀

    Hex文件格式CRC校驗,怎么編寫計算校驗的程序?

    其中的一條記錄:1011000071079907E8071008D206FA0671079907D0 0xD0為校驗,但不知道怎么編寫計算校驗的程序。 校驗和的算法為:計算從0x3A
    發(fā)表于 05-16 06:53

    FPGA壓縮算法有哪些

    在圖像壓縮算法中可以采用哈夫曼編碼的方式對編碼冗余的信息進行壓縮,可以采用預(yù)測的方式來減少像素間冗余,可以采用量化的方式完成心理視覺冗余信息的去除
    的頭像 發(fā)表于 04-15 11:48 ?543次閱讀
    FPGA壓縮<b class='flag-5'>算法</b>有哪些

    淺析MCU通信、存儲常用的簡單校驗算法

    UART有一個奇偶校驗,CAN通信有CRC校驗。Modbus、MAVlink、USB等通信協(xié)議也有校驗信息。
    的頭像 發(fā)表于 03-07 10:56 ?461次閱讀
    淺析MCU通信、存儲常用的簡單<b class='flag-5'>校驗算法</b>

    verilog中for循環(huán)是串行執(zhí)行還是并行執(zhí)行

    在Verilog中,for循環(huán)并行執(zhí)行的。Verilog是一種硬件描述語言,用于描述和設(shè)計數(shù)字電路和系統(tǒng)。在硬件系統(tǒng)中,各個電路模塊是同時運行的,并且可以并行執(zhí)行多個操作。因此,在Verilog中
    的頭像 發(fā)表于 02-22 16:06 ?2600次閱讀

    什么是PLC的軟冗余和硬冗余?PLC不做性能冗余可不可以?

    的邏輯功能或算法,使系統(tǒng)能夠在主控制器故障時自動切換到備用的邏輯功能上運行。軟冗余通常采用雙重或多重輸入檢測方式來實現(xiàn)。當主控制器故障時,備用邏輯功能會接管處理并保證系統(tǒng)的正常運行。軟冗余主要通過軟件的方式實現(xiàn),可以在現(xiàn)有的硬
    的頭像 發(fā)表于 02-02 16:58 ?1772次閱讀

    fpga報告crc故障是什么意思

    方法,通過對發(fā)送的數(shù)據(jù)進行計算并附加到數(shù)據(jù)末尾,接收方能夠使用相同的校驗算法來檢測傳輸中的錯誤。CRC可以檢測多種不同類型的錯
    的頭像 發(fā)表于 01-04 11:06 ?1271次閱讀

    虹科技術(shù) | 保障數(shù)據(jù)傳輸穩(wěn)定性:BabyLIN產(chǎn)品的CRC算法實現(xiàn)

    CRC校驗循環(huán)冗余校驗)是數(shù)據(jù)通訊中最常采用的校驗方式。CAN協(xié)議中,總線通信節(jié)點也常采用CRC算法
    的頭像 發(fā)表于 01-02 17:23 ?488次閱讀
    虹科技術(shù) | 保障數(shù)據(jù)傳輸穩(wěn)定性:BabyLIN產(chǎn)品的CRC<b class='flag-5'>算法</b>實現(xiàn)

    虹科技術(shù)|保障數(shù)據(jù)傳輸穩(wěn)定性:BabyLIN產(chǎn)品的CRC算法實現(xiàn)

    導(dǎo)讀: CRC校驗循環(huán)冗余校驗)是數(shù)據(jù)通訊中最常采用的校驗方式。CAN協(xié)議中,總線通信節(jié)點也常采用CRC
    的頭像 發(fā)表于 01-02 10:45 ?446次閱讀
    虹科技術(shù)|保障數(shù)據(jù)傳輸穩(wěn)定性:BabyLIN產(chǎn)品的CRC<b class='flag-5'>算法</b>實現(xiàn)

    什么叫冗余電源?冗余電源與UPS電源的區(qū)別?

    什么叫冗余電源?冗余電源與UPS電源的區(qū)別? 冗余電源是一種用于提供持續(xù)、穩(wěn)定電力供應(yīng)的系統(tǒng),其設(shè)計目標是確保在意外情況下仍能繼續(xù)為設(shè)備或系統(tǒng)提供電源。與UPS(不間斷電源)相比,冗余
    的頭像 發(fā)表于 12-27 13:58 ?4499次閱讀

    簡述循環(huán)冗余碼crc校驗方法的工作原理

    循環(huán)冗余碼(CRC)校驗是一種常用的錯誤檢測和糾正方法,廣泛應(yīng)用于通信和存儲設(shè)備中,用于確定數(shù)據(jù)在傳輸或存儲過程中是否出現(xiàn)錯誤。 CRC校驗方法的工作原理可以分為以下幾個步驟: 數(shù)據(jù)和
    的頭像 發(fā)表于 12-20 11:27 ?1128次閱讀

    瑞薩RA MCU中CRC模塊的使用方法

    CRC(Cyclic Redundancy Check),即循環(huán)冗余校驗碼。CRC是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯校驗碼,其特征是信息字段和校驗
    的頭像 發(fā)表于 12-07 10:23 ?1912次閱讀
    瑞薩RA MCU中CRC模塊的使用方法

    淺析YTM32的循環(huán)冗余校驗CRC外設(shè)模塊

    在串行通信幀中,為了保證數(shù)據(jù)在傳輸過程中的完整性,通常采用一種指定的算法對原始數(shù)據(jù)進行計算,得出的一個校驗值。
    的頭像 發(fā)表于 11-15 12:25 ?1031次閱讀
    淺析YTM32的<b class='flag-5'>循環(huán)</b><b class='flag-5'>冗余</b><b class='flag-5'>校驗</b>CRC外設(shè)模塊