《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > 介紹一篇可以動(dòng)態(tài)編輯Xilinx FPGA內(nèi)LUT內(nèi)容的深度好文,!

介紹一篇可以動(dòng)態(tài)編輯Xilinx FPGA內(nèi)LUT內(nèi)容的深度好文!

2019-07-24

  內(nèi)部配置訪問端口(ICAP)是基于Xilinx SRAM的現(xiàn)場(chǎng)可編程門陣列(FPGA)中實(shí)現(xiàn)的任何動(dòng)態(tài)部分可重配置系統(tǒng)的核心組件,。我們開發(fā)了一種新的高速ICAP控制器,,名為AC ICAP,,完全采用硬件實(shí)現(xiàn)。除了加速部分比特流和幀的管理的類似解決方案之外,,AC ICAP還支持LUT的運(yùn)行時(shí)重新配置,,而無需預(yù)先計(jì)算的部分比特流。通過對(duì)比特流執(zhí)行逆向工程,,可以實(shí)現(xiàn)最后的特性,。此外,我們采用了這種基于硬件的解決方案,,以提供可從MicroBlaze處理器訪問的IP內(nèi)核,。為此,擴(kuò)展了控制器并實(shí)現(xiàn)了三個(gè)版本,,以便在連接到處理器的外圍本地總線(PLB),,快速單工鏈路(FSL)和AXI接口時(shí)評(píng)估其性能。因此,控制器可以利用處理器提供的靈活性,,但利用硬件加速,。它在Virtex-5和Kintex7 FPGA中實(shí)現(xiàn)。重新配置時(shí)間的結(jié)果表明,,Virtex-5器件中單個(gè)LUT的運(yùn)行時(shí)重新配置小于5us,,這意味著與Xilinx XPS HWICAP控制器相比,速度提升超過380倍,。

微信圖片_20190724163739.jpg

  1,、引言

  現(xiàn)場(chǎng)可編程門陣列(FPGA)器件作為電子系統(tǒng)設(shè)計(jì)和評(píng)估的基本組件而存在。它們不斷被報(bào)告為最終實(shí)現(xiàn)平臺(tái),,而不僅僅是原型元素[1],。 FPGA已根據(jù)VLSI縮放技術(shù)的步伐而發(fā)展,使得可以在最先進(jìn)的制造工藝中開發(fā)這些器件,。例如,,7系列基于Xilinx SRAM的FPGA基于28 nm,高k金屬柵極工藝技術(shù)[2],,Xilinx Virtex UltraScale +采用16 nm FinFET +,,AlteraStratix 10器件采用Intel-14 nm Tri-柵極(FinFET)工藝技術(shù)[3]。這是有利于越來越多的這種設(shè)備作為ASIC的可編程替代品的原因之一,。

  此外,,F(xiàn)PGA的設(shè)計(jì)和制造方面的技術(shù)改進(jìn)產(chǎn)生了更強(qiáng)大,更靈活的元件,,嵌入了更大的RAM存儲(chǔ)器模塊(BRAM),DSP模塊,,處理器和專用的硬連線組件.FPGA提供的固有可重配置特性是其中最重要的特性之一實(shí)際硬件實(shí)現(xiàn)和系統(tǒng)重新設(shè)計(jì)的優(yōu)勢(shì),。

  我們專注于Xilinx器件,因?yàn)槌酥С謩?dòng)態(tài)部分重配置(DPR)之外,,還可以對(duì)比特流進(jìn)行改進(jìn),。這意味著可以執(zhí)行對(duì)比特流結(jié)構(gòu)的逆向工程,這對(duì)于我們?cè)贚UT上執(zhí)行DPR的方法是必不可少的,,這將在第3節(jié)中解釋,。

  基于Xilinx SRAM的FPGA通過內(nèi)部配置訪問端口(ICAP)支持DMA。如圖1所示,,這個(gè)硬連線元件允許在運(yùn)行時(shí)訪問配置存儲(chǔ)器,。因此,可以修改系統(tǒng)的特定部分,,而其余部分繼續(xù)運(yùn)行而不受特定運(yùn)行時(shí)修改的影響,。動(dòng)態(tài)部分重新配置可以在不同的粒度級(jí)別使用。考慮到設(shè)備的體系結(jié)構(gòu),,它可以用于修改基本邏輯組件,,例如查找表(LUT)或更大的塊,例如IP核,。因此,,DPR廣泛應(yīng)用于自適應(yīng)系統(tǒng)的設(shè)計(jì)和關(guān)鍵系統(tǒng)的評(píng)估,這些系統(tǒng)需要在最終生產(chǎn)之前進(jìn)行詳盡的測(cè)試,。

