陳慶宇,吳龍勝
(西安微電子技術(shù)研究所,陜西西安 710065)
一種細(xì)粒度流水化控制的FPU集成方法
陳慶宇,吳龍勝
(西安微電子技術(shù)研究所,陜西西安 710065)
解決了在RISC處理器中嵌入高精度FPU的問題,提出一種細(xì)粒度的基于集中控制和分段數(shù)據(jù)處理的擴(kuò)展雙精度FPU集成方法,該方法通過細(xì)分浮點(diǎn)指令的執(zhí)行狀態(tài),然后以執(zhí)行狀態(tài)為基本粒度生成與之對(duì)應(yīng)的FPU控制信息,最后根據(jù)控制信息分段處理目標(biāo)操作數(shù),并通過流水化的形式實(shí)現(xiàn)數(shù)據(jù)的回寫?;谝豢頢PARC V8型微處理器對(duì)上述方案進(jìn)行了設(shè)計(jì)實(shí)現(xiàn)、仿真驗(yàn)證及分析。結(jié)果表明,該FPU集成方法與公開文獻(xiàn)的方案相比,浮點(diǎn)指令關(guān)鍵路徑縮短61%,硬件消耗減小16. 9%,浮點(diǎn)計(jì)算效率提高1.7倍,可用于將擴(kuò)展雙精度FPU集成到RISC處理器中,并使兩者高效協(xié)同運(yùn)算。
FPU;協(xié)同運(yùn)算;細(xì)粒度;集中控制;流水回寫
當(dāng)前,飛行控制、工業(yè)應(yīng)用及多媒體技術(shù)等領(lǐng)域?qū)η度胧轿⑻幚砥鞯母↑c(diǎn)性能提出了更嚴(yán)苛的要求[1]。然而ARM、MIPS、SPARC V8、PowerPC等主流RISC微處理器僅支持單、雙精度的浮點(diǎn)運(yùn)算[2-5],若需要更高精度的數(shù)據(jù)則只能依靠軟件模擬浮點(diǎn)運(yùn)算,這種方式使處理器浮點(diǎn)性能降低數(shù)十倍[6-7]。為了滿足未來航空航天及工業(yè)領(lǐng)域?qū)?shù)據(jù)精度和計(jì)算性能的要求,國(guó)內(nèi)外研究學(xué)者近年已經(jīng)進(jìn)行了諸多研究。
文獻(xiàn)[8-9]介紹了超高精度FPU的實(shí)現(xiàn)方案,趙勇等[10]利用存儲(chǔ)在ROM中的浮點(diǎn)微指令碼將80位FPU嵌入到x86處理器內(nèi)部。微指令碼的讀取消耗處理器時(shí)間,降低浮點(diǎn)執(zhí)行效率,同時(shí)由于處理器體系結(jié)構(gòu)的差異,該方案很難移植到采用流水線技術(shù)的RISC處理器中。
文獻(xiàn)[7,11-12]降低了FPU與處理器的耦合度,將FPU作為片內(nèi)總線的從單元,以訪存指令控制FPU的計(jì)算過程。上述方案需要軟件干預(yù)運(yùn)算,增加了片內(nèi)總線的訪問沖突,造成單個(gè)FPU效率極低,雖然通過設(shè)計(jì)FPU專用的數(shù)據(jù)總線、改進(jìn)FPU與處理器交互方式等措施改善了計(jì)算效率,但結(jié)果依然不理想。
針對(duì)FPU嵌入RISC處理器的問題國(guó)內(nèi)外進(jìn)行了很多研究[8-12],但多數(shù)方案均需軟件干預(yù),且不支持超高精度FPU(80位或更高)在RISC處理器中的集成。針對(duì)此問題,本文提出一種細(xì)粒度的集中控制和分段處理方法,首先利用狀態(tài)機(jī)標(biāo)識(shí)浮點(diǎn)指令執(zhí)行狀態(tài),然后產(chǎn)生與執(zhí)行狀態(tài)對(duì)應(yīng)的FPU控制信息,并將回寫所需的控制信息通過流水段間寄存器向后級(jí)傳遞,最后在處理器的不同流水段依據(jù)控制信息對(duì)FPU輸出結(jié)果進(jìn)行分段寄存,并以流水化的形式將目標(biāo)操作數(shù)寫回寄存器堆。與其他研究相比,本文的主要貢獻(xiàn)如下:
1)首次公開了超高精度FPU植入RISC流水線處理器的方法,基于此方法實(shí)現(xiàn)了80位FPU的集成,且無須更改已有的處理器設(shè)計(jì)。
2)本文提出的集成方法全部硬件實(shí)現(xiàn),F(xiàn)PU與處理器核緊密耦合,避免了軟件干預(yù)浮點(diǎn)運(yùn)算,F(xiàn)PU執(zhí)行效率高。
本文介紹了高精度FPU集成方案的技術(shù)背景,緊接著提出一種面向RISC流水線處理器的、細(xì)粒度集中控制和分段處理數(shù)據(jù)的FPU集成方法,并基于該方法將一個(gè)擴(kuò)展雙精度的FPU(80位,Meiko接口,兼容Intel浮點(diǎn)協(xié)處理器)集成到一款5級(jí)流水的SPARC V8型微處理器中[13],最后將該方案的實(shí)現(xiàn)及驗(yàn)證結(jié)果與已有方案進(jìn)行了對(duì)比分析,并對(duì)本文進(jìn)行了總結(jié)。
本文提出的FPU集成方法在實(shí)現(xiàn)過程中僅在處理器不同流水段增加FPU的控制邏輯,避免了對(duì)處理器的訪存單元、冒險(xiǎn)檢測(cè)、異常處理等模塊的更改。下文以典型5級(jí)流水RISC處理器[14]為例說明本文所述FPU集成方法的控制算法及實(shí)現(xiàn),其中細(xì)粒度集中控制在處理器譯碼段(ID)實(shí)現(xiàn),流水化分段數(shù)據(jù)處理涉及流水線的執(zhí)行段(EX)、存儲(chǔ)訪問段(MA)及回寫段(WB)。
1.1細(xì)粒度控制原理
浮點(diǎn)指令(FPop,floating-point operate)主要實(shí)現(xiàn)浮點(diǎn)數(shù)據(jù)的類型轉(zhuǎn)換和算術(shù)運(yùn)算,其分類如表1所示,源和目標(biāo)操作數(shù)精度類型分別以S和D標(biāo)志,均包括整型I、單精度S、雙精度D及擴(kuò)展雙精度Q,SDDS指源操作數(shù)為雙精度且目標(biāo)操作數(shù)屬于單精度的浮點(diǎn)指令。根據(jù)操作數(shù)精度類型組合,將15種指令類型分為S、D、Q 3類,其中S類(single FPop)操作數(shù)位寬為32,D類(double FPop)使用至少一個(gè)64位操作數(shù)且無80位操作數(shù),Q類(quad FPOP)包含至少一個(gè)80位操作數(shù)。本文通過細(xì)分D和Q類指令的執(zhí)行狀態(tài),利用不同狀態(tài)以流水化形式實(shí)現(xiàn)寬位操作數(shù)在窄位浮點(diǎn)寄存器堆中的讀寫訪問。
表1 浮點(diǎn)指令操作數(shù)精度類型組合
利用狀態(tài)機(jī)解析浮點(diǎn)指令實(shí)現(xiàn)細(xì)粒度控制。如圖1所示,狀態(tài)機(jī)中4種S狀態(tài)與3類指令類型對(duì)應(yīng),X.S0屬于S、D和Q類指令的共享狀態(tài),在S0狀態(tài)下對(duì)指令類型細(xì)化,若當(dāng)前指令為single FPop或者存在數(shù)據(jù)或控制冒險(xiǎn),則維持S0狀態(tài);若當(dāng)前指令為double FPop,則流水使能信號(hào)有效時(shí)(hold= 1),進(jìn)入D.S1狀態(tài);若當(dāng)前指令為Quad FPop,則流水使能hold=1時(shí),進(jìn)入Q.S1狀態(tài);在非S0狀態(tài)處理器取指模塊阻止PC更新,防止新的指令進(jìn)入ID段??刂扑惴ㄒ詧D1狀態(tài)機(jī)狀態(tài)為基本粒度產(chǎn)生對(duì)應(yīng)的FPU控制信息,并將回寫信息向下一級(jí)流水傳遞,為后續(xù)的流水化分段數(shù)據(jù)處理提供依據(jù)。
圖1 細(xì)粒度控制狀態(tài)機(jī)
源操作數(shù)的控制算法如圖2a)所示,regfile[rs]指源操作數(shù)地址rs指定的寄存器堆中的數(shù)據(jù),圖中并未就FPU計(jì)算所需的2個(gè)源操作數(shù)進(jìn)行區(qū)分??刂扑惴ㄔ赟0狀態(tài)下等待流水線中冒險(xiǎn)情況消失,之后將regfile[rs]傳遞給FPU輸入fpui.rs的低32位;在S1狀態(tài)下,將regfile[rs+1]賦值給fpui.rs的中間32位;在S2狀態(tài)下,將regfile[rs+2]賦值給fpui.rs的高16位;同時(shí)控制算法依據(jù)源操作的精度類型,待源操作數(shù)準(zhǔn)備就緒后啟動(dòng)FPU運(yùn)算(fpui. start=‘1’)。
目標(biāo)操作數(shù)的讀寫控制算法如圖2b)所示,pipeline為流水段間寄存器的數(shù)據(jù)結(jié)構(gòu)??刂扑惴ㄒ?guī)定S2、S1及S0的等級(jí)依次降低,并利用高等級(jí)的狀態(tài)回寫FPU輸出的目標(biāo)操作數(shù)低位數(shù)據(jù)(低位數(shù)據(jù)對(duì)應(yīng)高地址)。在S0、D.S1、Q.S1和Q.S2狀態(tài)下比較目標(biāo)操作數(shù)和源操作數(shù)的位寬,利用位寬這一基準(zhǔn)條件產(chǎn)生FPU輸出結(jié)果回寫所需的寫使能和對(duì)應(yīng)地址等控制信息,并通過流水段間寄存器pipeline向后傳遞。結(jié)合表1以D.S1為例進(jìn)行說明,可進(jìn)入該狀態(tài)的5類指令中只有SDDI和SDDS的目標(biāo)操作數(shù)位寬小于源操作數(shù)位寬,根據(jù)利用高等級(jí)的狀態(tài)回寫FPU低位數(shù)據(jù)的原則,在D.S1狀態(tài)下置目標(biāo)操作數(shù)寫使能rd-wen有效并給出正確的寫地址。
圖2 基于狀態(tài)的細(xì)粒度控制機(jī)制
1.2流水化處理數(shù)據(jù)機(jī)制
FPU一旦計(jì)算完成,流水線處理器的EX段、MA段及WB段對(duì)FPU的輸出結(jié)果分段寄存,之后通過pipeline向后傳遞,最終寫入寄存器堆。分段處理算法的進(jìn)一步描述如圖3所示,首先判斷FPU輸出結(jié)果,若異常則廢除回寫動(dòng)作并向異常處理模塊提交異常信息;若結(jié)果正常則進(jìn)一步判斷指令類型,并根據(jù)狀態(tài)信息pipeline.state對(duì)FPU輸出的目標(biāo)操作數(shù)進(jìn)行分段寄存,分段寄存后的數(shù)據(jù)與圖2b)產(chǎn)生的寫地址和寫使能一一對(duì)應(yīng)。以Q類指令為例,目標(biāo)操作數(shù)小于源操作數(shù)位寬的指令僅有SQDI、SQDS、SQDD 3類,其中SQDI和SQDS的目標(biāo)操作數(shù)寬度32bits,根據(jù)利用高等級(jí)的狀態(tài)回寫低位數(shù)據(jù)的原則,EX段在“10”狀態(tài)下將FPU輸出保存到pipeline寄存器;對(duì)于64位輸出的SQDD,EX段在“10”狀態(tài)下保存FPU的低32位輸出,MA段在“01”狀態(tài)下保存FPU的高32位輸出;除上之外的Q類指令均包含80位目標(biāo)操作數(shù),則EX段在“10”保存FPU輸出的80位操作數(shù)的低16位;MA段在“01”狀態(tài)保存80位目標(biāo)操作數(shù)的次32位;WB段的“00”狀態(tài)保存80位FPU輸出結(jié)果的高32位。
圖3 數(shù)據(jù)分段處理流程圖
1.3 FPU集成方案實(shí)現(xiàn)
SPARC V8是一種開源的RISC體系結(jié)構(gòu)[15],在歐洲及我國(guó)的航空航天領(lǐng)域應(yīng)用廣泛,本文選擇該架構(gòu)進(jìn)一步詳述細(xì)粒度FPU集成方法在RISC流水線處理器中的實(shí)現(xiàn)。一款80位Meiko接口的擴(kuò)展雙精度FPU與處理器核的耦合方案示如圖4所示,處理器核為典型的RISC 5級(jí)流水線,ID段的細(xì)粒度控制模塊實(shí)現(xiàn)2.1節(jié)所述控制算法,并通過段間寄存器pipeline向后級(jí)流水傳遞分段回寫FPU輸出結(jié)果所需的控制信息;EX、MA及WB段的分段處理模塊依據(jù)圖3所示的流程實(shí)現(xiàn)目標(biāo)操作數(shù)向浮點(diǎn)寄存器堆的流水化回寫。
圖4 擴(kuò)展雙精度FPU與處理器核的耦合示意圖
基于Cadence公司的eRM(ereuse methodology)對(duì)本文提出的細(xì)粒度擴(kuò)展雙精度FPU集成方法進(jìn)行仿真驗(yàn)證,驗(yàn)證工具及仿真器采用specman elite和modelsim simulator,處理器浮點(diǎn)結(jié)果與驗(yàn)證環(huán)境中斯坦福大學(xué)開發(fā)的TestFloat進(jìn)行對(duì)比,結(jié)果表明采用本文方案的處理器浮點(diǎn)功能正確,圖5a)、圖5b)分別給出了典型的時(shí)序圖,圖5a)為SQDQ類指令(源和目標(biāo)操作數(shù)均為擴(kuò)展雙精度)時(shí)序圖,ID段利用3個(gè)時(shí)鐘周期取得源操作數(shù),并啟動(dòng)FPU計(jì)算,WB段利用狀態(tài)“00”、“01”和“10”實(shí)現(xiàn)流水化寫回。圖5b)為SSDQ類浮點(diǎn)指令(單精度源操作數(shù),擴(kuò)展雙精度目標(biāo)操作數(shù))的時(shí)序圖,ID段第1個(gè)時(shí)鐘周期啟動(dòng)FPU計(jì)算,在后續(xù)2個(gè)周期內(nèi)產(chǎn)生目標(biāo)操作數(shù)對(duì)應(yīng)的寫使能和地址,待計(jì)算完成后,各流水段根據(jù)pipeline的控制信息分段寄存FPU輸出,最后在WB級(jí)實(shí)現(xiàn)流水化回寫。
圖5 本文集成方法的時(shí)序圖
在功能正確的基礎(chǔ)上,本節(jié)分析了細(xì)粒度的FPU集成方法的綜合及測(cè)試情況。本文提出的方法以執(zhí)行狀態(tài)為基本粒度產(chǎn)生控制信息,這種控制邏輯的細(xì)粒度化最大程度上降低了復(fù)雜度,基于SMIC 0.18 μm工藝庫(kù)的關(guān)鍵路徑延時(shí)僅2.3 ns,與基于浮點(diǎn)指令碼的方案[10]相比降低了61%;由于采用了流水化形式回寫目標(biāo)操作數(shù),復(fù)用了流水段中的諸多硬件資源,利用文獻(xiàn)[7]同樣的FPGA器件對(duì)本文方法進(jìn)行綜合,硬件消耗如表2所示,與Joven等完成的FPU為片內(nèi)總線從機(jī)的Cortex-M1方案相比[7],本文方案LUTs的使用減少16.9%;與處理器緊耦合的GRFPU LITE實(shí)現(xiàn)相比[11],本文LUT、寄存器的消耗分別增加9.6%和9%,主要原因是GRFPU LITE僅實(shí)現(xiàn)雙精度FPU的集成,而本文方法適用于單、雙、擴(kuò)展雙精度FPU的集成。
表2 不同方案硬件消耗的對(duì)比
圖6 浮點(diǎn)計(jì)算效率的對(duì)比
最后對(duì)浮點(diǎn)效率進(jìn)行了評(píng)估,并與已公開的方案[7,11,16]進(jìn)行了對(duì)比,結(jié)果如圖6a)、圖6b)所示。LEON3 FPU需要軟件參與浮點(diǎn)運(yùn)算,浮點(diǎn)運(yùn)算效率較低,單、雙精度的浮點(diǎn)運(yùn)算均需173個(gè)時(shí)鐘周期;瑞典Gaisler研究所的GRFPU和GRFPULITE將FPU嵌入到處理器核內(nèi)部,實(shí)現(xiàn)處理器與FPU的緊密耦合,需要近30個(gè)時(shí)鐘周期完成單、雙精度的浮點(diǎn)運(yùn)算;Joven等完成的Cortex-M1方案將FPU作為處理器的總線從機(jī),通過改進(jìn)兩者交互方式,需約15~30個(gè)時(shí)鐘完成浮點(diǎn)指令的執(zhí)行;而本文方法以基于時(shí)鐘的指令執(zhí)行狀態(tài)為基本粒度產(chǎn)生FPU的控制信息,通過全硬件方式將FPU植入處理器核,導(dǎo)致兩者之間的通信開銷幾乎可以忽略,僅需要9~10個(gè)時(shí)鐘完成單、雙精度的浮點(diǎn)運(yùn)算,效率超過Cortex-M1至少1.7倍。圖6c)進(jìn)一步給出了基于本方法的V8型處理器擴(kuò)展雙精度的浮點(diǎn)運(yùn)算時(shí)的時(shí)鐘開銷,比軟件模擬浮點(diǎn)運(yùn)算效率提高20~100倍[7,11]。
[1] Bailey D H.High-Precision Floating-Point Arithmetic in Scientific Computation[J].Computing in Science&Engineering,2005,7(3):54-61
[2] 王重陽(yáng).單、雙、擴(kuò)展精度自適應(yīng)浮點(diǎn)乘、除和開方運(yùn)算單元的實(shí)現(xiàn)[D].北京:華北電力大學(xué),2011
Wang Chongyang.Realization of Adaptive Floating-Point Multiplication,Division and Square Root Unit for Single,Double and Extended Precision[D].Beijing:North China Electric Power University,2011(in Chinese)
[3] Aeroflex.UT699 LEON 3FT/SPARC V8 Microprocessor Functional Manual[M].Aeroflex Inc,2012
[4] Kane G,Heinrich J.MIPS RISC Architectures[M].Prentice-Hall,Inc,1992
[5] Boersma M,Kroner M,Layer C,et al.The POWER7 Binary Floating-Point Unit[C]∥2011 20th IEEE Symposium on Computer Arithmetic(ARITH),2011:87-91
[6] Ramakrishnan A,Conrad J M.Analysis of Floating Point Operations in Microcontrollers[C]∥Southeastcon,2011 Proceedings of IEEE,2011:97-100
[7] Joven J,Strict P,Castells-Rufas D,et al.HW-SW Implementation of a Decoupled FPU for ARM-Based Cortex-M1 SoCs in FPGAs[C]∥2011 6th IEEE International Symposium on Industrial Embedded Systems(SIES),2011:1-8
[8] Schwarz E M,Schmookler M,Trong S D.FPU Implementations with Denormalized Numbers[J].IEEE Trans on Computers,2005,54(7):825-836
[9] Trong S D,Schmookler M S,Schwarz E M,et al.P6 Binary Floating-Point Unit[C]∥IEEE Symposium on Computer Arithmetic,2007:77-86
[10]趙勇,張盛兵,王黨輝.微處理器浮點(diǎn)IP核集成設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2006,23(7):129-133
Zhao Yong,Zhang Shengbing,Wang Danghui.The Integration of Floating Point IP in Microprocessor Design[J].Microelectronics&Computer,2006,23(7):129-133(in Chinese)
[11]Gajjar N,Devahsrayee N M,Dasgupta K S.Scalable LEON 3 Based SoC for Multiple Floating Point Operations[C]∥2011 Nirma University International Conference on Engineering(NUiCONE),2011:1-3
[12]杜學(xué)亮,金西.向量浮點(diǎn)協(xié)處理器VFP-A的設(shè)計(jì)和驗(yàn)證[J].微電子學(xué),2009,39(5):597-601
Du Xueliang,Jin Xi.Design and Verification of Vector Floating Point Coprocessor VFP-A[J].Microelectronics,2009,39(5):597-601(in Chinese)
[13]Gaisler J.The LEON-2 Processor User′s Manual[M].Sweden,Gaisler Research Inc,2003
[14]Hennessy J L,Patterson D A.Computer Architecture:A Quantitative Approach[M].Holland,Elsevier,2012
[15]Internationa S.The SPARC Architecture Manual Version 8[M].SPARC International Inc,1998
[16]Gaisler J,Catovic E,Isomaki M,et al.GRLIB IP Core User′s Manual[M].Gaisler Research,2007
A Method of FPU Integration Based on Fine-Grained Pipeline Control
Chen Qingyu,Wu Longsheng
(Xi′an Microelectronics Technology Institute,Xi′an 710054,China)
Double-precision floating-point can hardly satisfy the accuracy requirement of contemporary scientific computing.It deserves further study about how to get the higher precision FPU embedded into the RISC processor and about how to make an effective collaborative computing between them.A fine-grained integration method of extended double-precision FPU is proposed in this paper;it is based on centralized control and segmented data processing.The method finely differentiates the execution status of floating instructions and generates the FPU control information corresponding to execution status of floating-point instructions in fine-grain.Then,destination operands are segmentedly processed and written back register is implemented and the implementation is explained with a flowchart.An SPARC V8 processor based on the proposed mechanism has been implemented,verified and analyzed.The results and their analysis show preliminarily that the critical path of floating instructions decreases 61%,hardware consumption declines 16.9%and the floating-point calculation efficiency increase 1.7 times.
algorithms,calculations,computer architecture,computer hardware,controllers,cost reduction,data processing,digital arithmetic,efficiency,exchange coupling,flowcharting,microprocessor chips,real time control,scalability,schematic diagrams,state estimation,time delay;centralized control,collaboration computing,fine-grain,F(xiàn)PU,pipeline write-back
TP302.1
A
1000-2758(2015)06-1049-06
2015-04-24
陳慶宇(1988—),西安微電子技術(shù)研究所博士研究生,主要從事高性能飛行控制SoC設(shè)計(jì)及系統(tǒng)級(jí)可靠性研究。