康禮煜,賈一平,高麗江,楊海鋼,,4
(1.中國科學(xué)院空天信息創(chuàng)新研究院,北京 100190;2.中國科學(xué)院大學(xué),北京 100049;3.北京中科勝芯科技有限公司,北京 100044;4.山東產(chǎn)研集成電路產(chǎn)業(yè)研究院,山東濟(jì)南 250001)
隨著集成電路的設(shè)計(jì)復(fù)雜度以及設(shè)計(jì)要求大幅增長,為了提升片上系統(tǒng)(System-on-Chip,SOC)的靈活性以應(yīng)對各類計(jì)算任務(wù),可重構(gòu)片上系統(tǒng)這一概念被提出。其中基于嵌入式現(xiàn)場可編程門陣列(embedded Field Programmable Gate Array,eFPGA)的可重構(gòu)系統(tǒng)被廣泛應(yīng)用于人工智能、自動駕駛、物聯(lián)網(wǎng)終端以及航空航天等相關(guān)領(lǐng)域[1-4]。
目前,基于eFPGA的可重構(gòu)系統(tǒng)主要是將eFPGA掛載在總線上作為協(xié)處理器,以提升系統(tǒng)性能;或者將eFPGA 模塊與處理器內(nèi)部結(jié)構(gòu)耦合,以支持自定義指令集的擴(kuò)展[5-7]。該文所討論的是如何在原有架構(gòu)基礎(chǔ)上,通過架構(gòu)調(diào)整以及使用碼流壓縮傳輸?shù)姆椒▋?yōu)化系統(tǒng)性能。
該文提出的可重構(gòu)系統(tǒng)由開源的RISCV 處理器E203[8]與eFPGA 子系統(tǒng)組成。eFPGA 子系統(tǒng)由利用開源平臺OpenFPGA[9]設(shè)計(jì)生成的eFPGA 模塊及相關(guān)的重構(gòu)邏輯電路和交互邏輯電路組成。電路架構(gòu)如圖1 所示。
圖1 電路架構(gòu)圖
整個系統(tǒng)的工作模式可以分為重構(gòu)模式和交互模式。在重構(gòu)模式中,由于APB 總線的傳輸速率比AXI 總線慢[10],且碼流數(shù)據(jù)量較大,為了加快碼流寫入速度,故選擇AXI 總線用于碼流傳輸;而由于APB總線傳輸數(shù)據(jù)的功耗比AXI 總線低[10],且一般應(yīng)用場景不需要太快的數(shù)據(jù)交互速度,所以在數(shù)據(jù)交互時選擇使用APB 總線。
在配碼過程中還面臨著另一問題,即如果碼流數(shù)據(jù)是處理器通過AXI 總線直接配置到eFPGA 中,由于AXI 總線傳輸數(shù)據(jù)需要握手等相關(guān)步驟,這會使重構(gòu)時間加長,所以在該系統(tǒng)中添加了碼流存儲器,使配碼階段可進(jìn)行連續(xù)配碼;同時為了使整個系統(tǒng)更加靈活,將碼流存儲器的存儲空間設(shè)計(jì)為三個常用電路大小,使重構(gòu)更加便捷。
若需要重構(gòu)存儲器中不包含的電路,則需要更新存儲器中的碼流,由于碼流數(shù)據(jù)龐大,所以在處理器通過總線頻繁寫入的過程中就會產(chǎn)生較大的能耗。為了解決這一問題,提出了碼流壓縮傳輸?shù)姆椒?,即在碼流傳輸前先將其壓縮,傳輸后在電路中先通過解壓縮(Decompression)模塊對其進(jìn)行解壓再寫入存儲器中,由于傳輸碼流數(shù)據(jù)需要經(jīng)歷較長的數(shù)據(jù)傳輸鏈路,所以完整的碼流傳輸過程中消耗的能耗相較于該文所提出的增加解壓縮模塊所增長的能耗要大得多,相關(guān)的實(shí)驗(yàn)數(shù)據(jù)在后文中展示。
在eFPGA、總線與碼流存儲器之間,還有一個至關(guān)重要的配置控制(CONFIG-CONTROL)模塊。該模塊主要分為控制和配置兩部分,配置部分主要用于在配碼階段將碼流從存儲器中讀出并寫入eFPGA的配置端口;而控制部分主要分為三個功能模塊:
1)控制eFPGA 進(jìn)行反復(fù)重構(gòu)的控制模塊。
2)解譯配置寄存器參數(shù)的譯碼模塊。
3)由于每次解壓的碼流數(shù)量不一致,所以還需要設(shè)計(jì)碼流的寫控制模塊。
碼流映射成功之后,處理器通過APB 總線與eFPGA 模塊進(jìn)行交互,同時在AXI 總線地址上預(yù)留好相關(guān)寄存器地址,以便在APB 總線傳輸速率不符合需求時,可以通過AXI 總線進(jìn)行數(shù)據(jù)傳輸。此外,eFPGA 還引出了四個中斷交互端口,以便應(yīng)用電路可以觸發(fā)中斷以避免輪詢造成的空轉(zhuǎn)消耗。
eFPGA 指可以作為IP 嵌入到片上系統(tǒng)的現(xiàn)場可編程門陣列核[7],其既具有FPGA 的可編程特性,又規(guī)避了FPGA 的功耗高與面積大等缺點(diǎn),所以將其嵌入SOC 中可以將ASIC(Application Specific Integrated Circuit)的高性能與FPGA 的可編程特性結(jié)合起來,使整個系統(tǒng)更加靈活可靠[1]。該文所設(shè)計(jì)的eFPGA模塊是基于OpenFPGA 的K6N10 結(jié)構(gòu)[11]設(shè)計(jì)產(chǎn)生的由重復(fù)邏輯塊構(gòu)成的島型陣列,架構(gòu)如圖2 所示。
圖2 eFPGA模塊架構(gòu)圖
重復(fù)邏輯塊是由可編程邏輯塊(Configurable-Logic-Blocks,CLB)、連接盒(Connection-Box,CB)、開關(guān)盒(Switch-Box,SB)以及互連線(Interconnect)構(gòu)成。其中,每個CLB 模塊由十個邏輯單元(Logic-Element,LE)及相關(guān)配置電路構(gòu)成,用以實(shí)現(xiàn)可編程功能;CB 和SB 模塊都是由多路開關(guān)(Multiplexer,MUX)和配置存儲器(CRAM)構(gòu)成,以連接模塊之間的布線通道,具體電路如圖3、圖4 所示。其中,CB模塊用于CLB 和通道之間的連接,SB 模塊用于不同通道之間的連接;最終構(gòu)成一個20×20 陣列規(guī)模的eFPGA 模塊,其可以映射4 000 LE 規(guī)模以下的電路。
圖3 CLB模塊電路圖
圖4 CB、SB模塊電路圖
文中的eFPGA 模塊是利用開源的OpenFPGA 平臺通過設(shè)計(jì)相關(guān)的架構(gòu)描述文件以及Versatile-Place-and-Route(VPR)描述文件生成相應(yīng)的軟核[11],同時也可以利用該平臺生成相應(yīng)eFPGA 模塊的碼流。碼流的產(chǎn)生過程如圖5 所示,主要步驟是先設(shè)計(jì)好應(yīng)用電路的HDL 代碼,仿真驗(yàn)證通過后利用Yosys 對其進(jìn)行綜合,再將其輸入到VPR 進(jìn)行裝箱、布局和布線,最后利用OpenFPGA 平臺產(chǎn)生相應(yīng)的碼流[9]。
圖5 OpenFPGA流程圖
eFPGA 配碼過程中傳輸?shù)拇a流數(shù)據(jù)的每一比特位都有其獨(dú)特含義,所以使用的壓縮算法必須是無損算法。在1977 年由Abraham 和Jacob 所提出的LZ77 算法具有壓縮率較好和復(fù)雜度適中的優(yōu)點(diǎn),同時是基于字典編碼的無損壓縮算法[12],所以該算法的解壓縮過程適合用電路實(shí)現(xiàn),故在該文中選擇了LZ77 算法作為碼流壓縮算法。
該算法的主要原理是利用滑窗進(jìn)行相關(guān)的字符匹配,利用指針來表示壓縮的字符串?;敖M成如圖6 所示,滑窗由字典窗口和編碼緩沖區(qū)組成,字典窗口用于保存等待匹配的序列,編碼緩沖區(qū)則保存等待編碼的序列[12];指針由偏移量和匹配長度組成,偏移量是當(dāng)前序列到字典窗口中匹配序列的距離,匹配長度則是重復(fù)序列的個數(shù)[12-14]。
圖6 壓縮和解壓縮過程
壓縮步驟是先讀取編碼緩沖區(qū)的序列并在字典窗口中查找能匹配到的最長序列,并輸出指針。如圖6所示,字典窗口中能找到編碼緩沖區(qū)最長的重復(fù)序列為1011,且偏移量為5,故輸出的指針為(5,4)。
解壓縮是壓縮的逆過程。如圖6 所示,左側(cè)滑窗中的數(shù)字是10110,且此時指針中偏移量為4,匹配長度為3,由此可得解壓出的數(shù)據(jù)是011,填入數(shù)據(jù)并移動滑窗至末尾,解壓完成。
在電路實(shí)現(xiàn)過程中,由于滑窗與電路中的移位寄存器有共通之處,故選擇移位寄存器來實(shí)現(xiàn)滑窗功能,并使用數(shù)據(jù)選擇器陣列來解壓指針內(nèi)容,以控制移位寄存器中的移位操作和輸出相應(yīng)的解壓數(shù)據(jù),解壓電路如圖7 所示。
圖7 解壓電路
軟硬件協(xié)同設(shè)計(jì)是實(shí)現(xiàn)可重構(gòu)系統(tǒng)中必不可少的一步,因?yàn)閑FPGA的多次重構(gòu)以及處理器與eFPGA的數(shù)據(jù)交互是通過軟件控制實(shí)現(xiàn)的。其主要的應(yīng)用場景如下:
1)通過軟件控制進(jìn)行多次配碼,以實(shí)現(xiàn)在有限的eFPGA 資源上實(shí)現(xiàn)更大規(guī)模的電路或者實(shí)現(xiàn)多種不同的電路功能。
2)面對復(fù)雜任務(wù)時,將適合軟件實(shí)現(xiàn)的分配給處理器實(shí)現(xiàn),適合硬件實(shí)現(xiàn)的分配給eFPGA 實(shí)現(xiàn),最后結(jié)合起來,以實(shí)現(xiàn)軟硬協(xié)同加速。
整個系統(tǒng)的工作流程如圖8 所示。
圖8 工作流程
其主要步驟如下:
1)設(shè)計(jì)電路并在OpenFPGA 生成碼流。
2)利用LZ77 算法壓縮碼流。
3)將壓縮后的碼流以及配置交互信息按需寫到軟件設(shè)計(jì)中,并通過工具鏈編譯生成可執(zhí)行文件。
4)將可執(zhí)行文件翻譯成指令流寫入處理器中并執(zhí)行相關(guān)指令。
5)處理器通過AXI 總線將壓縮碼流寫入到解壓縮模塊進(jìn)行解壓,并通過配置控制模塊寫入相應(yīng)的存儲空間。
6)通過軟件寫入相關(guān)配置信息,讀出相應(yīng)碼流,并將其寫入eFPGA 中以實(shí)現(xiàn)該電路,最后通過APB/AXI 總線與之交互。
軟件設(shè)計(jì)環(huán)境是NucleiStudio IDE 2021.02,硬件設(shè)計(jì)及仿真環(huán)境是VCS2017.12 和VERDI2016.06。該實(shí)驗(yàn)實(shí)現(xiàn)了密鑰大小為128 bit 的AES 算法中的Electronic-Codebook-Book(ECB)加密模式。該模式將明文分割成多個數(shù)據(jù)塊,各個數(shù)據(jù)塊分別進(jìn)行加密生成各自的密文塊,最終拼接成完整的密文[15-16]。
主要加密步驟是字節(jié)代換、行移位、列混合和輪密鑰加四個部分進(jìn)行迭代操作。在使用eFPGA 實(shí)現(xiàn)該算法時,整個加密過程只使用了21 個周期,且每次重構(gòu)只需1 630 個周期。
在軟件實(shí)現(xiàn)AES的過程中,利用函數(shù)__get_rv_cycle()獲取E203 處理器實(shí)現(xiàn)該算法的周期數(shù),如圖9 所示,打印出E203實(shí)現(xiàn)該算法用了68 873個周期,且加密結(jié)果與eFPGA 實(shí)現(xiàn)一致,eFPGA 比E203 實(shí)現(xiàn)AES 的速度提高了3 279 倍;而利用ZYNQ7020 上的Cortex-A9處理器實(shí)現(xiàn)該算法用了47 188 個周期,eFPGA 比Cortex-A9 提高了2 247倍,可見該算法在eFPGA中實(shí)現(xiàn)的加速效果顯著。
該系統(tǒng)在TSMC 28 nm 工藝條件下,通過Design Compiler 對電路采用Bottom-up 的策略進(jìn)行綜合;在200 MHz 的頻率下,時序依舊滿足要求。
在200 MHz 的頻率下,對E203 SOC 添加解壓模塊前與添加后這兩種情況使用Primetime-PX(PTPX)對碼流傳輸過程進(jìn)行功耗分析,結(jié)果表明,兩種情況的平均功耗分別為P1=47.9 mW 和P2=48.7 mW。
假設(shè)直接傳輸碼流的時間為T1,能耗為E1;添加解壓模塊之后碼流傳輸?shù)臅r間為T2,能耗為E2;由于碼流傳輸過程是勻速的,所以碼流的壓縮比ε=T2/T1。由能耗公式E=PT可得,當(dāng)壓縮比為98.36%時,E1=E2,此時碼流傳輸所消耗的能耗相等,所以當(dāng)重構(gòu)電路的壓縮比小于98.36%時,該系統(tǒng)相較于之前的架構(gòu)所消耗的能耗更少。以AES電路為例,由于其壓縮比約為68.20%,所以能耗與原先架構(gòu)的相比降低了:
圖10 展示了應(yīng)用電路規(guī)模從1~3 953 LE 的55個不同規(guī)模電路的碼流壓縮比,由圖可得,壓縮比與規(guī)??傮w上成正相關(guān),且當(dāng)規(guī)模小于3 900 LE 時,壓縮比小于98.36%,故使用碼流壓縮傳輸?shù)姆椒梢允筫FPGA 重構(gòu)的大多數(shù)電路在碼流傳輸過程中節(jié)約部分能耗,且由該圖數(shù)據(jù)可得該系統(tǒng)在配置過程中壓縮比最小約為17.9%,所以該方法最多可在配碼階段節(jié)省約82.1%的能耗。
圖10 電路規(guī)模與碼流壓縮比散點(diǎn)圖
該文討論了一種基于eFPGA 的可重構(gòu)系統(tǒng)設(shè)計(jì)。通過設(shè)計(jì)配置控制電路和碼流解壓縮電路等,使得系統(tǒng)變得更加靈活、節(jié)能及可靠。仿真結(jié)果表明,該系統(tǒng)不僅可以通過軟件控制eFPGA 進(jìn)行反復(fù)編程;還支持軟硬協(xié)同加速器的應(yīng)用開發(fā)。同時在采用TSMC 28 nm 工藝條件下對該系統(tǒng)進(jìn)行綜合,結(jié)果表明,該系統(tǒng)最高在200 MHz 的頻率下依舊滿足時序要求;利用PTPX 對其進(jìn)行功耗分析時發(fā)現(xiàn)當(dāng)重構(gòu)電路碼流壓縮比小于98.36%時,相比于傳統(tǒng)架構(gòu),該架構(gòu)可以起到節(jié)省能耗的作用。