微信圖片_20190724163758.jpg

    

  圖1:ICAP硬連線原語(yǔ),。

  Xilinx工具(如PlanAhead或命令行“???????????????”)將兩個(gè)實(shí)現(xiàn)之間的差異用于生成部分比特流,以允許修改已定義為在運(yùn)行時(shí)更改的特定部分,。然后將部分比特流復(fù)制到FPGA的外部或內(nèi)部存儲(chǔ)器中,,并在系統(tǒng)需要新的硬件任務(wù)時(shí)將其發(fā)送到ICAP。除了特別適用于粗粒模塊的這種類型的運(yùn)行時(shí)重新配置之外,,還存在使用在片上處理器中執(zhí)行的某些軟件功能來動(dòng)態(tài)地修改諸如LUT的基本元件的替代方案,。

  考慮到這一點(diǎn),硬連線ICAP原語(yǔ)及其相關(guān)控制器成為動(dòng)態(tài)運(yùn)行時(shí)可重構(gòu)系統(tǒng)設(shè)計(jì)中的基礎(chǔ)和不可分割的模塊.ICAP控制器負(fù)責(zé)執(zhí)行訪問和修改配置存儲(chǔ)器的所有命令,。因此,,希望這種控制器滿足至少兩個(gè)基本要求:高重新配置吞吐量和靈活性。

  Xilinx工具提供通用控制器來驅(qū)動(dòng)ICAP,,但它們將大部分處理作為處理器中的軟件程序執(zhí)行,。它意味著靈活性,但避免達(dá)到最大支持的重配置吞吐量,。據(jù)報(bào)道,,這些控制器的多種替代方案可以提高重新配置速度。它們中的大多數(shù)已經(jīng)被定向?yàn)楣芾碓谠O(shè)計(jì)時(shí)生成的部分比特流,,并且還操縱作為最小可尋址配置存儲(chǔ)器的幀,。

  深入了解設(shè)備的粒度,還應(yīng)該可以使用已實(shí)現(xiàn)設(shè)計(jì)的LUT上的任何動(dòng)態(tài)修改來增加系統(tǒng)的靈活性,。例如,,它可以在加密模塊中用于修改模塊的邏輯行為并增加對(duì)某種類型的外部攻擊的抵抗力。因此,,還需要一種允許在運(yùn)行時(shí)修改LUT的有效機(jī)制,,因?yàn)長(zhǎng)UT是在FPGA中實(shí)現(xiàn)任何邏輯功能的基本組件。 ICAP控制器應(yīng)提供一種以最大支持速度在LUT中執(zhí)行DPR的方法,,不僅限于預(yù)生成的部分比特流,,而且呈現(xiàn)簡(jiǎn)單的接口,使得架構(gòu)設(shè)備的復(fù)雜性對(duì)用戶透明,。

  在本文中,,我們提出了一種新穎的運(yùn)行時(shí)重配置控制器,它完全在硬件中實(shí)現(xiàn),并支持Xilinx FPGA中LUT的部分重配置,。這項(xiàng)工作的主要貢獻(xiàn)是:

 ?。?)設(shè)計(jì)和實(shí)現(xiàn)支持DPR的fLUTAC ICAP控制器,并在Virtex5和Kintex7器件中驗(yàn)證

 ?。?)將LUT坐標(biāo)和LUT配置值透明地片上轉(zhuǎn)換到幀位置

 ?。?)對(duì)于位于BRAM或閃存中的部分比特流,LUT-DPR的加速和類似的重新配置速度(與現(xiàn)有解決方案相比)

 ?。?)FSM獨(dú)立操作和IP版本適用于不同的嵌入式微處理器接口(PLB,,F(xiàn)SL和AXI)。

  本文的其余部分安排如下,。在第2節(jié)中,,我們回顧了ICAP控制器設(shè)計(jì)中最相關(guān)的工作。在第3節(jié)中,,我們提出了關(guān)于細(xì)粒度部分重構(gòu)的主要考慮因素,。在第4節(jié)中,我們?cè)敿?xì)介紹了新的AC ICAP控制器,。在第5節(jié)中,,介紹了可從片上處理器訪問的控制器擴(kuò)展。在第6節(jié)中,,我們描述了將控制器移植到更新的設(shè)備系列時(shí)要遵循的注意事項(xiàng),。在第7節(jié)中,我們給出了控制器所需的重新配置時(shí)間和區(qū)域的結(jié)果,。接下來是第8節(jié),,其中控制器用于在加密模塊中對(duì)LUT進(jìn)行修改,以實(shí)現(xiàn)針對(duì)外部攻擊的對(duì)策,。最后,,第9節(jié)總結(jié)了論文并提出了未來的工作。

  2.相關(guān)工作

  在本節(jié)中,,我們概述了FPGA動(dòng)態(tài)部分重配置中使用的一些最相關(guān)的ICAP控制器實(shí)現(xiàn)。部分重新配置已廣泛應(yīng)用于各種應(yīng)用[5-7],,這些應(yīng)用利用了在運(yùn)行時(shí)調(diào)整硬件模塊的可能性,。使用這種技術(shù)時(shí)的一個(gè)共同要求是,應(yīng)該以最小的時(shí)間開銷執(zhí)行硬件模塊的切換,。

  實(shí)現(xiàn)具有DPR功能的系統(tǒng)的最常用方法是使用Xilinx工具中提供的ICAP控制器,。 XPS HWICAP [4],如圖2所示,,AXI HWICAP和OPB HWICAP分別是設(shè)計(jì)用于連接PLB [8],,AXI和低速OPB總線的IP內(nèi)核。它們用作嵌入式處理器系統(tǒng)(PicoBlaze或MicroBlaze)的一部分,并且通過處理器API提供的一系列軟件功能提供對(duì)部分重新配置的支持,。這些功能允許處理位于存儲(chǔ)器中的部分比特流,,訪問配置幀(XHwIcap DeviceReadFrame,XHwIcapDeviceWriteFrame)和修改LUT(XHwIcap SetClbBits,,XHwIcap GetClbBits),。在[9]中詳細(xì)介紹了使用函數(shù)修改特定LUT的示例,[10]中的作者使用函數(shù)tomodify幀來模擬配置存儲(chǔ)器上的故障,。

微信圖片_20190724163906.jpg

  Xilinx功能將大部分操作作為處理器中的軟件程序執(zhí)行,。然后,管理ICAP和處理在處理器中執(zhí)行的部分比特流報(bào)頭以及總線等待時(shí)間的命令影響部分重新配置過程的速度,。因此,,已經(jīng)開發(fā)了各種替代控制器來克服這些限制。[11]中的作者探索了分析重新配置速度的不同ICAP控制器,,并提出了三種變化來加速部分比特流的處理,,但它們都需要存在處理器。

  [12,13]也是如此,。在后一種情況下,,使用FSL鏈路將控制器集成在處理器數(shù)據(jù)路徑中,以最小化總線延遲,。相比之下,,[14,15]現(xiàn)有的Virtex-5器件控制器能夠從BRAM和閃存中加載部分比特流,完全由硬件實(shí)現(xiàn),,獨(dú)立于處理器,。以類似的方式,[7,16]報(bào)告了用于Virtex-4 FPGA的獨(dú)立于處理器的ICAP控制器的實(shí)現(xiàn),。 [17]中的作者利用DPR來設(shè)計(jì)容錯(cuò)系統(tǒng),。這些方法顯示了在使用BRAM時(shí)可以達(dá)到最大支持吞吐量的重新配置速度的改進(jìn)。此外,,一些工作,,例如[7,18]中提出的工作,通過對(duì)ICAP進(jìn)行超頻,,實(shí)現(xiàn)了高于技術(shù)文檔中指定速率的吞吐速度,。

  所有這些工作都面向有效地訪問部分比特流并執(zhí)行硬件切換任務(wù),但不考慮完整控制器應(yīng)支持的一些其他操作,。魯棒控制器應(yīng)該能夠回讀和寫入配置幀,,并且除了僅控制部分比特流之外,還可以修改LUT,。這些最后的特征在關(guān)鍵系統(tǒng)的實(shí)現(xiàn)中至關(guān)重要,,其中ICAP控制器是設(shè)計(jì)的基本部分[21],。考慮到這一點(diǎn),,各種方法,,如[20,22-24]中報(bào)道的那些,使用改進(jìn)的ICAP控制器是基于SRAM的FPGA中容錯(cuò)系統(tǒng)的基本組成部分,。在這樣的系統(tǒng)中,,ICAP用于檢測(cè)和校正配置存儲(chǔ)器中的故障。要做到這一點(diǎn),,控制預(yù)先計(jì)算的部分比特流是不夠的,,它們實(shí)現(xiàn)了幀的讀取和寫入,因?yàn)樵诖思?jí)別執(zhí)行故障檢測(cè),。例如,,一旦讀取幀,就可以獲得其CRC以檢查其組成位中是否存在錯(cuò)誤,。在錯(cuò)誤值的情況下,,可以校正幀并使用正確的值寫回配置存儲(chǔ)器。因此,,這些報(bào)告的工作包括用于寫入和讀取配置幀的幀處理,。

  據(jù)我們所知,在[25]中介紹了作為ICAP控制器的一部分在LUT級(jí)執(zhí)行運(yùn)行時(shí)重新配置的唯一工作,,但它僅適用于LUT具有四個(gè)輸入的Xilinx Virtex-II器件該器件的架構(gòu)與新的Xilinx系列有很大不同,。這些框架覆蓋了設(shè)備的整個(gè)高度,并未詳細(xì)說明LUT配置值如何位于框架上,。此外,,這個(gè)家庭目前被認(rèn)為已經(jīng)過時(shí)。

  在這項(xiàng)工作中,,我們開發(fā)了一個(gè)完全用硬件實(shí)現(xiàn)的新型ICAP控制器,,支持比特流管理,幀的讀取和寫入以及LUT修改,。該方法提供了LUT重新配置速度的改進(jìn),,并且在不需要預(yù)先計(jì)算的部分比特流的情況下執(zhí)行。此外,,它可以輕松適應(yīng)各種Xilinx FPGA系列中的片上處理器,。

  3. LUT的動(dòng)態(tài)部分重配置

  在本節(jié)中,我們將介紹XilinxFPGA的一般架構(gòu)以及部分重配置的相關(guān)概念,,以Virtex-5 XC5VLX110T器件為參考。但是一般的想法也適用于較新的設(shè)備,,特別是在考慮LUT時(shí),,因?yàn)樗鼈儽3植蛔?它是6輸入LUT,,適用于Virtex-5,Virtex-6和7系列FPGA,。

  FPGA被組織為連接到開關(guān)矩陣的可配置邏輯塊(CLB)陣列,。圖3顯示了XC5VLX110T FPGA的配置,可以觀察到它被水平分成兩半,。在頂部(0)和底部(1)兩半,,我們發(fā)現(xiàn)固定數(shù)量的行取決于特定器件的大小。Virtex-5 LX110T FPGA分為8個(gè)水平時(shí)鐘行(HCLK):每半個(gè)四個(gè),。每個(gè)HCLK包括確定數(shù)量的CLB,,BRAM,DSP和I / O. CLB分布在160行×54列中,,覆蓋整個(gè)設(shè)備,。每個(gè)CLB由兩個(gè)Slice組成,每個(gè)Slice包含4個(gè)LUT,,4個(gè)觸發(fā)器,,多路復(fù)用器和進(jìn)位邏輯。因此,,該FPGA具有17280個(gè)片,,69120個(gè)LUT和69120個(gè)寄存器。

  一個(gè)CLB列定義為跨越HCLK高度的一組20×1 CLB,。這意味著,,在HCLK行內(nèi)的每個(gè)CLB列中,有40個(gè)Slice和160個(gè)LUT,。

  配置存儲(chǔ)器按幀組織,。一幀是可以尋址的最小配置存儲(chǔ)器大小。因此,,應(yīng)該以幀為參考對(duì)配置存儲(chǔ)器執(zhí)行任何操作,。一幀由41個(gè)32位(1312位)組成.Virtex-5 LX110T需要23712個(gè)配置幀來配置整個(gè)芯片。因此,,配置文件(比特流)由972464個(gè)32位字(3.7 MB)組成,。它在頭部包括272個(gè)字的控制信息,其余對(duì)應(yīng)于配置幀.(FPGA器件固定,,配置文件的大小也就固定了),。

