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

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

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

FPGA中有狀態(tài)表項(xiàng)的存儲(chǔ)與管理

Spinal FPGA ? 來(lái)源: Spinal FPGA ? 2024-10-27 16:06 ? 次閱讀

編 者 按

一篇2014年的論文:《CACHE FOR FLOW CONTENT: SOLUTION TODEPENDENT PACKET PROCESSING IN FPGA》,主要講述在FPGA中有狀態(tài)表項(xiàng)的存儲(chǔ)與管理。感興趣的可以閱讀原文。

報(bào)文的依賴性

CPU中,存在一種“write-read miss”的場(chǎng)景,即新的數(shù)據(jù)還未寫回就要去讀存儲(chǔ)器,導(dǎo)致數(shù)據(jù)依賴。

在FPGA與ASIC中報(bào)文的流水線處理中,也存在報(bào)文的依賴性問題。在流水線結(jié)構(gòu)中,每個(gè)報(bào)文占據(jù)固定的時(shí)間周期數(shù),處理時(shí)牽涉到對(duì)表項(xiàng)的讀和寫。下圖為例:

c900f0b2-9408-11ef-a511-92fbcf53809c.jpg

理想情況下應(yīng)為左圖,packet1的寫操作從時(shí)鐘周期的角度來(lái)講發(fā)生在packet2的讀操作之前,如此兩個(gè)報(bào)文之間即使存在相互依賴性也沒有任何影響。

然而隨著操作變得復(fù)雜,可能導(dǎo)致到圖右的狀態(tài),即Packet2的讀請(qǐng)求發(fā)生在Packet1的寫請(qǐng)求之前,如果packet2和packet1之間存在依賴性,則此時(shí)將會(huì)發(fā)生功能型的錯(cuò)誤:

c904fdec-9408-11ef-a511-92fbcf53809c.jpg

常見的依賴解決方法&劣勢(shì)

第一種最簡(jiǎn)單的方法就是碰撞預(yù)防:

c91726f2-9408-11ef-a511-92fbcf53809c.jpg

通過(guò)插入空拍來(lái)避免數(shù)據(jù)挨的太近,當(dāng)然壞處就是帶寬的浪費(fèi),自然下下之策。

第二種方法即碰撞補(bǔ)償。碰撞補(bǔ)償允許數(shù)據(jù)以背靠背的形式呈現(xiàn),當(dāng)數(shù)據(jù)沖突將要發(fā)生時(shí),相同數(shù)據(jù)流的信息將會(huì)被合并處理:

c920f790-9408-11ef-a511-92fbcf53809c.jpg

如上圖所示,假定包處理的跨度為三個(gè)報(bào)文,當(dāng)一個(gè)數(shù)據(jù)包n到達(dá)時(shí),其會(huì)與n+1、n+2進(jìn)行比較,如果n依賴于n+1或者n+2,則其信息將會(huì)合并到n+1或者n+2中進(jìn)行處理,n將會(huì)被禁用。這種方式對(duì)于所有的信息都由數(shù)據(jù)包本身攜帶是沒有問題的,但如果有些信息是由流當(dāng)前狀態(tài)、數(shù)據(jù)包信息、中間結(jié)果一些列所決定的那么久不太適用??紤]下面的例子:

c92b1752-9408-11ef-a511-92fbcf53809c.jpg

正常情況下會(huì)進(jìn)入Flow StateC、在進(jìn)行合并后將無(wú)法進(jìn)入到StateC。

第三種方法就是CPU Cache的概念。

CFC

在CFC中,Cache基于流的關(guān)鍵信息作索引(如五元祖哈希)

c92eacfa-9408-11ef-a511-92fbcf53809c.jpg

上圖中n、n+1、n+2存在依賴關(guān)系,n、n+1的寫操作將會(huì)被寫入到Cache中。

