內(nèi)部配置訪問端口(ICAP)是基于Xilinx SRAM的現(xiàn)場可編程門陣列(FPGA)中實現(xiàn)的任何動態(tài)部分可重配置系統(tǒng)的核心組件。我們開發(fā)了一種新的高速ICAP控制器,名為AC ICAP,完全采用硬件實現(xiàn)。除了加速部分比特流和幀的管理的類似解決方案之外,AC ICAP還支持LUT的運行時重新配置,而無需預先計算的部分比特流。通過對比特流執(zhí)行逆向工程,可以實現(xiàn)最后的特性。此外,我們采用了這種基于硬件的解決方案,以提供可從MicroBlaze處理器訪問的IP內(nèi)核。為此,擴展了控制器并實現(xiàn)了三個版本,以便在連接到處理器的外圍本地總線(PLB),快速單工鏈路(FSL)和AXI接口時評估其性能。因此,控制器可以利用處理器提供的靈活性,但利用硬件加速。它在Virtex-5和Kintex7 FPGA中實現(xiàn)。重新配置時間的結(jié)果表明,Virtex-5器件中單個LUT的運行時重新配置小于5us,這意味著與Xilinx XPS HWICAP控制器相比,速度提升超過380倍。
1、引言
現(xiàn)場可編程門陣列(FPGA)器件作為電子系統(tǒng)設(shè)計和評估的基本組件而存在。它們不斷被報告為最終實現(xiàn)平臺,而不僅僅是原型元素[1]。 FPGA已根據(jù)VLSI縮放技術(shù)的步伐而發(fā)展,使得可以在最先進的制造工藝中開發(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è)計和制造方面的技術(shù)改進產(chǎn)生了更強大,更靈活的元件,嵌入了更大的RAM存儲器模塊(BRAM),DSP模塊,處理器和專用的硬連線組件.FPGA提供的固有可重配置特性是其中最重要的特性之一實際硬件實現(xiàn)和系統(tǒng)重新設(shè)計的優(yōu)勢。
我們專注于Xilinx器件,因為除了支持動態(tài)部分重配置(DPR)之外,還可以對比特流進行改進。這意味著可以執(zhí)行對比特流結(jié)構(gòu)的逆向工程,這對于我們在LUT上執(zhí)行DPR的方法是必不可少的,這將在第3節(jié)中解釋。
基于Xilinx SRAM的FPGA通過內(nèi)部配置訪問端口(ICAP)支持DMA。如圖1所示,這個硬連線元件允許在運行時訪問配置存儲器。因此,可以修改系統(tǒng)的特定部分,而其余部分繼續(xù)運行而不受特定運行時修改的影響。動態(tài)部分重新配置可以在不同的粒度級別使用??紤]到設(shè)備的體系結(jié)構(gòu),它可以用于修改基本邏輯組件,例如查找表(LUT)或更大的塊,例如IP核。因此,DPR廣泛應用于自適應系統(tǒng)的設(shè)計和關(guān)鍵系統(tǒng)的評估,這些系統(tǒng)需要在最終生產(chǎn)之前進行詳盡的測試。
圖1:ICAP硬連線原語。
Xilinx工具(如PlanAhead或命令行“???????????????”)將兩個實現(xiàn)之間的差異用于生成部分比特流,以允許修改已定義為在運行時更改的特定部分。然后將部分比特流復制到FPGA的外部或內(nèi)部存儲器中,并在系統(tǒng)需要新的硬件任務時將其發(fā)送到ICAP。除了特別適用于粗粒模塊的這種類型的運行時重新配置之外,還存在使用在片上處理器中執(zhí)行的某些軟件功能來動態(tài)地修改諸如LUT的基本元件的替代方案。
考慮到這一點,硬連線ICAP原語及其相關(guān)控制器成為動態(tài)運行時可重構(gòu)系統(tǒng)設(shè)計中的基礎(chǔ)和不可分割的模塊.ICAP控制器負責執(zhí)行訪問和修改配置存儲器的所有命令。因此,希望這種控制器滿足至少兩個基本要求:高重新配置吞吐量和靈活性。
Xilinx工具提供通用控制器來驅(qū)動ICAP,但它們將大部分處理作為處理器中的軟件程序執(zhí)行。它意味著靈活性,但避免達到最大支持的重配置吞吐量。據(jù)報道,這些控制器的多種替代方案可以提高重新配置速度。它們中的大多數(shù)已經(jīng)被定向為管理在設(shè)計時生成的部分比特流,并且還操縱作為最小可尋址配置存儲器的幀。
深入了解設(shè)備的粒度,還應該可以使用已實現(xiàn)設(shè)計的LUT上的任何動態(tài)修改來增加系統(tǒng)的靈活性。例如,它可以在加密模塊中用于修改模塊的邏輯行為并增加對某種類型的外部攻擊的抵抗力。因此,還需要一種允許在運行時修改LUT的有效機制,因為LUT是在FPGA中實現(xiàn)任何邏輯功能的基本組件。 ICAP控制器應提供一種以最大支持速度在LUT中執(zhí)行DPR的方法,不僅限于預生成的部分比特流,而且呈現(xiàn)簡單的接口,使得架構(gòu)設(shè)備的復雜性對用戶透明。
在本文中,我們提出了一種新穎的運行時重配置控制器,它完全在硬件中實現(xiàn),并支持Xilinx FPGA中LUT的部分重配置。這項工作的主要貢獻是:
?。?)設(shè)計和實現(xiàn)支持DPR的fLUTAC ICAP控制器,并在Virtex5和Kintex7器件中驗證
?。?)將LUT坐標和LUT配置值透明地片上轉(zhuǎn)換到幀位置
?。?)對于位于BRAM或閃存中的部分比特流,LUT-DPR的加速和類似的重新配置速度(與現(xiàn)有解決方案相比)
?。?)FSM獨立操作和IP版本適用于不同的嵌入式微處理器接口(PLB,F(xiàn)SL和AXI)。
本文的其余部分安排如下。在第2節(jié)中,我們回顧了ICAP控制器設(shè)計中最相關(guān)的工作。在第3節(jié)中,我們提出了關(guān)于細粒度部分重構(gòu)的主要考慮因素。在第4節(jié)中,我們詳細介紹了新的AC ICAP控制器。在第5節(jié)中,介紹了可從片上處理器訪問的控制器擴展。在第6節(jié)中,我們描述了將控制器移植到更新的設(shè)備系列時要遵循的注意事項。在第7節(jié)中,我們給出了控制器所需的重新配置時間和區(qū)域的結(jié)果。接下來是第8節(jié),其中控制器用于在加密模塊中對LUT進行修改,以實現(xiàn)針對外部攻擊的對策。最后,第9節(jié)總結(jié)了論文并提出了未來的工作。
2.相關(guān)工作
在本節(jié)中,我們概述了FPGA動態(tài)部分重配置中使用的一些最相關(guān)的ICAP控制器實現(xiàn)。部分重新配置已廣泛應用于各種應用[5-7],這些應用利用了在運行時調(diào)整硬件模塊的可能性。使用這種技術(shù)時的一個共同要求是,應該以最小的時間開銷執(zhí)行硬件模塊的切換。
實現(xiàn)具有DPR功能的系統(tǒng)的最常用方法是使用Xilinx工具中提供的ICAP控制器。 XPS HWICAP [4],如圖2所示,AXI HWICAP和OPB HWICAP分別是設(shè)計用于連接PLB [8],AXI和低速OPB總線的IP內(nèi)核。它們用作嵌入式處理器系統(tǒng)(PicoBlaze或MicroBlaze)的一部分,并且通過處理器API提供的一系列軟件功能提供對部分重新配置的支持。這些功能允許處理位于存儲器中的部分比特流,訪問配置幀(XHwIcap DeviceReadFrame,XHwIcapDeviceWriteFrame)和修改LUT(XHwIcap SetClbBits,XHwIcap GetClbBits)。在[9]中詳細介紹了使用函數(shù)修改特定LUT的示例,[10]中的作者使用函數(shù)tomodify幀來模擬配置存儲器上的故障。
Xilinx功能將大部分操作作為處理器中的軟件程序執(zhí)行。然后,管理ICAP和處理在處理器中執(zhí)行的部分比特流報頭以及總線等待時間的命令影響部分重新配置過程的速度。因此,已經(jīng)開發(fā)了各種替代控制器來克服這些限制。[11]中的作者探索了分析重新配置速度的不同ICAP控制器,并提出了三種變化來加速部分比特流的處理,但它們都需要存在處理器。
[12,13]也是如此。在后一種情況下,使用FSL鏈路將控制器集成在處理器數(shù)據(jù)路徑中,以最小化總線延遲。相比之下,[14,15]現(xiàn)有的Virtex-5器件控制器能夠從BRAM和閃存中加載部分比特流,完全由硬件實現(xiàn),獨立于處理器。以類似的方式,[7,16]報告了用于Virtex-4 FPGA的獨立于處理器的ICAP控制器的實現(xiàn)。 [17]中的作者利用DPR來設(shè)計容錯系統(tǒng)。這些方法顯示了在使用BRAM時可以達到最大支持吞吐量的重新配置速度的改進。此外,一些工作,例如[7,18]中提出的工作,通過對ICAP進行超頻,實現(xiàn)了高于技術(shù)文檔中指定速率的吞吐速度。
所有這些工作都面向有效地訪問部分比特流并執(zhí)行硬件切換任務,但不考慮完整控制器應支持的一些其他操作。魯棒控制器應該能夠回讀和寫入配置幀,并且除了僅控制部分比特流之外,還可以修改LUT。這些最后的特征在關(guān)鍵系統(tǒng)的實現(xiàn)中至關(guān)重要,其中ICAP控制器是設(shè)計的基本部分[21]??紤]到這一點,各種方法,如[20,22-24]中報道的那些,使用改進的ICAP控制器是基于SRAM的FPGA中容錯系統(tǒng)的基本組成部分。在這樣的系統(tǒng)中,ICAP用于檢測和校正配置存儲器中的故障。要做到這一點,控制預先計算的部分比特流是不夠的,它們實現(xiàn)了幀的讀取和寫入,因為在此級別執(zhí)行故障檢測。例如,一旦讀取幀,就可以獲得其CRC以檢查其組成位中是否存在錯誤。在錯誤值的情況下,可以校正幀并使用正確的值寫回配置存儲器。因此,這些報告的工作包括用于寫入和讀取配置幀的幀處理。
據(jù)我們所知,在[25]中介紹了作為ICAP控制器的一部分在LUT級執(zhí)行運行時重新配置的唯一工作,但它僅適用于LUT具有四個輸入的Xilinx Virtex-II器件該器件的架構(gòu)與新的Xilinx系列有很大不同。這些框架覆蓋了設(shè)備的整個高度,并未詳細說明LUT配置值如何位于框架上。此外,這個家庭目前被認為已經(jīng)過時。
在這項工作中,我們開發(fā)了一個完全用硬件實現(xiàn)的新型ICAP控制器,支持比特流管理,幀的讀取和寫入以及LUT修改。該方法提供了LUT重新配置速度的改進,并且在不需要預先計算的部分比特流的情況下執(zhí)行。此外,它可以輕松適應各種Xilinx FPGA系列中的片上處理器。
3. LUT的動態(tài)部分重配置
在本節(jié)中,我們將介紹XilinxFPGA的一般架構(gòu)以及部分重配置的相關(guān)概念,以Virtex-5 XC5VLX110T器件為參考。但是一般的想法也適用于較新的設(shè)備,特別是在考慮LUT時,因為它們保持不變;它是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個水平時鐘行(HCLK):每半個四個。每個HCLK包括確定數(shù)量的CLB,BRAM,DSP和I / O. CLB分布在160行×54列中,覆蓋整個設(shè)備。每個CLB由兩個Slice組成,每個Slice包含4個LUT,4個觸發(fā)器,多路復用器和進位邏輯。因此,該FPGA具有17280個片,69120個LUT和69120個寄存器。
一個CLB列定義為跨越HCLK高度的一組20×1 CLB。這意味著,在HCLK行內(nèi)的每個CLB列中,有40個Slice和160個LUT。
配置存儲器按幀組織。一幀是可以尋址的最小配置存儲器大小。因此,應該以幀為參考對配置存儲器執(zhí)行任何操作。一幀由41個32位(1312位)組成.Virtex-5 LX110T需要23712個配置幀來配置整個芯片。因此,配置文件(比特流)由972464個32位字(3.7 MB)組成。它在頭部包括272個字的控制信息,其余對應于配置幀.(FPGA器件固定,配置文件的大小也就固定了)。
每次我們要配置整個器件時,3.7MB的比特流包含要實現(xiàn)的電路的描述應該加載到配置存儲器中。
動態(tài)部分重配置允許修改系統(tǒng)的特定部分;結(jié)果,不需要完整的比特流,而是使用較小的部分比特流,其中具有要修改的特定區(qū)域的信息。使用基于差異的方法在設(shè)計時生成部分比特流。 PlanAhead [26]或bitgen命令行[27]用于生成它們。該命令????????????? ??????????????1.??????????????????2.????????????????????2.??????將每個配置(????????????1 and ????????????2)的兩個不同文件作為輸入,結(jié)果是部分比特流??????????????2.??????,它們之間存在差異。部分比特流的最小尺寸對應于用一個額外的虛擬幀和控制信息增加的一個配置幀。
要配置CLB列,需要36幀。在36幀內(nèi),我們擁有20個CLB中存在的每個元素的信息。我們關(guān)注LUT,因為這些是實現(xiàn)FPGA中所有組合邏輯的基本元素。
LUT或邏輯函數(shù)發(fā)生器是六輸入元件,需要64位來定義要執(zhí)行的功能。LUT的邏輯行為取決于在這64位中配置的值(INIT值)。要處理任何單個LUT,必須定義其位置和INIT值。該位置使用三個參數(shù):(x,y,Bel)。 x和y是Slice的坐標,Bel是用于選擇Slice內(nèi)的單個LUT的索引。 x和y的范圍取決于FPGA的大?。ㄔ谒紤]的器件中為108×160)。 Bel索引的范圍從0到3,用坐標(x,y)選擇Slice內(nèi)的4個LUT(LUT-A,LUT-B,LUT-C和LUTD)中的一個。一旦識別出特定的LUT,就可以通過64個配置位修改其INIT值。如第2節(jié)所述,由于Xilinx API提供的某些軟件程序,可以在運行時修改此LUT參數(shù)。函數(shù)XHwIcap GetClbBits用于讀回LUT的INIT值并將其存儲在內(nèi)存中。 XHwIcap SetClbBits將系統(tǒng)內(nèi)存中的任何INIT值復制到LUT配置字段中。這兩個函數(shù)都需要相同類型的參數(shù):LUT(x,y和Bel)的坐標和用于定位INIT值的內(nèi)存地址。我們發(fā)現(xiàn)有關(guān)這些函數(shù)及其執(zhí)行的操作的信息非常有限。這些參數(shù)的格式目標文件(.o)及其源代碼不可用。
此外,使用這些函數(shù)讀取和寫入LUT的配置值所需的時間大約為2ms,而使用XHwIcap DeviceReadFrame和XHwIcapDeviceWriteFrame函數(shù)讀取和寫入幀的時間大約為30 us。這些數(shù)字是使用基于MicroBlaze的100MHz系統(tǒng)實驗獲得的,為我們提供了改善LUT重新配置時間的機會。因此,我們進行了實驗以推斷出LUT參數(shù)和配置幀之間的關(guān)系。通過組合XHwIcap SetClbBits函數(shù)以使用XHwIcap DeviceReadFrame寫入特定LUT來分析幀上的編程值,我們發(fā)現(xiàn)使用四個幀來重新配置單個LUT。
如圖4所示,INIT值的64位跨越四個連續(xù)幀,每幀包含16個INIT位。每個CLB列中的40個Slice可以看作是20列Slice的2列。一個Slice列包含20個Slice,在x坐標上具有偶數(shù)值,而其他20個Slice包含奇數(shù)值。幀26至29包圍具有奇數(shù)x坐標的20個Slice的LUT配置值,而當32坐標為偶數(shù)時,幀32至35具有20個Slice的相應信息。以類似的方式,Slice-y坐標確定要使用的每個幀內(nèi)的特定字。對于任何CLB列,y需要20個連續(xù)值。根據(jù)此值,幀中的特定字對應于單個LUT。兩個連續(xù)的幀字具有片的4個LUT的部分信息。 16位INIT LUT-A和16位INIT LUT-B配置值在一個32位字中。類似地,LUT-C和LUT-D INIT值位于下一個字中。
4. AC_ICAP實現(xiàn)
AC ICAP控制器(如圖5所示)提供與Xilinx工具中可用的XPS HWICAP和AXI HWICAP類似的功能,但AC ICAP完全在硬件中實現(xiàn),而不是將大部分任務作為處理器中的軟件例程。它包括支持ReadFrames,WriteFrames,Modify LUT,以及從閃存和BRAM內(nèi)存加載部分比特流。與同樣在硬件中實現(xiàn)幀讀取和寫入的類似方法[20]相比,我們的控制器通過LUT的運行時重新配置得到改進,而無需預先計算的部分比特流。這最后一個特性與自適應的實現(xiàn)相關(guān)可能需要根據(jù)運行時生成的值對硬件進行微調(diào)的系統(tǒng),而不僅僅是基于預先計算的值。第8節(jié)將更詳細地討論這方面的問題。
控制器及其內(nèi)部模塊使用有限狀態(tài)機(FSM)根據(jù)表1中指定的輸入Op sel的值在不同的配置級別上操作。
AC ICAP最初使用配備了Virtex-5LX110T FPGA的電路板開發(fā),實現(xiàn)流程在Xilinx工具版本14.7中執(zhí)行。盡管Virtex-5系列提供了詳細信息,但應注意控制器也按照第6節(jié)中的說明在7系列系列中實現(xiàn)。
如第3節(jié)所述,LUT的DPR需要修改幀的特定部分。因此,用于讀寫幀的兩個模塊在LUT運行時重新配置的實現(xiàn)中是必不可少的。我們設(shè)計了具有BRAM空間的AC ICAP控制器,能夠存儲可以重新配置4個CLB列區(qū)域的部分比特流。然后,控制器對設(shè)備中可用的總BRAM具有低影響(148)。因此,我們將7-36 Kbit BRAM元素(31.5KB)配置為雙端口存儲器。該存儲空間用于存儲讀取的幀,并且還用作要發(fā)送到ICAP的幀的源。保留初始2800字節(jié)以執(zhí)行LUT修改和幀任務。剩余的28.7KB可用于幀或部分比特流存儲,如圖6所示。當部分比特流適合可用的BRAM時,BRAM任務的負載部分比特流可以達到最大指定吞吐量,因為它們之間的直接連接。片上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存儲器映射。
ICAP通過32位鏈接。通過使用100MHz的時鐘,每個時鐘周期可以使用一個32位字,這相當于ICAP支持的最大吞吐量(3.2 Gbps)。我們遵守技術(shù)文件中規(guī)定的有關(guān)ICAP最大工作頻率的限制:100MHz [4]。但是,應該考慮到漢森等人在文獻 [18]報告了ICAP的正確操作,當它被超頻以實現(xiàn)更好的重配置吞吐速度。
接下來詳細說明AC ICAP控制器的組成模塊。
4.1 ReadFrames模塊
ReadFrames模塊使用兩個參數(shù)來定義要讀取的位置(FAddr)和幀數(shù)(Nf)。 Nf對于單幀讀取取值1或?qū)Χ鄮x取取任何其他值。它受控制器上可用BRAM內(nèi)存的限制。應該注意的是,對于LUT修改任務,一個BRAM塊就足夠了,但我們包括六個額外的塊來存儲幀或小的部分比特流。我們將所有讀取幀存儲在BRAM上,然后可以訪問它們以對它們執(zhí)行任何操作。或者,能夠?qū)ψx取幀進行頂部處理和存儲的外部模塊可以獲得比由BRAM的大小限制的幀更多的幀。例如,所考慮的板中存在的DDR存儲器具有256MB的容量。它可用于保存占用AC ICAP可用BRAM的31.5KB以上的配置幀。
在多幀(Nf> 1)的情況下,F(xiàn)Addr是讀取過程開始的第一幀的地址。從那里,例程將讀取Nf個連續(xù)幀。ReadFrames例程中涉及的步驟如圖7所示。當op sel =“001”并且Start信號被置位時,ICAP被配置為讀取指定的幀。這是通過寫入ICAP的某些寄存器來完成的,詳見[28]。重要的是指出CE和WRITE輸入的正確斷言以定義ICAP上的讀取或?qū)懭氩僮?。在CE之前,應該修改內(nèi)容,以避免引起中止序列。它在圖7中的兩個框ICAPWRITE和ICAP READ中有詳細說明。
輸入FAddr和Nf用于用輸入字標識的流程的兩個步驟。這兩個值適用于相應寄存器的格式。 FAddr應具有幀地址寄存器的格式,即一個32位字,其中包含字段:塊類型,頂部,HCLK行,列和列內(nèi)的幀。 Nf用于計算讀取的字的數(shù)量(N)并生成要發(fā)送給ICAP的類型2字。用戶可以通過輸入Startaddr和NumFrames分別指定FAddr和Nf?;蛘咚鼈兛梢杂蒐ut2Frames模塊生成,如第4.3節(jié)中所述。
我們必須考慮任何幀的讀取都包括在過程開始時生成的一個額外虛擬幀以及一個額外的字??紤]到這一點,Virtex-5器件的讀取字數(shù)可以計算為
公式(1)適用于任何Virtex-5FPGA,因為在這些器件中,所有配置幀都具有相同的大小。這是41個32位字。偽幀由1到Nf的加法表示。最后一個添加代表了最初的字。
來自FDRO的狀態(tài)READNWords執(zhí)行組成幀的N個32位字的實際讀取。對于從ICAP的FDRO寄存器讀取的每個字,增加BRAM地址以將幀存儲在該存儲器上。圖6顯示了幀的位置和其它字。
4.2 WriteFrames模塊
該模塊的設(shè)計遵循與ReadFrame中相同的方法。主要區(qū)別在于準備ICAP寫入配置存儲器所需的配置命令。當表1中定義的Op sel輸入為“010”且啟動信號有效時,WriteFrames模塊被激活。要達到最大吞吐速度,要寫入的幀的首選源是BRAM。如果幀位于AC ICAP的BRAM中,則每個時鐘周期都有一個32位字。
由于此模塊通常與ReadFrames結(jié)合使用,因此要寫入的幀已經(jīng)被讀取并存儲在BRAM上。然后,WriteFrames模塊使用相同的存儲空間,如圖6所示,其中ReadFrames放置了回讀幀。
與ReadFrames模塊需要考慮一個虛擬幀的方式相同,在每個寫幀例程中,虛擬幀應該在進程的最后部分發(fā)送到ICAP。因此,數(shù)據(jù)幀從BRAM地址= 42開始并在地址41 *(Nf + 1)。發(fā)送數(shù)據(jù)幀后,應立即跟隨虛擬幀。為此,起始地址更改為1,并在發(fā)送41個字(1幀)時結(jié)束。地址0處的額外字不用于寫入過程。
我們生成Op完成輸出以指示寫入過程的結(jié)束。有必要保證ICAP任務正確完成。發(fā)送完所有字后,必須發(fā)送DESYNC命令并禁用ICAP。當ICAP接收并處理DESYNC命令時,操作完成。當輸出端口O從0xDF變?yōu)?x9F時觀察到。該過程具有6個時鐘周期的延遲,與輸入CE上的值無關(guān)。
4.3 DPR of LUTs with LUT2Frames 模塊
LUT2Frames模塊通過將LUT參數(shù)轉(zhuǎn)換為幀表示來允許LUT的動態(tài)部分重配置。如第3節(jié)所述,LUT的特征在于坐標(x,y,Bel)和INIT值。 LUT2Frames模塊,如圖8所示,執(zhí)行兩個主要任務:(1)將x,y,Bel坐標轉(zhuǎn)換為FAR格式,以及(2)將INIT(64位)LUT函數(shù)轉(zhuǎn)換為4個16位的字。
x,y,Bel輸入合并為一個32位字,當設(shè)置Start輸入時,LUT2Frames模塊使用INIT值?;谧鴺酥?,生成一個具有幀地址寄存器(FAddr)格式的32位字,以定義讀寫開始的幀。此外,x,y和Bel值確定字偏移量,它是需要操作的每個幀(2-41個字中的第一個)的具體字。
從32位字開始,只有16位對應于特定的LUT。因此,信號msb lsb指示應修改32位字的哪一部分:0為字的LSB部分(LUT-A或LUT-C) 16個MSB(LUT-B或LUT-D)為1。
與先前的處理并行地,LUT2Frames模塊生成四個16位字(fword1???fword4),其對應于變換并適應四個幀的INIT值。
幀位置和尋址的所有復雜性對用戶是透明的。 LUT2Frames模塊實現(xiàn)所有轉(zhuǎn)換并計算適當?shù)牡刂泛蛢?nèi)存管理,以便在需要修改整個設(shè)備中的任何LUT時允許用戶進行簡單操作。
當需要進行LUT修改時,執(zhí)行由FSM控制的步驟,如圖9所示。該過程由啟動信號觸發(fā);然后,激活LUT2Frames模塊。使用此空閑備份字生成的值修改幀寫入幀讀取幀LUT2幀模塊,從FAddr開始的4幀被讀取并存儲在BRAM(讀取幀)中。字偏移和msb lsb表示應修改的特定字。備份這4個字(備份字),使用LUT2Frames生成的四個字進行修改,并復制回BRAM。此時,BRAM包含具有新字的幀,并且WriteFrames模塊執(zhí)行對應于LUT的4幀的寫入。
Recover LUT例程使用在備份字階段獲得的四個備份值將LUT恢復到其先前的配置值??紤]圖9,它僅執(zhí)行LUT修改例程的最后兩個步驟。
它修改了BRAM上的4個幀,然后通過WriteFrames模塊發(fā)送這些幀以將LUT恢復到其先前的INIT值。此例程在需要在修改LUT之前恢復LUT的先前功能的應用程序中非常有用。通過遵循這種方法,我們避免再次讀取四幀,因為這些已經(jīng)在BRAM上。
使用ChipScope Pro Debugger [29]驗證了控制器的正確操作。圖10顯示了LUT修改過程的詳細信息。我們指定了要修改的LUT的x,y,Bel和INIT值。圖10中所示的步驟可以在圖10中標識。LUT2Frames模塊僅需要兩個時鐘周期,并且它生成的信息用于尋址四個幀以讀取和修改這些幀中的四個特定字。
4.4 Load Partial Bitstreams模塊
該模塊遵循類似于第2節(jié)中描述的方法,關(guān)于通過加載部分比特流來加速部分重新配置。負載部分比特流模塊執(zhí)行三個主要任務:(1)從閃存加載部分比特流,(2)將部分比特流從閃存復制到BRAM,以及(3)從BRAM加載部分比特流。為此,該模塊包括一個存儲器訪問控制器,用于從閃存中讀取部分比特流。因此,從閃存讀取的數(shù)據(jù)可以直接發(fā)送到ICAP I端口,也可以復制到內(nèi)部BRAM中。當部分比特流在BRAM上時,可以達到ICAP上的最大配置速度。如果部分比特流在外部存儲器上,則重新配置時間取決于訪問存儲器的延遲。在這種情況下,我們使用Intel StrataFlash存儲器28F256P30,它需要在100MHz的26個時鐘周期才能得到32位字。
可以放置在BRAM上的部分比特流的大小受控制器上可用的BRAM存儲器的限制。從AC ICAP中存在的7-36Kbit BRAM,我們保留了2800字節(jié)來執(zhí)行LUT修改和幀任務。因此,可放置的部分比特流的最大大小為28.7KB。它可以增加,因為FPGA包含更多的BRAM(LX110T器件中有148個)但它取決于應用限制。
部分比特流是按照標準Xilinx流程生成的;它使用的是PlanAhead或bitgen工具。這些配置文件包括關(guān)于設(shè)備類型的標題信息,配置數(shù)據(jù)的大小,比特流的生成的日期和時間等。我們調(diào)整部分比特流以從頭部移除不必要的信息,并且僅保留與不包括頭部的部分比特流的大小(以字節(jié)為單位)對應的最后的頭部字段。因此,我們的控制器首先讀取包含部分比特流大小的字,并使用該信息計算從內(nèi)存中讀取的字數(shù)(閃存為16位字,BRAM為32位字)。使用這種方法,唯一需要的參數(shù)是部分比特流所在的初始地址。
控制器自動計算結(jié)束地址并執(zhí)行讀取過程。根據(jù)輸入Op sel選擇的操作,數(shù)據(jù)將發(fā)送到ICAP或BRAM。以類似的方式,當Op sel設(shè)置為“111”時,該模塊配置ICAP控制信號和BRAM地址以允許高吞吐量部分重新配置。
5. AC_ICAP適用于片上處理器
為了使控制器能夠連接到基于處理器的設(shè)計,它適用于MicroBlaze系統(tǒng)使用的外圍本地總線和快速單工鏈路接口。為此,AC ICAP被認為是具有圖5中所示的I / O端口的黑盒子,并且這些端口適用于各自的總線。這種方法提供了更大的靈活性,因為控制器可以容易地從處理器命令。我們創(chuàng)建了一系列適用于每個接口的函數(shù),以執(zhí)行表1中所示的任務。這些函數(shù)(如代碼1所示)使用XilinxAPI中的特定例程來訪問PLB和FSL接口。
代碼1、驅(qū)動AC ICAP IP的功能如下:
StartAddr參數(shù)指的是應根據(jù)op sel值進行調(diào)整的唯一輸入。在讀取和寫入幀的情況下,它對應于初始幀的地址(FAddr)。對于其他功能,它是存儲數(shù)據(jù)的存儲器地址。 NumFrames是要讀取或?qū)懭氲膸瑪?shù),x,y bel,INIT是控制單個LUT的參數(shù)。這些是命令AC ICAP控制器所需的唯一值,因為它在內(nèi)部執(zhí)行所有操作,例如將x,y bel和INIT轉(zhuǎn)換為幀格式,在讀取部分比特流的大小后計算結(jié)束地址,等等。
5.1 PLB IP
PLB總線用于將外圍設(shè)備連接到MicroBlaze處理器。以VHDL設(shè)計的原始AC ICAP在PLB包裝器中實例化以生成定制PLBAC ICAP IP??刂破鞯妮斎牒洼敵鲞B接到PLB總線的信號,然后處理器可以使用寄存器地址訪問它們。因此,PLB AC ICAP可以連接到任何基于MicroBlaze的系統(tǒng),如圖11所示。該架構(gòu)包括閃存,其中修改可重配置區(qū)域的全部和部分比特流位于其中。通過將閃存的AC ICAP連接定義為外部端口,也可以在IP設(shè)計中執(zhí)行與閃存的直接連接。一旦包含在EDK的硬件設(shè)計中,處理器中運行的軟件就能夠通過使用代碼1中列出的功能來控制PLB AC ICAP外設(shè)。因此,部分重配置相關(guān)任務使用代碼1中指定的任何功能。并監(jiān)視輸出操作,直到它變高為確認任務已完成。
5.2 FSL Coprocessor
Fast Simplex Link是MicroBlaze處理器的一個接口,允許包含具有高執(zhí)行優(yōu)先級的專用硬件例程,因此意味著與處理器通信的低延遲。在這種方法中,我們采用了類似于[13]中提出的解決方案,以便由于總線延遲而獲得最小的控制器性能下降。因此,基于VHDL的AC ICAP適用于FSL接口,可以作為協(xié)處理器輕松連接,從而利用處理器的所有靈活性,但利用ICAP相關(guān)任務中的硬件加速。圖12顯示了使用FSL AC ICAP協(xié)處理器的系統(tǒng)。
FSL AC ICAP協(xié)處理器的訪問方式與PLB AC ICAPIP中考慮的方式類似,即通過代碼1中提供的功能集合。主要區(qū)別在于這些例程的類型功能需要todrive theFLS。在這種情況下,我們將阻塞例程putfsl和getfsl與Xilinx API結(jié)合使用,因為我們認為重新配置任務具有高優(yōu)先級。
6.在較新的設(shè)備系列中使用AC_ICAP
為了驗證7系列器件中的控制器,我們使用配備Kintex7 XC7325T FPGA的KC705板[30]。
該FPGA包含50,950個Slice,在每個Slice內(nèi)部,有4個6輸入LUT和8個FF .445個BRAM對應2002 KB,比特流大小為10.9MB。為了使針對Virtex-5設(shè)計的AC ICAP適應7系列器件,需要進行某些更改。主要差異總結(jié)如下:
?。?)7系列系列中每幀的字數(shù)為101而不是41(Virtex-5)。這是因為7系列FPGA中的CLB列高50寬1寬,這意味著CLB列中存在100個Slice。同樣,HCLK行的數(shù)量也不同;對于這個特定的設(shè)備,它是7(3頂部和4底部)。
(2)開始讀或?qū)懙膸牡刂酚蒄AR寄存器定義。對于7系列,該寄存器使用32位中的26位,而在Virtex5 FAR中,它使用24位。這是由于FPGA的大小增加。
?。?)與Virtex-5相反,對于7系列,在讀取幀任務開始時不需要額外的字。因此,可以根據(jù)對任何7系列FPGA有效的(2)來計算從這些設(shè)備讀取/寫入的字數(shù)(Nwords 7),因為在這些設(shè)備中所有配置幀具有相同的大小。偽幀由幀數(shù)(Nf)加1表示:
(4)指示在LUT-DPR過程中應該修改幀上的特定字的字偏移現(xiàn)在具有0到100的范圍。對于Virtex-5,它在0到40之間變化。以類似的方式,跳過列(包含不同于CLB的資源的列:BRAM,DSP I / O)和主要列編號需要更新.Kintex7中的第一列的主要地址為2,而它為1 Virtex-5的。
(5)在7系列中,原始ICAPE2沒有BUSY輸出。相反,我們應該在CE斷言后考慮3個時鐘周期來獲得有效數(shù)據(jù)。
?。?)WriteFrames模塊還需要進行一些更改。在Virtex-5中,可以通過設(shè)置配置寄存器(COR0-bit28)并在每次修改FAR時將值0xDEFC加載到CRC寄存器來繞過CRC計算。在7系列中,此類寄存器不存在;默認情況下,新的控制寄存器(COR1-bits15-16)設(shè)置為允許在計算CRC后對系統(tǒng)進行連續(xù)操作,因此刪除了這些步驟。
?。?)該電路板中可用的閃存與Virtex-5中的閃存類型相同,但由于尺寸不同,閃存控制器經(jīng)過修改后還包含兩條額外的地址線。
配置CLB列所需的幀數(shù)保持不變(36),包含LUT信息的特定幀也是如此。我們使用22個BRAM塊占用與Virtex-5類似的百分比(5%)。
一旦在AC ICAP中執(zhí)行了所提出的更改,它就在Kintex7 FPGA中實現(xiàn),并使用它支持的所有操作進行測試。在圖13中,我們再次提供了一個LUT的DPR細節(jié),因為它涉及控制器中可用的各種任務。
這個新的AC ICAP適用于AXI接口,因為它用于所有newXilinx系列。該IP被標識為AXI AC ICAP,并支持代碼1中提供的適用于AXI API的相同功能。
基于前面的描述,我們有不同的控制器變體來評估:AC ICAP,獨立硬件版本; PLB AC ICAP和AXI AC ICAP,分別適用于PLB和AXI總線;和FSL AC ICAP,用作協(xié)處理器。我們使用PlanAhead 14.7和Vivado 2015.3來定義不同大小的可重新配置分區(qū)(從1到10個CLB列)并生成不同的部分比特流。
對于基于Xilinx的控制器,我們實現(xiàn)了如圖11所示的架構(gòu),但我們不是使用PLB AC ICAP,而是添加了XPS HWICAP或AXI HWICAP,其參數(shù)可以實現(xiàn)重配置吞吐量的最佳性能(寫入FIFO深度= 1024,讀FIFO深度= 256,并啟用FIFO類型)。對于這兩種情況,還包括Xilinx閃存控制器,以訪問位于該存儲器中的部分比特流。在這樣做時,我們可以獲得準確的比較,因為我們使用相同的工具版本和綜合選項。
7. 實驗結(jié)果
本節(jié)總結(jié)了有關(guān)AC ICAP控制器的各種版本的重新配置速度和資源利用率的主要結(jié)果。我們認為比較用于Virtex5的Xilinx XPS HWICAP和用于Kintex7的AXI HWICAP的主要參考,因為這些是報告的替代方案中的一個,支持大多數(shù)DPR任務的那些。我們考慮到,對于配置多達4個CLB列的部分比特流,可以將它們復制到BRAM中,因為Virtex-5限制為28.7KB,Kintex7限制為99 KB。為了記錄AC ICAP(獨立版本)的時間性能,使用了ChipScope Pro。對于適用于處理器接口的版本,系統(tǒng)中包含的定時器用于記錄特定任務所需的時鐘周期數(shù)。這些數(shù)字在表2中報告。這里,我們想提一些關(guān)于Kintex7 FPGA獲得的值的問題.AXI HWICAP包含的LUT功能不支持7系列。使用最新版本的工具進行實驗(Vivado 2015.3和驅(qū)動程序hwicap v10 0),僅支持Virtex6和以前的設(shè)備,我們無法修改它們,因為源代碼不可用。功能對于使用AXI HWICAP的讀寫幀,需要修改一些頭文件,因為它們會出現(xiàn)一些錯誤的值。文件xhwicap ih:使用7系列中的Virtex6值,但這些值不應該相同。例如,聲明兩個族的幀中字的數(shù)量是81.但是對于7系列族,正確的值是101. FAR創(chuàng)建時會發(fā)生類似的情況。驅(qū)動程序使用一些對Virtex-6有效但不對Kintex7有效的參數(shù)創(chuàng)建FAR,并對這些參數(shù)進行了修改以獲得正確的操作。
從表2可以看出,據(jù)我們所知,使用AC ICAP的LUT的重新配置時間是報告最快的替代方案。與Virtex-5中的XPS HWICAP相比,它意味著PLB AC ICAP的速度提升超過320倍,這是最慢的版本,獨立的AC ICAP改善了LUT的重配置時間超過380次。以類似的方式,考慮到Virtex-5和Kintex7,讀寫幀任務的加速分別經(jīng)歷了超過18次和21次的改進。
對于Virtex-5和Kintex7,來自BRAM的負載部分比特流(對于AC ICAP)的重新配置吞吐量分別為380.47和381.03 MB / s。它接近400MB / s的最大支持吞吐量和[15,20]上的報告值。對于[15]報告的工作,應該指出的是,估計的價值并不是在實際執(zhí)行中衡量的;因為該控制器不包括BRAM。我們的控制器與400 MB / s值的偏差是由于ICAP開始讀取BRAM和處理DESYNC命令(0x0D)所需的額外時鐘周期。對于每個與ICAP相關(guān)的任務,我們認為在確認DESYNC命令時它就完成了。它是通過監(jiān)視ICAP的O端口來完成的,該端口在Vinterex-5中從0xDF變?yōu)?x9F,在Kintex7中從0xFFFFFFDB變?yōu)?xFFFFFF9B,以確認完成任務是否成功。這意味著在最后一個數(shù)據(jù)發(fā)送到的后6個額外的時鐘周期ICAP。
對于PLB,AXI和FSL版本,由于接口的延遲,時間會有一些降級,但在所有情況下,它們對來自閃存的負載部分比特流提供了超過11倍的改進。
將部分比特流從閃存復制到BRAM的時間與從閃存加載部分比特流所需的范圍相同。這些存儲在BRAM上,而不是向ICAP發(fā)送數(shù)據(jù)。因此,當應用程序可以在執(zhí)行開始之前(例如,在引導時)將部分比特流復制到BRAM時,它尤其有用。
關(guān)于資源利用率,表3列出了AC ICAP控制器的每個模塊的詳細信息。應該注意的是,AC ICAP包括閃存控制器,而XPS HWICAP和AXI HWICAP則不是這種情況。表4總結(jié)了控制器的各種選項所需的資源。 AC ICAP的PLB,AXI和FSL版本的額外資源是由于使控制器適應這些接口所需的包裝邏輯??梢钥闯?,資源需求最大的方法使用了5%的Slice,這可以被認為是合理的大小,因為所有操作都是在硬件中完成的。
最后,在表5中,我們比較了完整的基于MicroBlaze的架構(gòu)所需的資源,包括不同版本的ICAP控制器。我們可以看到,使用適用于PLB和FSL的AC ICAP的系統(tǒng)平均需要比XPS HWICAP替代方案多3%的Virtex-5 FPGA資源。這是為了加速所有重新配置任務而支付的區(qū)域開銷,例如當使用FSL AC ICAP時,LUT的重新配置時間在356x中得到改善。當我們看到Kintex7的數(shù)據(jù)時,面積百分比隨著設(shè)備的增大而降低。
因此,隨著要管理的配置數(shù)據(jù)量變得越來越大,任務的加速變得越來越重要,但ICAP原語支持的速度和總線寬度自Virtex-4生成(32位@ 100MHz)以來保持不變。從提供的數(shù)據(jù)中,我們可以總結(jié)出最佳的性能區(qū)域權(quán)衡由AC ICAP給出,它使用3%的FPGA資源但在LUT DPR中提供380x的加速。
使用該方法的LUT的動態(tài)部分重新配置提供了以下優(yōu)點:對于要執(zhí)行的每個修改,它不需要預先計算的部分比特流。它允許使用任何布爾值修改運行時LUT,并且不受內(nèi)存中部分比特流可用性的限制。這種精細的部分運行時重新配置在諸如故障注入平臺和密碼實現(xiàn)的應用中具有越來越大的相關(guān)性,其中硬件可以在LUT級別被修改以避免某些類型的攻擊。這些細粒度修改的案例應用將在下一節(jié)中介紹。
8. 用于LUT評估AES模塊的AC_ICAP
在本節(jié)中,我們使用AC ICAP來評估[31]中提供的AES模塊。我們的想法是找到一種方法來識別LUT的關(guān)鍵配置值。有了這些信息,就可以設(shè)計出針對外部攻擊的對策。例如,可以采用這種方法來修改某些LUT的邏輯行為,以在不停止系統(tǒng)的情況下產(chǎn)生錯誤值。在這樣做時,AES可以持續(xù)工作,給出錯誤的正確操作感,可以將其用作對抗諸如差分功率分析之類的攻擊的對策。
如果使用部分比特流方法來修改LUT,則每個LUT tomodify都需要部分比特流。這些應該在設(shè)計時生成并復制到存儲器中。因此,LUT的所有可能修改都應該在設(shè)計時定義,一旦系統(tǒng)運行,很難包含任何變化,例如新的LUT修改,因為它意味著生成新的部分比特流的耗時過程。 AC ICAP支持的LUT的DPR的優(yōu)點是不需要部分比特流,并且可以動態(tài)地執(zhí)行任何邏輯修改。為了評估這種方法,我們使用偽隨機數(shù)發(fā)生器(PRNG)來產(chǎn)生64位配置存儲器,以便對要修改的LUT進行修改。我們不關(guān)注AES或PRNG的細節(jié)。我們的目標是提供一種方法來輕松識別LUT及其關(guān)鍵值,以用于評估和設(shè)計關(guān)鍵模塊。
該系統(tǒng)的架構(gòu)如圖14所示,并在Virtex-5 FPGA中實現(xiàn)。我們包括兩個AES模塊的副本,用于在線比較結(jié)果,BRAM存儲LUT的信息。 AES的單個副本需要8360 FF和13952 LUT。 DUT副本在區(qū)域中受到約束,并定義為要使用的分區(qū),以保持在初始實現(xiàn)中定義的路由。定義了88個CLB列(14080 LUT)的區(qū)域來放置AES。由于我們可以在其他設(shè)計中重用已實現(xiàn)的分區(qū),因此使用LUT的DPR獲得的值對于不同的實現(xiàn)仍然有效。由FSM控制的系統(tǒng)使用PRNG獲得隨機配置值以配置LUT,并且AC ICAP用于通過使用Slice的x,y坐標來修改DUT區(qū)域上的LUT。一旦修改了LUT,就會對黃金和DUT組件應用一些測試臺輸入,并分析輸出以確定LUT修改是否產(chǎn)生錯誤值。在應用所有輸入模式之后,對這種修改的效果進行分類。如果產(chǎn)生錯誤值,則存儲LUT地址和配置值。 LUT恢復到先前的值并測試新的LUT。如果沒有產(chǎn)生錯誤的值,可以繞過它或使用新的配置值進行測試。因此,這種方法允許靈活的替代方案來徹底地或以更輕松的方式評估系統(tǒng)。然后,使用存儲在BRAM中的信息來確定在系統(tǒng)受到攻擊時可以采用哪些LUT及其相關(guān)配置值來有意修改邏輯功能。
9.結(jié)論和未來工作
我們介紹了AC ICAP,這是一種在Virtex-5和Kintex7 FPGA中驗證的新ICAP控制器。它能夠加載部分比特流,讀取和寫入幀,以及修改FPGA中的任何LUT,在最后一種情況下無需預生成的部分比特流。該控制器適用于使用PLB,F(xiàn)SL和AXI鏈路的嵌入式處理器系統(tǒng)。與Virtex-5 FPGA的XPS HWICAP功能相比,獨立于處理器的版本的重配置速度分析顯示LUT的運行時重新配置提高了380多倍。由于我們的控制器完全采用硬件實現(xiàn),因此顯然需要更多資源,但無論如何它占據(jù)了XC5VLX110T器件上可用元件的5%以上。因此,AC ICAP提供了一個完整的高速解決方案,可以執(zhí)行多種動態(tài)部分重配置任務??山邮艿腇PGA足跡。它被用于設(shè)計AES模塊,可以修改特定的LUT作為可能的攻擊對策。
作為未來的工作,我們計劃使用DDR控制器擴展AC ICAP,以加速重新配置任務,當這些任務基于預先計算的部分比特流由于其大小而無法復制到BRAM中時。因此,DDR存儲器是克服BRAM可用限制的替代方案。