微信圖片_20190724163928.jpg

  每次我們要配置整個(gè)器件時(shí),3.7MB的比特流包含要實(shí)現(xiàn)的電路的描述應(yīng)該加載到配置存儲(chǔ)器中,。

  動(dòng)態(tài)部分重配置允許修改系統(tǒng)的特定部分;結(jié)果,,不需要完整的比特流,而是使用較小的部分比特流,,其中具有要修改的特定區(qū)域的信息,。使用基于差異的方法在設(shè)計(jì)時(shí)生成部分比特流,。 PlanAhead [26]或bitgen命令行[27]用于生成它們。該命令????????????? ??????????????1.??????????????????2.????????????????????2.??????將每個(gè)配置(????????????1 and ????????????2)的兩個(gè)不同文件作為輸入,,結(jié)果是部分比特流??????????????2.??????,,它們之間存在差異。部分比特流的最小尺寸對(duì)應(yīng)于用一個(gè)額外的虛擬幀和控制信息增加的一個(gè)配置幀,。

  要配置CLB列,,需要36幀。在36幀內(nèi),,我們擁有20個(gè)CLB中存在的每個(gè)元素的信息,。我們關(guān)注LUT,因?yàn)檫@些是實(shí)現(xiàn)FPGA中所有組合邏輯的基本元素,。

  LUT或邏輯函數(shù)發(fā)生器是六輸入元件,,需要64位來定義要執(zhí)行的功能。LUT的邏輯行為取決于在這64位中配置的值(INIT值),。要處理任何單個(gè)LUT,,必須定義其位置和INIT值。該位置使用三個(gè)參數(shù):(x,,y,,Bel)。 x和y是Slice的坐標(biāo),,Bel是用于選擇Slice內(nèi)的單個(gè)LUT的索引,。 x和y的范圍取決于FPGA的大小(在所考慮的器件中為108×160),。 Bel索引的范圍從0到3,,用坐標(biāo)(x,y)選擇Slice內(nèi)的4個(gè)LUT(LUT-A,,LUT-B,,LUT-C和LUTD)中的一個(gè)。一旦識(shí)別出特定的LUT,,就可以通過64個(gè)配置位修改其INIT值,。如第2節(jié)所述,由于Xilinx API提供的某些軟件程序,,可以在運(yùn)行時(shí)修改此LUT參數(shù),。函數(shù)XHwIcap GetClbBits用于讀回LUT的INIT值并將其存儲(chǔ)在內(nèi)存中。 XHwIcap SetClbBits將系統(tǒng)內(nèi)存中的任何INIT值復(fù)制到LUT配置字段中,。這兩個(gè)函數(shù)都需要相同類型的參數(shù):LUT(x,,y和Bel)的坐標(biāo)和用于定位INIT值的內(nèi)存地址。我們發(fā)現(xiàn)有關(guān)這些函數(shù)及其執(zhí)行的操作的信息非常有限,。這些參數(shù)的格式目標(biāo)文件(.o)及其源代碼不可用,。

微信圖片_20190724164007.jpg

  此外,,使用這些函數(shù)讀取和寫入LUT的配置值所需的時(shí)間大約為2ms,而使用XHwIcap DeviceReadFrame和XHwIcapDeviceWriteFrame函數(shù)讀取和寫入幀的時(shí)間大約為30 us,。這些數(shù)字是使用基于MicroBlaze的100MHz系統(tǒng)實(shí)驗(yàn)獲得的,為我們提供了改善LUT重新配置時(shí)間的機(jī)會(huì),。因此,,我們進(jìn)行了實(shí)驗(yàn)以推斷出LUT參數(shù)和配置幀之間的關(guān)系。通過組合XHwIcap SetClbBits函數(shù)以使用XHwIcap DeviceReadFrame寫入特定LUT來分析幀上的編程值,,我們發(fā)現(xiàn)使用四個(gè)幀來重新配置單個(gè)LUT,。

  如圖4所示,INIT值的64位跨越四個(gè)連續(xù)幀,,每幀包含16個(gè)INIT位,。每個(gè)CLB列中的40個(gè)Slice可以看作是20列Slice的2列。一個(gè)Slice列包含20個(gè)Slice,,在x坐標(biāo)上具有偶數(shù)值,,而其他20個(gè)Slice包含奇數(shù)值。幀26至29包圍具有奇數(shù)x坐標(biāo)的20個(gè)Slice的LUT配置值,,而當(dāng)32坐標(biāo)為偶數(shù)時(shí),,幀32至35具有20個(gè)Slice的相應(yīng)信息。以類似的方式,,Slice-y坐標(biāo)確定要使用的每個(gè)幀內(nèi)的特定字,。對(duì)于任何CLB列,y需要20個(gè)連續(xù)值,。根據(jù)此值,,幀中的特定字對(duì)應(yīng)于單個(gè)LUT。兩個(gè)連續(xù)的幀字具有片的4個(gè)LUT的部分信息,。 16位INIT LUT-A和16位INIT LUT-B配置值在一個(gè)32位字中,。類似地,LUT-C和LUT-D INIT值位于下一個(gè)字中,。

  4. AC_ICAP實(shí)現(xiàn)

  AC ICAP控制器(如圖5所示)提供與Xilinx工具中可用的XPS HWICAP和AXI HWICAP類似的功能,,但AC ICAP完全在硬件中實(shí)現(xiàn),而不是將大部分任務(wù)作為處理器中的軟件例程,。它包括支持ReadFrames,,WriteFrames,Modify LUT,,以及從閃存和BRAM內(nèi)存加載部分比特流,。與同樣在硬件中實(shí)現(xiàn)幀讀取和寫入的類似方法[20]相比,我們的控制器通過LUT的運(yùn)行時(shí)重新配置得到改進(jìn),,而無需預(yù)先計(jì)算的部分比特流,。這最后一個(gè)特性與自適應(yīng)的實(shí)現(xiàn)相關(guān)可能需要根據(jù)運(yùn)行時(shí)生成的值對(duì)硬件進(jìn)行微調(diào)的系統(tǒng),,而不僅僅是基于預(yù)先計(jì)算的值。第8節(jié)將更詳細(xì)地討論這方面的問題,。