這里有一點(diǎn)需要注意的是對(duì)于任何一個(gè)報(bào)文而言,其從數(shù)據(jù)Cache讀出到數(shù)據(jù)寫回的時(shí)鐘數(shù)不應(yīng)超過(guò)報(bào)文在流水線中占據(jù)的時(shí)鐘周期數(shù)T(如果超過(guò)了則意味著一個(gè)報(bào)文無(wú)法在時(shí)鐘周期T內(nèi)完成數(shù)據(jù)的處理)。

這里的Cache可以認(rèn)為是一個(gè)深度為1的全關(guān)聯(lián)Cache。對(duì)于Cache的容量的考慮可以參考下圖:

c9461552-9408-11ef-a511-92fbcf53809c.jpg

指定一個(gè)窗口,其跨度為一個(gè)數(shù)據(jù)包從進(jìn)入處理到寫回的周期,窗口隨著數(shù)據(jù)包滑動(dòng)。上圖中窗口的寬度為N+1個(gè)數(shù)據(jù)包(數(shù)據(jù)包1的狀態(tài)寫回發(fā)生在數(shù)據(jù)包N+1處),則上圖中需要的緩存數(shù)即為N。

每個(gè)緩存的組織形式如下所示:

c95cdeea-9408-11ef-a511-92fbcf53809c.jpg

Content為Cache的主要內(nèi)容,用于存儲(chǔ)流的相關(guān)信息。Tag和Validity為輔助信息。Tag可以為流的hash值。通過(guò)hash比較判斷是否存在匹配。Validity則用于標(biāo)識(shí)該條流是否有效。

對(duì)于Cache中每個(gè)cache entry的維護(hù),可以采用如下策略。為每個(gè)entry維護(hù)一個(gè)計(jì)數(shù)器。計(jì)數(shù)器的初始值為0,標(biāo)識(shí)無(wú)效,其他值則有效。當(dāng)一個(gè)entry被建立使用時(shí),其計(jì)數(shù)器值設(shè)置為N,此后每進(jìn)入一個(gè)數(shù)據(jù)包值就減1,直到為0,標(biāo)志其無(wú)效,將其數(shù)據(jù)寫回SDRAM。但如果來(lái)了一個(gè)命中該entry的數(shù)據(jù),那么其計(jì)數(shù)器值將直接恢復(fù)為N。如此,對(duì)于任何一個(gè)到來(lái)的數(shù)據(jù)報(bào)文,其都可以找到一個(gè)匹配的entry或者一個(gè)空的entry來(lái)進(jìn)行緩存(其實(shí)這里的替換策略就是LRU)。

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

    關(guān)注

    1624

    文章

    21575

    瀏覽量

    600758
  • asic
    +關(guān)注

    關(guān)注

    34

    文章

    1179

    瀏覽量

    120169
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7409

    瀏覽量

    163436
  • 流水線
    +關(guān)注

    關(guān)注

    0

    文章

    116

    瀏覽量

    25550

原文標(biāo)題:論文學(xué)習(xí)——CFC:Cache For Flow Content