微信圖片_20190724164222.jpg


  控制器及其內(nèi)部模塊使用有限狀態(tài)機(jī)(FSM)根據(jù)表1中指定的輸入Op sel的值在不同的配置級(jí)別上操作,。

  AC ICAP最初使用配備了Virtex-5LX110T FPGA的電路板開發(fā),實(shí)現(xiàn)流程在Xilinx工具版本14.7中執(zhí)行,。盡管Virtex-5系列提供了詳細(xì)信息,,但應(yīng)注意控制器也按照第6節(jié)中的說明在7系列系列中實(shí)現(xiàn)。

微信圖片_20190724164433.jpg

  如第3節(jié)所述,,LUT的DPR需要修改幀的特定部分,。因此,用于讀寫幀的兩個(gè)模塊在LUT運(yùn)行時(shí)重新配置的實(shí)現(xiàn)中是必不可少的,。我們?cè)O(shè)計(jì)了具有BRAM空間的AC ICAP控制器,,能夠存儲(chǔ)可以重新配置4個(gè)CLB列區(qū)域的部分比特流。然后,,控制器對(duì)設(shè)備中可用的總BRAM具有低影響(148),。因此,我們將7-36 Kbit BRAM元素(31.5KB)配置為雙端口存儲(chǔ)器,。該存儲(chǔ)空間用于存儲(chǔ)讀取的幀,,并且還用作要發(fā)送到ICAP的幀的源。保留初始2800字節(jié)以執(zhí)行LUT修改和幀任務(wù),。剩余的28.7KB可用于幀或部分比特流存儲(chǔ),,如圖6所示。當(dāng)部分比特流適合可用的BRAM時(shí),,BRAM任務(wù)的負(fù)載部分比特流可以達(dá)到最大指定吞吐量,,因?yàn)樗鼈冎g的直接連接。片上BRAM和額外字虛擬幀數(shù)據(jù)幀1數(shù)據(jù)幀N數(shù)據(jù)幀或部分比特流位31位0 01 699 700 8063字1 41 42字41字1字41 82 BRAM地址圖6:BRAM存儲(chǔ)器映射,。

  ICAP通過32位鏈接,。通過使用100MHz的時(shí)鐘,每個(gè)時(shí)鐘周期可以使用一個(gè)32位字,,這相當(dāng)于ICAP支持的最大吞吐量(3.2 Gbps),。我們遵守技術(shù)文件中規(guī)定的有關(guān)ICAP最大工作頻率的限制:100MHz [4]。但是,,應(yīng)該考慮到漢森等人在文獻(xiàn) [18]報(bào)告了ICAP的正確操作,,當(dāng)它被超頻以實(shí)現(xiàn)更好的重配置吞吐速度。

微信圖片_20190724164446.jpg

  接下來詳細(xì)說明AC ICAP控制器的組成模塊,。

  4.1 ReadFrames模塊

  ReadFrames模塊使用兩個(gè)參數(shù)來定義要讀取的位置(FAddr)和幀數(shù)(Nf),。 Nf對(duì)于單幀讀取取值1或?qū)Χ鄮x取取任何其他值。它受控制器上可用BRAM內(nèi)存的限制。應(yīng)該注意的是,,對(duì)于LUT修改任務(wù),,一個(gè)BRAM塊就足夠了,但我們包括六個(gè)額外的塊來存儲(chǔ)幀或小的部分比特流,。我們將所有讀取幀存儲(chǔ)在BRAM上,,然后可以訪問它們以對(duì)它們執(zhí)行任何操作?;蛘?,能夠?qū)ψx取幀進(jìn)行頂部處理和存儲(chǔ)的外部模塊可以獲得比由BRAM的大小限制的幀更多的幀。例如,,所考慮的板中存在的DDR存儲(chǔ)器具有256MB的容量。它可用于保存占用AC ICAP可用BRAM的31.5KB以上的配置幀,。

  在多幀(Nf> 1)的情況下,,F(xiàn)Addr是讀取過程開始的第一幀的地址。從那里,,例程將讀取Nf個(gè)連續(xù)幀,。ReadFrames例程中涉及的步驟如圖7所示。當(dāng)op sel =“001”并且Start信號(hào)被置位時(shí),,ICAP被配置為讀取指定的幀,。這是通過寫入ICAP的某些寄存器來完成的,詳見[28],。重要的是指出CE和WRITE輸入的正確斷言以定義ICAP上的讀取或?qū)懭氩僮?。在CE之前,應(yīng)該修改內(nèi)容,,以避免引起中止序列,。它在圖7中的兩個(gè)框ICAPWRITE和ICAP READ中有詳細(xì)說明。

微信圖片_20190724164508.jpg

  輸入FAddr和Nf用于用輸入字標(biāo)識(shí)的流程的兩個(gè)步驟,。這兩個(gè)值適用于相應(yīng)寄存器的格式,。 FAddr應(yīng)具有幀地址寄存器的格式,即一個(gè)32位字,,其中包含字段:塊類型,,頂部,HCLK行,,列和列內(nèi)的幀,。 Nf用于計(jì)算讀取的字的數(shù)量(N)并生成要發(fā)送給ICAP的類型2字。用戶可以通過輸入Startaddr和NumFrames分別指定FAddr和Nf,?;蛘咚鼈兛梢杂蒐ut2Frames模塊生成,如第4.3節(jié)中所述。

  我們必須考慮任何幀的讀取都包括在過程開始時(shí)生成的一個(gè)額外虛擬幀以及一個(gè)額外的字,??紤]到這一點(diǎn),Virtex-5器件的讀取字?jǐn)?shù)可以計(jì)算為

  公式(1)適用于任何Virtex-5FPGA,,因?yàn)樵谶@些器件中,,所有配置幀都具有相同的大小。這是41個(gè)32位字,。偽幀由1到Nf的加法表示,。最后一個(gè)添加代表了最初的字。

  來自FDRO的狀態(tài)READNWords執(zhí)行組成幀的N個(gè)32位字的實(shí)際讀取,。對(duì)于從ICAP的FDRO寄存器讀取的每個(gè)字,,增加BRAM地址以將幀存儲(chǔ)在該存儲(chǔ)器上。圖6顯示了幀的位置和其它字,。

  4.2 WriteFrames模塊

  該模塊的設(shè)計(jì)遵循與ReadFrame中相同的方法,。主要區(qū)別在于準(zhǔn)備ICAP寫入配置存儲(chǔ)器所需的配置命令。當(dāng)表1中定義的Op sel輸入為“010”且啟動(dòng)信號(hào)有效時(shí),,WriteFrames模塊被激活,。要達(dá)到最大吞吐速度,要寫入的幀的首選源是BRAM,。如果幀位于AC ICAP的BRAM中,,則每個(gè)時(shí)鐘周期都有一個(gè)32位字。

  由于此模塊通常與ReadFrames結(jié)合使用,,因此要寫入的幀已經(jīng)被讀取并存儲(chǔ)在BRAM上,。然后,WriteFrames模塊使用相同的存儲(chǔ)空間,,如圖6所示,,其中ReadFrames放置了回讀幀。

  與ReadFrames模塊需要考慮一個(gè)虛擬幀的方式相同,,在每個(gè)寫幀例程中,,虛擬幀應(yīng)該在進(jìn)程的最后部分發(fā)送到ICAP。因此,,數(shù)據(jù)幀從BRAM地址= 42開始并在地址41 *(Nf + 1),。發(fā)送數(shù)據(jù)幀后,應(yīng)立即跟隨虛擬幀,。為此,,起始地址更改為1,并在發(fā)送41個(gè)字(1幀)時(shí)結(jié)束,。地址0處的額外字不用于寫入過程,。

  我們生成Op完成輸出以指示寫入過程的結(jié)束,。有必要保證ICAP任務(wù)正確完成。發(fā)送完所有字后,,必須發(fā)送DESYNC命令并禁用ICAP,。當(dāng)ICAP接收并處理DESYNC命令時(shí),操作完成,。當(dāng)輸出端口O從0xDF變?yōu)?x9F時(shí)觀察到,。該過程具有6個(gè)時(shí)鐘周期的延遲,與輸入CE上的值無關(guān),。

  4.3 DPR of LUTs with LUT2Frames 模塊

  LUT2Frames模塊通過將LUT參數(shù)轉(zhuǎn)換為幀表示來允許LUT的動(dòng)態(tài)部分重配置,。如第3節(jié)所述,LUT的特征在于坐標(biāo)(x,,y,,Bel)和INIT值。 LUT2Frames模塊,,如圖8所示,,執(zhí)行兩個(gè)主要任務(wù):(1)將x,y,,Bel坐標(biāo)轉(zhuǎn)換為FAR格式,以及(2)將INIT(64位)LUT函數(shù)轉(zhuǎn)換為4個(gè)16位的字,。

微信圖片_20190724164529.jpg

  x,,y,Bel輸入合并為一個(gè)32位字,,當(dāng)設(shè)置Start輸入時(shí),,LUT2Frames模塊使用INIT值?;谧鴺?biāo)值,,生成一個(gè)具有幀地址寄存器(FAddr)格式的32位字,以定義讀寫開始的幀,。此外,,x,y和Bel值確定字偏移量,,它是需要操作的每個(gè)幀(2-41個(gè)字中的第一個(gè))的具體字,。

  從32位字開始,只有16位對(duì)應(yīng)于特定的LUT,。因此,,信號(hào)msb lsb指示應(yīng)修改32位字的哪一部分:0為字的LSB部分(LUT-A或LUT-C) 16個(gè)MSB(LUT-B或LUT-D)為1。

  與先前的處理并行地,,LUT2Frames模塊生成四個(gè)16位字(fword1???fword4),,其對(duì)應(yīng)于變換并適應(yīng)四個(gè)幀的INIT值。

  幀位置和尋址的所有復(fù)雜性對(duì)用戶是透明的。 LUT2Frames模塊實(shí)現(xiàn)所有轉(zhuǎn)換并計(jì)算適當(dāng)?shù)牡刂泛蛢?nèi)存管理,,以便在需要修改整個(gè)設(shè)備中的任何LUT時(shí)允許用戶進(jìn)行簡(jiǎn)單操作,。

微信圖片_20190724164635.png

  當(dāng)需要進(jìn)行LUT修改時(shí),執(zhí)行由FSM控制的步驟,,如圖9所示,。該過程由啟動(dòng)信號(hào)觸發(fā);然后,,激活LUT2Frames模塊,。使用此空閑備份字生成的值修改幀寫入幀讀取幀LUT2幀模塊,從FAddr開始的4幀被讀取并存儲(chǔ)在BRAM(讀取幀)中,。字偏移和msb lsb表示應(yīng)修改的特定字,。備份這4個(gè)字(備份字),使用LUT2Frames生成的四個(gè)字進(jìn)行修改,,并復(fù)制回BRAM,。此時(shí),BRAM包含具有新字的幀,,并且WriteFrames模塊執(zhí)行對(duì)應(yīng)于LUT的4幀的寫入,。

  Recover LUT例程使用在備份字階段獲得的四個(gè)備份值將LUT恢復(fù)到其先前的配置值??紤]圖9,,它僅執(zhí)行LUT修改例程的最后兩個(gè)步驟。

  它修改了BRAM上的4個(gè)幀,,然后通過WriteFrames模塊發(fā)送這些幀以將LUT恢復(fù)到其先前的INIT值,。此例程在需要在修改LUT之前恢復(fù)LUT的先前功能的應(yīng)用程序中非常有用。通過遵循這種方法,,我們避免再次讀取四幀,,因?yàn)檫@些已經(jīng)在BRAM上。

  使用ChipScope Pro Debugger [29]驗(yàn)證了控制器的正確操作,。圖10顯示了LUT修改過程的詳細(xì)信息,。我們指定了要修改的LUT的x,y,,Bel和INIT值,。圖10中所示的步驟可以在圖10中標(biāo)識(shí)。LUT2Frames模塊僅需要兩個(gè)時(shí)鐘周期,,并且它生成的信息用于尋址四個(gè)幀以讀取和修改這些幀中的四個(gè)特定字,。

  4.4 Load Partial Bitstreams模塊

  該模塊遵循類似于第2節(jié)中描述的方法,關(guān)于通過加載部分比特流來加速部分重新配置,。負(fù)載部分比特流模塊執(zhí)行三個(gè)主要任務(wù):(1)從閃存加載部分比特流,,(2)將部分比特流從閃存復(fù)制到BRAM,,以及(3)從BRAM加載部分比特流。為此,,該模塊包括一個(gè)存儲(chǔ)器訪問控制器,,用于從閃存中讀取部分比特流。因此,,從閃存讀取的數(shù)據(jù)可以直接發(fā)送到ICAP I端口,,也可以復(fù)制到內(nèi)部BRAM中。當(dāng)部分比特流在BRAM上時(shí),,可以達(dá)到ICAP上的最大配置速度,。如果部分比特流在外部存儲(chǔ)器上,則重新配置時(shí)間取決于訪問存儲(chǔ)器的延遲,。在這種情況下,,我們使用Intel StrataFlash存儲(chǔ)器28F256P30,它需要在100MHz的26個(gè)時(shí)鐘周期才能得到32位字,。

  可以放置在BRAM上的部分比特流的大小受控制器上可用的BRAM存儲(chǔ)器的限制,。從AC ICAP中存在的7-36Kbit BRAM,我們保留了2800字節(jié)來執(zhí)行LUT修改和幀任務(wù),。因此,,可放置的部分比特流的最大大小為28.7KB。它可以增加,,因?yàn)镕PGA包含更多的BRAM(LX110T器件中有148個(gè))但它取決于應(yīng)用限制,。

  部分比特流是按照標(biāo)準(zhǔn)Xilinx流程生成的;它使用的是PlanAhead或bitgen工具。這些配置文件包括關(guān)于設(shè)備類型的標(biāo)題信息,,配置數(shù)據(jù)的大小,比特流的生成的日期和時(shí)間等,。我們調(diào)整部分比特流以從頭部移除不必要的信息,,并且僅保留與不包括頭部的部分比特流的大小(以字節(jié)為單位)對(duì)應(yīng)的最后的頭部字段,。因此,,我們的控制器首先讀取包含部分比特流大小的字,并使用該信息計(jì)算從內(nèi)存中讀取的字?jǐn)?shù)(閃存為16位字,,BRAM為32位字),。使用這種方法,唯一需要的參數(shù)是部分比特流所在的初始地址,。

  控制器自動(dòng)計(jì)算結(jié)束地址并執(zhí)行讀取過程,。根據(jù)輸入Op sel選擇的操作,數(shù)據(jù)將發(fā)送到ICAP或BRAM,。以類似的方式,,當(dāng)Op sel設(shè)置為“111”時(shí),,該模塊配置ICAP控制信號(hào)和BRAM地址以允許高吞吐量部分重新配置。