文章出處:【微信號(hào):Spinal FPGA,微信公眾號(hào):Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    狀態(tài)機(jī)編程實(shí)例-狀態(tài)表

    上篇文章,使用嵌套switch-case法的狀態(tài)機(jī)編程,實(shí)現(xiàn)了一個(gè)炸彈拆除小游戲。本篇,繼續(xù)介紹狀態(tài)機(jī)編程的第二種方法:狀態(tài)表法,來(lái)實(shí)現(xiàn)炸彈拆除小游戲的狀態(tài)機(jī)編程。
    的頭像 發(fā)表于 06-20 09:05 ?1882次閱讀
    <b class='flag-5'>狀態(tài)</b>機(jī)編程實(shí)例-<b class='flag-5'>狀態(tài)表</b>法

    基于有限狀態(tài)機(jī)[8]的DSR路由表項(xiàng)設(shè)計(jì)實(shí)現(xiàn)方法

    本文為在FPGA中支持DSR協(xié)議的路由表項(xiàng)管理功能,設(shè)計(jì)一種基于有限狀態(tài)機(jī)[8]的實(shí)現(xiàn)方法。
    的頭像 發(fā)表于 12-22 16:27 ?2175次閱讀
    基于有限<b class='flag-5'>狀態(tài)</b>機(jī)[8]的DSR路由<b class='flag-5'>表項(xiàng)</b>設(shè)計(jì)實(shí)現(xiàn)方法

    基于FPGA的視頻圖形顯示系統(tǒng)的DDR3多端口存儲(chǔ)管理設(shè)計(jì)

    吞吐量大、功耗低的需求,因此選擇DDR3 SDRAM作為機(jī)載視頻圖形顯示系統(tǒng)的外部存儲(chǔ)器。本文以Kintex-7系列XC7K410T FPGA芯片和兩片MT41J128M16 DDR3 SDRAM芯片為硬件平臺(tái),設(shè)計(jì)并實(shí)現(xiàn)了基于FPGA
    發(fā)表于 06-24 06:07

    ACPI高級(jí)電源管理的電力狀態(tài)

    ACPI 高級(jí)電源管理ACPI 中定義了 G、D、S、C、P 這 5 個(gè)大的電力狀態(tài)。G 狀態(tài) Global system stateG 狀態(tài)表示的是用戶看到的整個(gè)系統(tǒng)的電力
    發(fā)表于 12-27 07:42

    MCU低功耗狀態(tài)表模式介紹

    一、低功耗狀態(tài)表模式hsi_onhse_onpll_onlsi_onldo_hsildo_pllldo_enldo_en_hcpu_clk備注 runON/OFFON/OFFON/OFFON/OFFONONONONON lprunON/OFFON/OFFON/OFFON/OFFONON...
    發(fā)表于 02-11 07:30

    求助,同步二進(jìn)制減法計(jì)數(shù)器的狀態(tài)表該怎么畫?

    請(qǐng)問各位,同步二進(jìn)制減法計(jì)數(shù)器的狀態(tài)表該怎么畫?之前只做過(guò)同步加法和異步減法,現(xiàn)在混淆了,同步減法的次態(tài)是代入特性方程算出來(lái)之后再作為下一個(gè)初態(tài),還是直接遞減不用算?
    發(fā)表于 11-23 20:44

    TCAM表項(xiàng)管理算法研究

    為了克服傳統(tǒng)的軟件路由查找機(jī)制的瓶頸, 高速路由器目前的查表方案是基于TCAM 的硬件路由查找。由于路由查找的最長(zhǎng)前綴匹配要求,TCAM 要解決路由表項(xiàng)的高效存儲(chǔ)管理問題。本
    發(fā)表于 06-01 11:53 ?28次下載

    TCAM路由表項(xiàng)管理算法優(yōu)化研究

    TCAM(Ternary Content-Addressable Memory) 能夠很好的完成最長(zhǎng)前綴匹配,實(shí)現(xiàn)快速路由查找和分組轉(zhuǎn)發(fā),但是其對(duì)路由表項(xiàng)的有序性要求使得表項(xiàng)管理比較復(fù)雜。在討論已有TCAM
    發(fā)表于 12-22 14:10 ?23次下載

    高速數(shù)據(jù)存儲(chǔ)管理設(shè)計(jì)和基于FPGA高速圖像數(shù)據(jù)的存儲(chǔ)及顯示設(shè)計(jì)

    設(shè)計(jì)了一種基于FPGA控制Nand Flash陣列實(shí)現(xiàn)高速流水線式存儲(chǔ)的方案。設(shè)計(jì)利用FPGA作為主控制器,通過(guò)CameraLink輸入通信接口將圖像數(shù)據(jù)經(jīng)過(guò)一/二級(jí)緩存寫入Flash存儲(chǔ)
    發(fā)表于 10-11 18:33 ?6次下載
    高速數(shù)據(jù)<b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>管理</b>設(shè)計(jì)和基于<b class='flag-5'>FPGA</b>高速圖像數(shù)據(jù)的<b class='flag-5'>存儲(chǔ)</b>及顯示設(shè)計(jì)

    使用單片機(jī)進(jìn)行智能藥盒設(shè)計(jì)的程序和狀態(tài)表資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)進(jìn)行智能藥盒設(shè)計(jì)的程序和狀態(tài)表資料免費(fèi)下載。
    發(fā)表于 12-11 16:05 ?14次下載
    使用單片機(jī)進(jìn)行智能藥盒設(shè)計(jì)的程序和<b class='flag-5'>狀態(tài)表</b>資料免費(fèi)下載

    基于有限狀態(tài)機(jī)的FPGA DSR路由表項(xiàng)設(shè)計(jì)和實(shí)現(xiàn)方法

    動(dòng)態(tài)源路由協(xié)議(Dynamic Source Routing)[3]是一種按需路由協(xié)議,是十分適用于Ad Hoc網(wǎng)絡(luò)的路由協(xié)議。在DSR協(xié)議中,路由表的表項(xiàng)都是按需建立的。路由過(guò)期或鏈路斷開,表項(xiàng)就失去作用了。
    發(fā)表于 01-06 11:33 ?1388次閱讀
    基于有限<b class='flag-5'>狀態(tài)</b>機(jī)的<b class='flag-5'>FPGA</b> DSR路由<b class='flag-5'>表項(xiàng)</b>設(shè)計(jì)和實(shí)現(xiàn)方法

    FPGA狀態(tài)機(jī)簡(jiǎn)述

    機(jī)是FPGA設(shè)計(jì)中一種非常重要、非常根基的設(shè)計(jì)思想,堪稱FPGA的靈魂,貫穿FPGA設(shè)計(jì)的始終。 02. 狀態(tài)機(jī)簡(jiǎn)介 什么是狀態(tài)機(jī):
    的頭像 發(fā)表于 11-05 17:58 ?7211次閱讀
    <b class='flag-5'>FPGA</b>:<b class='flag-5'>狀態(tài)</b>機(jī)簡(jiǎn)述

    linux 中 ACPI 電源管理 G 狀態(tài)、S 狀態(tài)、D 狀態(tài)、C 狀態(tài)、P 狀態(tài)

    ACPI 高級(jí)電源管理ACPI 中定義了 G、D、S、C、P 這 5 個(gè)大的電力狀態(tài)。G 狀態(tài) Global system stateG 狀態(tài)表示的是用戶看到的整個(gè)系統(tǒng)的電力
    發(fā)表于 01-05 14:12 ?4次下載
    linux 中 ACPI 電源<b class='flag-5'>管理</b> G <b class='flag-5'>狀態(tài)</b>、S <b class='flag-5'>狀態(tài)</b>、D <b class='flag-5'>狀態(tài)</b>、C <b class='flag-5'>狀態(tài)</b>、P <b class='flag-5'>狀態(tài)</b>

    初代版的NoahX狀態(tài)管理

    在框架中都會(huì)有個(gè)集中式狀態(tài)管理工具,它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)
    的頭像 發(fā)表于 09-13 10:53 ?691次閱讀

    hash算法在FPGA中的實(shí)現(xiàn)(3)

    在前面的文章中主要介紹了hash表及其鏈表的結(jié)構(gòu),同時(shí)說(shuō)明了如何讀取表項(xiàng)。那表項(xiàng)是如何寫入的了?前期的文章中有少量的提及,這里單獨(dú)寫一篇,介紹兩種常見的方案。
    的頭像 發(fā)表于 09-07 17:02 ?678次閱讀
    hash算法在<b class='flag-5'>FPGA</b>中的實(shí)現(xiàn)(3)