微信圖片_20190724170718.jpg

  5. AC_ICAP適用于片上處理器

  為了使控制器能夠連接到基于處理器的設(shè)計(jì),,它適用于MicroBlaze系統(tǒng)使用的外圍本地總線和快速單工鏈路接口,。為此,AC ICAP被認(rèn)為是具有圖5中所示的I / O端口的黑盒子,,并且這些端口適用于各自的總線,。這種方法提供了更大的靈活性,因?yàn)榭刂破骺梢匀菀椎貜奶幚砥髅?。我們?chuàng)建了一系列適用于每個(gè)接口的函數(shù),,以執(zhí)行表1中所示的任務(wù)。這些函數(shù)(如代碼1所示)使用XilinxAPI中的特定例程來訪問PLB和FSL接口,。

  代碼1,、驅(qū)動(dòng)AC ICAP IP的功能如下:

微信圖片_20190724170713.jpg

  StartAddr參數(shù)指的是應(yīng)根據(jù)op sel值進(jìn)行調(diào)整的唯一輸入。在讀取和寫入幀的情況下,,它對(duì)應(yīng)于初始幀的地址(FAddr),。對(duì)于其他功能,它是存儲(chǔ)數(shù)據(jù)的存儲(chǔ)器地址,。 NumFrames是要讀取或?qū)懭氲膸瑪?shù),,x,y bel,,INIT是控制單個(gè)LUT的參數(shù),。這些是命令A(yù)C ICAP控制器所需的唯一值,因?yàn)樗趦?nèi)部執(zhí)行所有操作,,例如將x,,y bel和INIT轉(zhuǎn)換為幀格式,在讀取部分比特流的大小后計(jì)算結(jié)束地址,,等等,。

  5.1 PLB IP

  PLB總線用于將外圍設(shè)備連接到MicroBlaze處理器。以VHDL設(shè)計(jì)的原始AC ICAP在PLB包裝器中實(shí)例化以生成定制PLBAC ICAP IP,??刂破鞯妮斎牒洼敵鲞B接到PLB總線的信號(hào),然后處理器可以使用寄存器地址訪問它們,。因此,,PLB AC ICAP可以連接到任何基于MicroBlaze的系統(tǒng),如圖11所示,。該架構(gòu)包括閃存,,其中修改可重配置區(qū)域的全部和部分比特流位于其中。通過將閃存的AC ICAP連接定義為外部端口,,也可以在IP設(shè)計(jì)中執(zhí)行與閃存的直接連接,。一旦包含在EDK的硬件設(shè)計(jì)中,,處理器中運(yùn)行的軟件就能夠通過使用代碼1中列出的功能來控制PLB AC ICAP外設(shè)。因此,,部分重配置相關(guān)任務(wù)使用代碼1中指定的任何功能,。并監(jiān)視輸出操作,直到它變高為確認(rèn)任務(wù)已完成,。

微信圖片_20190724170639.jpg

  5.2 FSL Coprocessor

  Fast Simplex Link是MicroBlaze處理器的一個(gè)接口,,允許包含具有高執(zhí)行優(yōu)先級(jí)的專用硬件例程,因此意味著與處理器通信的低延遲,。在這種方法中,,我們采用了類似于[13]中提出的解決方案,以便由于總線延遲而獲得最小的控制器性能下降,。因此,,基于VHDL的AC ICAP適用于FSL接口,可以作為協(xié)處理器輕松連接,,從而利用處理器的所有靈活性,,但利用ICAP相關(guān)任務(wù)中的硬件加速。圖12顯示了使用FSL AC ICAP協(xié)處理器的系統(tǒng),。

微信圖片_20190724170635.jpg

  FSL AC ICAP協(xié)處理器的訪問方式與PLB AC ICAPIP中考慮的方式類似,,即通過代碼1中提供的功能集合。主要區(qū)別在于這些例程的類型功能需要todrive theFLS,。在這種情況下,,我們將阻塞例程putfsl和getfsl與Xilinx API結(jié)合使用,因?yàn)槲覀冋J(rèn)為重新配置任務(wù)具有高優(yōu)先級(jí),。

  6.在較新的設(shè)備系列中使用AC_ICAP

  為了驗(yàn)證7系列器件中的控制器,,我們使用配備Kintex7 XC7325T FPGA的KC705板[30]。

  該FPGA包含50,950個(gè)Slice,,在每個(gè)Slice內(nèi)部,,有4個(gè)6輸入LUT和8個(gè)FF .445個(gè)BRAM對(duì)應(yīng)2002 KB,比特流大小為10.9MB,。為了使針對(duì)Virtex-5設(shè)計(jì)的AC ICAP適應(yīng)7系列器件,需要進(jìn)行某些更改,。主要差異總結(jié)如下:

 ?。?)7系列系列中每幀的字?jǐn)?shù)為101而不是41(Virtex-5)。這是因?yàn)?系列FPGA中的CLB列高50寬1寬,,這意味著CLB列中存在100個(gè)Slice,。同樣,HCLK行的數(shù)量也不同;對(duì)于這個(gè)特定的設(shè)備,,它是7(3頂部和4底部),。

 ?。?)開始讀或?qū)懙膸牡刂酚蒄AR寄存器定義。對(duì)于7系列,,該寄存器使用32位中的26位,,而在Virtex5 FAR中,它使用24位,。這是由于FPGA的大小增加,。

  (3)與Virtex-5相反,,對(duì)于7系列,,在讀取幀任務(wù)開始時(shí)不需要額外的字。因此,,可以根據(jù)對(duì)任何7系列FPGA有效的(2)來計(jì)算從這些設(shè)備讀取/寫入的字?jǐn)?shù)(Nwords 7),,因?yàn)樵谶@些設(shè)備中所有配置幀具有相同的大小。偽幀由幀數(shù)(Nf)加1表示:


 ?。?)指示在LUT-DPR過程中應(yīng)該修改幀上的特定字的字偏移現(xiàn)在具有0到100的范圍,。對(duì)于Virtex-5,它在0到40之間變化,。以類似的方式,,跳過列(包含不同于CLB的資源的列:BRAM,DSP I / O)和主要列編號(hào)需要更新.Kintex7中的第一列的主要地址為2,,而它為1 Virtex-5的,。

  (5)在7系列中,,原始ICAPE2沒有BUSY輸出,。相反,我們應(yīng)該在CE斷言后考慮3個(gè)時(shí)鐘周期來獲得有效數(shù)據(jù),。

 ?。?)WriteFrames模塊還需要進(jìn)行一些更改。在Virtex-5中,,可以通過設(shè)置配置寄存器(COR0-bit28)并在每次修改FAR時(shí)將值0xDEFC加載到CRC寄存器來繞過CRC計(jì)算,。在7系列中,此類寄存器不存在,;默認(rèn)情況下,,新的控制寄存器(COR1-bits15-16)設(shè)置為允許在計(jì)算CRC后對(duì)系統(tǒng)進(jìn)行連續(xù)操作,因此刪除了這些步驟,。

 ?。?)該電路板中可用的閃存與Virtex-5中的閃存類型相同,但由于尺寸不同,,閃存控制器經(jīng)過修改后還包含兩條額外的地址線,。

  配置CLB列所需的幀數(shù)保持不變(36),,包含LUT信息的特定幀也是如此。我們使用22個(gè)BRAM塊占用與Virtex-5類似的百分比(5%),。

  一旦在AC ICAP中執(zhí)行了所提出的更改,,它就在Kintex7 FPGA中實(shí)現(xiàn),并使用它支持的所有操作進(jìn)行測(cè)試,。在圖13中,,我們?cè)俅翁峁┝艘粋€(gè)LUT的DPR細(xì)節(jié),因?yàn)樗婕翱刂破髦锌捎玫母鞣N任務(wù),。

微信圖片_20190724170016.jpg

  這個(gè)新的AC ICAP適用于AXI接口,,因?yàn)樗糜谒衝ewXilinx系列。該IP被標(biāo)識(shí)為AXI AC ICAP,,并支持代碼1中提供的適用于AXI API的相同功能,。

  基于前面的描述,我們有不同的控制器變體來評(píng)估:AC ICAP,,獨(dú)立硬件版本; PLB AC ICAP和AXI AC ICAP,,分別適用于PLB和AXI總線;和FSL AC ICAP,用作協(xié)處理器,。我們使用PlanAhead 14.7和Vivado 2015.3來定義不同大小的可重新配置分區(qū)(從1到10個(gè)CLB列)并生成不同的部分比特流,。

  對(duì)于基于Xilinx的控制器,我們實(shí)現(xiàn)了如圖11所示的架構(gòu),,但我們不是使用PLB AC ICAP,,而是添加了XPS HWICAP或AXI HWICAP,其參數(shù)可以實(shí)現(xiàn)重配置吞吐量的最佳性能(寫入FIFO深度= 1024,,讀FIFO深度= 256,,并啟用FIFO類型)。對(duì)于這兩種情況,,還包括Xilinx閃存控制器,,以訪問位于該存儲(chǔ)器中的部分比特流。在這樣做時(shí),,我們可以獲得準(zhǔn)確的比較,,因?yàn)槲覀兪褂孟嗤墓ぞ甙姹竞途C合選項(xiàng)。

  7. 實(shí)驗(yàn)結(jié)果

  本節(jié)總結(jié)了有關(guān)AC ICAP控制器的各種版本的重新配置速度和資源利用率的主要結(jié)果,。我們認(rèn)為比較用于Virtex5的Xilinx XPS HWICAP和用于Kintex7的AXI HWICAP的主要參考,,因?yàn)檫@些是報(bào)告的替代方案中的一個(gè),支持大多數(shù)DPR任務(wù)的那些,。我們考慮到,對(duì)于配置多達(dá)4個(gè)CLB列的部分比特流,,可以將它們復(fù)制到BRAM中,,因?yàn)閂irtex-5限制為28.7KB,,Kintex7限制為99 KB。為了記錄AC ICAP(獨(dú)立版本)的時(shí)間性能,,使用了ChipScope Pro,。對(duì)于適用于處理器接口的版本,系統(tǒng)中包含的定時(shí)器用于記錄特定任務(wù)所需的時(shí)鐘周期數(shù),。這些數(shù)字在表2中報(bào)告,。這里,我們想提一些關(guān)于Kintex7 FPGA獲得的值的問題.AXI HWICAP包含的LUT功能不支持7系列,。使用最新版本的工具進(jìn)行實(shí)驗(yàn)(Vivado 2015.3和驅(qū)動(dòng)程序hwicap v10 0),,僅支持Virtex6和以前的設(shè)備,我們無法修改它們,,因?yàn)樵创a不可用,。功能對(duì)于使用AXI HWICAP的讀寫幀,需要修改一些頭文件,,因?yàn)樗鼈儠?huì)出現(xiàn)一些錯(cuò)誤的值,。文件xhwicap ih:使用7系列中的Virtex6值,但這些值不應(yīng)該相同,。例如,,聲明兩個(gè)族的幀中字的數(shù)量是81.但是對(duì)于7系列族,正確的值是101. FAR創(chuàng)建時(shí)會(huì)發(fā)生類似的情況,。驅(qū)動(dòng)程序使用一些對(duì)Virtex-6有效但不對(duì)Kintex7有效的參數(shù)創(chuàng)建FAR,,并對(duì)這些參數(shù)進(jìn)行了修改以獲得正確的操作。

微信圖片_20190724164909.jpg

  從表2可以看出,,據(jù)我們所知,,使用AC ICAP的LUT的重新配置時(shí)間是報(bào)告最快的替代方案。與Virtex-5中的XPS HWICAP相比,,它意味著PLB AC ICAP的速度提升超過320倍,,這是最慢的版本,獨(dú)立的AC ICAP改善了LUT的重配置時(shí)間超過380次,。以類似的方式,,考慮到Virtex-5和Kintex7,讀寫幀任務(wù)的加速分別經(jīng)歷了超過18次和21次的改進(jìn),。

  對(duì)于Virtex-5和Kintex7,,來自BRAM的負(fù)載部分比特流(對(duì)于AC ICAP)的重新配置吞吐量分別為380.47和381.03 MB / s。它接近400MB / s的最大支持吞吐量和[15,20]上的報(bào)告值,。對(duì)于[15]報(bào)告的工作,,應(yīng)該指出的是,估計(jì)的價(jià)值并不是在實(shí)際執(zhí)行中衡量的;因?yàn)樵摽刂破鞑话˙RAM。我們的控制器與400 MB / s值的偏差是由于ICAP開始讀取BRAM和處理DESYNC命令(0x0D)所需的額外時(shí)鐘周期,。對(duì)于每個(gè)與ICAP相關(guān)的任務(wù),,我們認(rèn)為在確認(rèn)DESYNC命令時(shí)它就完成了。它是通過監(jiān)視ICAP的O端口來完成的,,該端口在Vinterex-5中從0xDF變?yōu)?x9F,,在Kintex7中從0xFFFFFFDB變?yōu)?xFFFFFF9B,以確認(rèn)完成任務(wù)是否成功,。這意味著在最后一個(gè)數(shù)據(jù)發(fā)送到的后6個(gè)額外的時(shí)鐘周期ICAP,。

  對(duì)于PLB,AXI和FSL版本,,由于接口的延遲,,時(shí)間會(huì)有一些降級(jí),但在所有情況下,,它們對(duì)來自閃存的負(fù)載部分比特流提供了超過11倍的改進(jìn),。

  將部分比特流從閃存復(fù)制到BRAM的時(shí)間與從閃存加載部分比特流所需的范圍相同。這些存儲(chǔ)在BRAM上,,而不是向ICAP發(fā)送數(shù)據(jù),。因此,當(dāng)應(yīng)用程序可以在執(zhí)行開始之前(例如,,在引導(dǎo)時(shí))將部分比特流復(fù)制到BRAM時(shí),,它尤其有用。

  關(guān)于資源利用率,,表3列出了AC ICAP控制器的每個(gè)模塊的詳細(xì)信息,。應(yīng)該注意的是,AC ICAP包括閃存控制器,,而XPS HWICAP和AXI HWICAP則不是這種情況,。表4總結(jié)了控制器的各種選項(xiàng)所需的資源。 AC ICAP的PLB,,AXI和FSL版本的額外資源是由于使控制器適應(yīng)這些接口所需的包裝邏輯,。可以看出,,資源需求最大的方法使用了5%的Slice,,這可以被認(rèn)為是合理的大小,因?yàn)樗胁僮鞫际窃谟布型瓿傻摹?/p>

微信圖片_20190724164906.jpg

微信圖片_20190724164904.jpg

  最后,,在表5中,,我們比較了完整的基于MicroBlaze的架構(gòu)所需的資源,包括不同版本的ICAP控制器,。我們可以看到,,使用適用于PLB和FSL的AC ICAP的系統(tǒng)平均需要比XPS HWICAP替代方案多3%的Virtex-5 FPGA資源,。這是為了加速所有重新配置任務(wù)而支付的區(qū)域開銷,例如當(dāng)使用FSL AC ICAP時(shí),,LUT的重新配置時(shí)間在356x中得到改善,。當(dāng)我們看到Kintex7的數(shù)據(jù)時(shí),面積百分比隨著設(shè)備的增大而降低,。

  因此,隨著要管理的配置數(shù)據(jù)量變得越來越大,,任務(wù)的加速變得越來越重要,,但I(xiàn)CAP原語(yǔ)支持的速度和總線寬度自Virtex-4生成(32位@ 100MHz)以來保持不變。從提供的數(shù)據(jù)中,,我們可以總結(jié)出最佳的性能區(qū)域權(quán)衡由AC ICAP給出,,它使用3%的FPGA資源但在LUT DPR中提供380x的加速。

微信圖片_20190724164845.jpg

  使用該方法的LUT的動(dòng)態(tài)部分重新配置提供了以下優(yōu)點(diǎn):對(duì)于要執(zhí)行的每個(gè)修改,,它不需要預(yù)先計(jì)算的部分比特流,。它允許使用任何布爾值修改運(yùn)行時(shí)LUT,并且不受內(nèi)存中部分比特流可用性的限制,。這種精細(xì)的部分運(yùn)行時(shí)重新配置在諸如故障注入平臺(tái)和密碼實(shí)現(xiàn)的應(yīng)用中具有越來越大的相關(guān)性,,其中硬件可以在LUT級(jí)別被修改以避免某些類型的攻擊。這些細(xì)粒度修改的案例應(yīng)用將在下一節(jié)中介紹,。

  8. 用于LUT評(píng)估AES模塊的AC_ICAP

  在本節(jié)中,,我們使用AC ICAP來評(píng)估[31]中提供的AES模塊。我們的想法是找到一種方法來識(shí)別LUT的關(guān)鍵配置值,。有了這些信息,,就可以設(shè)計(jì)出針對(duì)外部攻擊的對(duì)策。例如,,可以采用這種方法來修改某些LUT的邏輯行為,,以在不停止系統(tǒng)的情況下產(chǎn)生錯(cuò)誤值。在這樣做時(shí),,AES可以持續(xù)工作,,給出錯(cuò)誤的正確操作感,可以將其用作對(duì)抗諸如差分功率分析之類的攻擊的對(duì)策,。

  如果使用部分比特流方法來修改LUT,,則每個(gè)LUT tomodify都需要部分比特流。這些應(yīng)該在設(shè)計(jì)時(shí)生成并復(fù)制到存儲(chǔ)器中,。因此,,LUT的所有可能修改都應(yīng)該在設(shè)計(jì)時(shí)定義,一旦系統(tǒng)運(yùn)行,,很難包含任何變化,,例如新的LUT修改,,因?yàn)樗馕吨尚碌牟糠直忍亓鞯暮臅r(shí)過程。 AC ICAP支持的LUT的DPR的優(yōu)點(diǎn)是不需要部分比特流,,并且可以動(dòng)態(tài)地執(zhí)行任何邏輯修改,。為了評(píng)估這種方法,我們使用偽隨機(jī)數(shù)發(fā)生器(PRNG)來產(chǎn)生64位配置存儲(chǔ)器,,以便對(duì)要修改的LUT進(jìn)行修改,。我們不關(guān)注AES或PRNG的細(xì)節(jié)。我們的目標(biāo)是提供一種方法來輕松識(shí)別LUT及其關(guān)鍵值,,以用于評(píng)估和設(shè)計(jì)關(guān)鍵模塊,。

  該系統(tǒng)的架構(gòu)如圖14所示,并在Virtex-5 FPGA中實(shí)現(xiàn),。我們包括兩個(gè)AES模塊的副本,,用于在線比較結(jié)果,BRAM存儲(chǔ)LUT的信息,。 AES的單個(gè)副本需要8360 FF和13952 LUT,。 DUT副本在區(qū)域中受到約束,并定義為要使用的分區(qū),,以保持在初始實(shí)現(xiàn)中定義的路由,。定義了88個(gè)CLB列(14080 LUT)的區(qū)域來放置AES。由于我們可以在其他設(shè)計(jì)中重用已實(shí)現(xiàn)的分區(qū),,因此使用LUT的DPR獲得的值對(duì)于不同的實(shí)現(xiàn)仍然有效,。由FSM控制的系統(tǒng)使用PRNG獲得隨機(jī)配置值以配置LUT,并且AC ICAP用于通過使用Slice的x,,y坐標(biāo)來修改DUT區(qū)域上的LUT,。一旦修改了LUT,就會(huì)對(duì)黃金和DUT組件應(yīng)用一些測(cè)試臺(tái)輸入,,并分析輸出以確定LUT修改是否產(chǎn)生錯(cuò)誤值,。在應(yīng)用所有輸入模式之后,對(duì)這種修改的效果進(jìn)行分類,。如果產(chǎn)生錯(cuò)誤值,,則存儲(chǔ)LUT地址和配置值。 LUT恢復(fù)到先前的值并測(cè)試新的LUT,。如果沒有產(chǎn)生錯(cuò)誤的值,,可以繞過它或使用新的配置值進(jìn)行測(cè)試。因此,,這種方法允許靈活的替代方案來徹底地或以更輕松的方式評(píng)估系統(tǒng),。然后,使用存儲(chǔ)在BRAM中的信息來確定在系統(tǒng)受到攻擊時(shí)可以采用哪些LUT及其相關(guān)配置值來有意修改邏輯功能,。

微信圖片_20190724164841.jpg

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

  我們介紹了AC ICAP,,這是一種在Virtex-5和Kintex7 FPGA中驗(yàn)證的新ICAP控制器,。它能夠加載部分比特流,讀取和寫入幀,,以及修改FPGA中的任何LUT,,在最后一種情況下無需預(yù)生成的部分比特流。該控制器適用于使用PLB,,F(xiàn)SL和AXI鏈路的嵌入式處理器系統(tǒng),。與Virtex-5 FPGA的XPS HWICAP功能相比,獨(dú)立于處理器的版本的重配置速度分析顯示LUT的運(yùn)行時(shí)重新配置提高了380多倍,。由于我們的控制器完全采用硬件實(shí)現(xiàn),,因此顯然需要更多資源,但無論如何它占據(jù)了XC5VLX110T器件上可用元件的5%以上,。因此,AC ICAP提供了一個(gè)完整的高速解決方案,,可以執(zhí)行多種動(dòng)態(tài)部分重配置任務(wù),。可接受的FPGA足跡,。它被用于設(shè)計(jì)AES模塊,,可以修改特定的LUT作為可能的攻擊對(duì)策。

  作為未來的工作,,我們計(jì)劃使用DDR控制器擴(kuò)展AC ICAP,,以加速重新配置任務(wù),當(dāng)這些任務(wù)基于預(yù)先計(jì)算的部分比特流由于其大小而無法復(fù)制到BRAM中時(shí),。因此,,DDR存儲(chǔ)器是克服BRAM可用限制的替代方案。

    

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。