車文博 劉衡竹 田甜
摘要:針對高性能M型數(shù)字信號處理器(M-DSP)對浮點運算的性能、面積和功耗要求,研究分析了M-DSP總體結(jié)構(gòu)和浮點運算的指令特點,設計和實現(xiàn)了一種高性能低功耗的浮點乘累加器(FMAC)。該乘加器采用單、雙精度通路分離的主體結(jié)構(gòu),分為六級流水站執(zhí)行,對乘法器、對階移位等關鍵模塊進行了復用設計,支持雙精度和單精度浮點乘法、乘累加、乘累減、單精度點積和復數(shù)運算。對所設計的乘加器進行了全面的驗證,基于45nm工藝采用Synopsys公司的Design Compiler工具綜合所設計的代碼,綜合結(jié)果表明運行頻率可達1GHz,單元面積36856μm2;與FT-XDSP中的乘加器相比,面積節(jié)省了12.95%,關鍵路徑長度減少了2.17%。
關鍵詞:浮點乘法;浮點乘累加器;浮點點積;布斯算法;IEEE754
中圖分類號:TP332.2
文獻標志碼:A
0引言
數(shù)字信號處理器(Digital Signal Processor, DSP)從專用信號處理器開始發(fā)展到今天的超長指令字(Very Long Instruction Word, VLIW)陣列處理器,其應用領域已經(jīng)從最初的語音、聲納等低頻信號的處理發(fā)展到今天雷達、圖像等視頻大數(shù)據(jù)量的信號處理。由于浮點運算和并行處理技術(shù)的應用,信號處理能力已得到極大的提高。隨著數(shù)字信號處理器在處理速度和運算精度兩個方向的發(fā)展,體系結(jié)構(gòu)中數(shù)據(jù)流結(jié)構(gòu)甚至人工神經(jīng)網(wǎng)絡結(jié)構(gòu)等,將可能成為下一代數(shù)字信號處理器的基本結(jié)構(gòu)模式。近些年,從傳統(tǒng)DSP結(jié)構(gòu)中已不能有效地提高DSP處理器的性能,許多新的提高DSP性能的方法被提出[1]。其中提高頻率的方法已達到瓶頸階段,最有效的途徑是提高并行性。數(shù)字信號處理領域的核心算法根據(jù)運算類型可以分為兩大類:一類是以密集的浮點乘加運算為典型的信號處理算法,包括快速傅里葉變換(Fast Fourier Transformation, FFT)[2-3]、有限沖激響應(Finite Impulse Response,F(xiàn)IR)和離散傅里葉變換(Discrete Fourier Transform, DFT)等算法;另一類是以密集的復數(shù)矩陣操作為主的算法,包括信道估計和多輸入多輸出(Multiple-Input Multiple-Output, MIMO)均衡[4]等算法。這兩類算法均需要DSP處理器提供較高的浮點乘加運算的計算性能。第一類算法主要是進行乘加運算(a*b+c),第二類算法主要進行大量的復數(shù)矩陣乘和矩陣求逆等運算,而在這些運算中都存在密集的乘后加運算(a*c+c*d)。浮點乘累加器(Floating-point Multiply ACcumulate, FMAC)已經(jīng)成為提高并行計算以減少計算延時的有效方法,其運算能力已經(jīng)成為衡量數(shù)字信號處理器DSP性能的一個重要特征。
浮點乘加結(jié)構(gòu)已被研究多年,IBM學者Montoye和Hokenek于1990年最先提出了融合乘加的概念[5],即將乘法和加法融合成一條指令執(zhí)行,并將加法操作融合在乘法的部分積壓縮陣列中,從而減少硬件開銷和延時;這種乘加結(jié)構(gòu)的主要缺點是求和尾數(shù)長且結(jié)果尾數(shù)舍入延時長。Lang等[6]于2004年提出了低延時融合乘加結(jié)構(gòu),這種結(jié)構(gòu)采用前導零預測(Leading Zero Anticipation, LZA),將尾數(shù)舍入和加法合并,并在尾數(shù)加法之前進行規(guī)格化移位。目前大多數(shù)處理器中的浮點乘加設計實現(xiàn)均采用這種技術(shù),為進一步提高浮點融合乘加結(jié)構(gòu)的并行度以提升浮點乘加器的性能,Lang等[7]于2005 年設計了雙通路浮點融合乘加結(jié)構(gòu),該乘加結(jié)構(gòu)主要優(yōu)點是延時更低、處理性能得到進一步提高;但該乘加結(jié)構(gòu)邏輯設計復雜,硬件資源消耗大。國防科技大學研制的FT-XDSP中設計了多功能快速浮點融合乘加運算單元[8],但該設計硬件資源消耗太多,功耗過大。
本文基于高性能計算的應用需求,以M型數(shù)字信號處理器(M-DSP)為研究背景,深入研究FMAC的各功能模塊和流水線結(jié)構(gòu),對已有浮點融合乘加結(jié)構(gòu)[9]的關鍵模塊和算法進行了研究與優(yōu)化,設計了6級流水線結(jié)構(gòu)的FMAC單元,可支持雙精度和單精度浮點乘法、乘累加、乘累減、單精度點積和復數(shù)運算。對所設計的FMAC單元的寄存器傳送語言(Register Transfer Language, RTL)代碼實現(xiàn)進行了仿真測試,并基于45nm工藝采用Synopsys公司的DC(Design Compiler)對硬件實現(xiàn)進行了綜合,運行頻率可達1GHz。
1M-DSP處理器體系結(jié)構(gòu)
M-DSP總體結(jié)構(gòu)設計如圖1所示。M-DSP 是自主研發(fā)的一款具有自主知識產(chǎn)權(quán)的高性能DSP,目標頻率1GHz。內(nèi)核采用新型的哈佛結(jié)構(gòu),采用可變長的11發(fā)射超長指令字結(jié)構(gòu),可以同時并行取指和派發(fā)11條指令。M-DSP中內(nèi)核結(jié)構(gòu)主要包括一級程序Cache、取指單元(Instruction Fetch, IF)、指令派發(fā)單元(DisPatch, DP)、向量運算部件(Vector Process Unit,VPU)、標量運算部件(Scale Process Unit,SPU)和向量陣列存儲器(Array Memory, AM)等。其中運算部件是DSP內(nèi)核中最重要的單元之一,約80%以上的指令來自于運算部件。標量運算單元(Scale Process Element, SPE)包括兩個乘加部件和一個定點執(zhí)行單元。兩個同構(gòu)的乘加部件由共享54×32位乘法器結(jié)構(gòu)的定點MAC單元與浮點MAC單元以及浮點算數(shù)邏輯單元(Arithmetic Logical Unit, ALU)組成,三個單元獨立運算但共用乘累加(Multiply-ACcumulate, MAC)單元的寫端口寫回到寄存器,三個單元共用同一套寄存器端口。
向量運算單元(Vector Process Element, VPE)內(nèi)數(shù)據(jù)通路如圖2所示,它包含64個局部通用寄存器,三個同構(gòu)的MAC部件由定點乘加(Integer Multiply Accumulate, IMAC)、浮點MAC和浮點ALU單元三個單元構(gòu)成,其中FMAC和IMAC復用了一個54×32乘法器。向量運算部件均包含有16個相同結(jié)構(gòu)的向量運算單元VPE,與標量運算類似,每一個向量運算單元由三個向量乘加部件(Vector Multiply ACcumulate, VMAC)及一個向量定點執(zhí)行單元組成。每一個單元內(nèi)部的部件組成及數(shù)據(jù)寫回方式與標量的處理方式相同。
VPE之間通過混洗網(wǎng)絡和規(guī)約樹網(wǎng)絡進行數(shù)據(jù)交互?;煜淳W(wǎng)絡可以根據(jù)混洗粒度和混洗模式的不同對VPE之間的數(shù)據(jù)進行混洗操作;歸約網(wǎng)絡將多個VPE中的數(shù)據(jù)通過多寬度規(guī)約方式規(guī)約到一個或者多個VPE中,多寬度歸約操作將所有的16個VPE進行分組,每個分組歸約操作并行執(zhí)行,分組只支持平均分組,分組大小為2的整數(shù)次冪。
2FMAC單元的結(jié)構(gòu)設計與實現(xiàn)
2.1浮點乘加單元指令集設計
浮點MAC單元共設計實現(xiàn)9條指令(如表1所示),包括雙精度乘法(Double Floating-point MULtiply, DFMUL)、單精度乘法(Single Floating-point MULtiply, SFMUL)、雙精度乘加(Double Floating-point MULtiply-Adder, DFMULA)、單精度乘加(Single Floating-point MULtiply-Adder, SFMULA)、雙精度乘減(Double Floating-point MULtiply-Subtration, DFMULS)、單精度乘減(Single Floating-point MULtiply-Subtration, SFMULS)、浮點復數(shù)實部乘法(Floating-point Complex multiplication REAL, FCREAL)、浮點復數(shù)虛部乘法(Floating-point Complex multiplication IMAGinary, FCIMAG)和
浮點點積(Floating-point DOT product, FDOT)指令。由于寄存器端口的限制,雙精度指令和4操作數(shù)單精度指令需要讀取兩拍,雙精度結(jié)果寫回需要兩拍。
2.2高性能浮點MAC單元的體系結(jié)構(gòu)設計
浮點MAC單元其總體結(jié)構(gòu)設計實現(xiàn)如圖3所示。基于經(jīng)典低延時浮點乘加結(jié)構(gòu),根據(jù)M-DSP的體系結(jié)構(gòu)設計要求設計實現(xiàn)了雙精度浮點乘加運算通路,在此基礎上復用部分硬件實現(xiàn)單精度指令的相關運算通路,包括單精度浮點乘法/乘加、點積和復數(shù)操作。為提高性能、降低邏輯設計復雜度,基于傳統(tǒng)浮點乘加結(jié)構(gòu)將單、雙精度指令計算分開處理,設計了一套單、雙精度通路分離[10]的浮點乘加結(jié)構(gòu)。所設計的浮點MAC單元包括54×32共享乘法器、指數(shù)計算、源操作數(shù)例外判斷、尾數(shù)對階移位、尾數(shù)加法、乘法結(jié)果輸出、結(jié)果符號計算、結(jié)果尾數(shù)規(guī)格化移位、結(jié)果舍入和結(jié)果選擇寫回等模塊,單/雙精度浮點操作均需要用到上述模塊。根據(jù)邏輯復用的設計思想,將對階移位、尾數(shù)加法和前導零等模塊進行優(yōu)化,使得硬件邏輯在支持單/雙精度浮點乘加的同時支持單精度浮點乘法后加法操作。各流水線設計如下:
1)流水線第一站設計實現(xiàn)。流水線第一站主要由源操作數(shù)讀取、源操作數(shù)例外判斷、指數(shù)計算和對階移位量計算等運算模塊構(gòu)成(乘法器模塊單獨設計),其中乘法器的相關模塊與定點MAC單元共用,為了減少乘法器面積和提高邏輯復用的能力,采用4個27×16的乘法器實現(xiàn)54×32的乘法操作,雙精度乘法需要兩次乘法操作才能計算出結(jié)果,乘法器詳細設計在2.3.1節(jié)中介紹。
2)流水線第二站設計實現(xiàn)。流水線第二站主要包括部分積壓縮第3級、27×16乘法結(jié)果的Sum與Carry的加法和乘法/乘加指令的尾數(shù)對階移位等運算模塊。第3級部分級壓縮將乘法器中前兩級壓縮的結(jié)果采用進位保留加法器(Carry-Save Adder, CSA)進一步壓縮,在得到單精度乘法的部分積和陣列的Sum和Carry后,采用43位加法器對Sum和Carry進行全加操作,得到高位部分的單精度浮點乘法結(jié)果尾數(shù)。
3)流水線第三站設計實現(xiàn)。流水線第三站包括乘加/乘后加指令的尾數(shù)加法等運算模塊。在第三站中,在單精度乘法操作完成后,雙精度乘法的中間結(jié)果Sum和Carry也已計算出來,采用2個全加器用來計算浮點尾數(shù)求和,前導零LZA邏輯有部分邏輯在第三站進行。
4)流水線第四站設計實現(xiàn)。第四流水站主要包括前導零預測LZA第二部分、乘加結(jié)果尾數(shù)舍入進位處理、乘法結(jié)果溢出、例外判斷和乘法結(jié)果選擇寫回等運算模塊,在乘法結(jié)果旁路寫回模塊中,單精度乘法執(zhí)行4拍寫回,雙精度乘法由于讀、寫都要多一拍,需要6拍寫回結(jié)果。
5)流水線第五站設計實現(xiàn)。流水線第五站主要包括規(guī)格化移位、尾數(shù)舍入處理、結(jié)果符號計算和結(jié)果指數(shù)修正。在第五級流水線中,浮點MAC除乘法類的各條指令的規(guī)格化移位都使用128位對數(shù)移位器對結(jié)果尾數(shù)進行規(guī)格化移位。根據(jù)舍入模式以及粘接位的值,舍入模塊判斷是否對最后結(jié)果尾數(shù)進行加1操作。根據(jù)規(guī)格化移位的結(jié)果尾數(shù)和移位量,利用指數(shù)修正模塊可以計算出正確的結(jié)果指數(shù),根據(jù)尾數(shù)加法的最后結(jié)果采用符號計算邏輯判斷結(jié)果符號。
6)流水線第六站設計實現(xiàn)。第六級流水線主要包括結(jié)果尾數(shù)的例外判斷、溢出判斷以及結(jié)果選擇寫回處理。結(jié)果尾數(shù)選擇寫回時,先根據(jù)浮點控制寄存器中各標志位進行結(jié)果處理,待結(jié)果尾數(shù)確定后選擇寫回,寫回時雙精度指令要寫兩拍。
2.3浮點MAC單元關鍵模塊設計
2.3.1乘法器設計
傳統(tǒng)的定點和浮點運算部件都有單獨的乘法器單元。特別是處于同一流水線上的定、浮點單元,這樣的設計會導致硬件資源浪費。因此在M-DSP中,采用定點乘加部件與浮點乘加部件復用同一個乘法器,這樣可以在滿足功能要求的前提條件下,提高硬件利用率,減少芯片面積。按照指令設計需求,定點MAC單元中有32×32和單指令多數(shù)據(jù)(Single Instruction Multiple Data, SIMD)的16×16定點乘法,浮點MAC單元有54×54和24×24的浮點乘法。由于寄存器文件端口個數(shù)和位寬的限制,浮點乘加的讀操作數(shù)與寫結(jié)果均需要兩拍實現(xiàn),無法實現(xiàn)全流水操作。通過優(yōu)化邏輯結(jié)構(gòu),因此將乘法器設計為54×32位乘法器,采用4個27×16的子乘法器搭建而成,復用的乘法器共三級流水,其中定點MAC單元使用前面的兩級流水站,浮點MAC單元使用三級流水站。由于乘法器面積在定、浮點乘加部件面積中比重較大,共享同一個乘法器的設計可以大幅度減少MAC單元的面積。
27×16位乘法器采用兩級流水實現(xiàn),其實現(xiàn)結(jié)構(gòu)如圖4所示,其中基2Booth編碼[11]、第一級壓縮與第二級壓縮為第一站,第三級壓縮和Sum與Carry的加法為第二站。這樣的流水設計滿足功能要求和時序要求,并且可以提高乘法器速度。對所設計的27×16位與54×32位乘法器進行模塊級驗證后,使用綜合工具DC在40nm工藝下對所設計的乘法器進行了邏輯綜合, 27×16位乘法器關鍵路徑340ps,單元面積6758.707μm2,單元總功耗6.0817mW;54×32位乘法器關鍵路徑390ps,單元面積27438.196μm2,單元總功耗17.4217mW。
定、浮點MAC單元共享乘法器結(jié)構(gòu)如圖5所示,其中PP0~PP8表示9個部分積(Part of the Product, PP),乘法器內(nèi)部有單獨的源操作數(shù)預處理模塊,根據(jù)派發(fā)的定、浮點指令對讀取的源操作數(shù)進行處理,浮點尾數(shù)乘法的操作數(shù)均視作無符號數(shù),而定點的操作數(shù)則要區(qū)分有無符號分別處理。
2.3.2對階移位和規(guī)格化移位
本文所設計的浮點乘加單元,浮點乘加指令需要對尾數(shù)進行對階移位,設計一個m位移位器,將尾數(shù)乘積固定在設計的移位器最右端,通過固定右移加數(shù)實現(xiàn)對階。乘積與加數(shù)的指數(shù)差決定了對階移位的移位量。同樣在進行乘加/減指令時,在對尾數(shù)進行加法后,由于尾數(shù)高位可能會出現(xiàn)0的情況,為滿足IEEE754浮點數(shù)標準,需要對結(jié)果尾數(shù)進行規(guī)格化,使其最高位為1,即規(guī)格化移位,在規(guī)格化的同時根據(jù)移位量對預測結(jié)果指數(shù)進行修正。本文所設計的浮點MAC單元,除乘法類指令外其余指令需要進行規(guī)格化移位操作。
在浮點MAC 中設計了兩個右移的對階移位器,一個是106位用于單/雙精度浮點乘加尾數(shù)對階移位器,一個是98位用于點積和復數(shù)指令運算的對階移位器,均處于浮點MAC流水線上的第二級流水站。設計兩個對階移位器主要是考慮時序問題,通過實驗,復用同一個對階移位器時,面積并沒有減少,由于關鍵路徑的增加,面積還會有增大。這里以點積指令為例介紹其移位設計思想。浮點單精度點積乘法尾數(shù)對階采用一個98位的移位器進行對階操作, 98位移位器的結(jié)構(gòu)組成是由48位單精度乘法結(jié)果、用于保護處理和舍入操作的2位填充位和另一個單精度乘法尾數(shù)的48位組成,保護位與舍入位的添加可以簡化舍入運算。
由式(1)可知,在提取公共指數(shù)Ea+Eb+50-2p后,C*D結(jié)果尾數(shù)右移|Ec-(Ea+Eb+50)|位后,兩個乘法結(jié)果尾數(shù)的小數(shù)點已對齊。設兩個乘法指數(shù)階差為d,則d=Ec+Ed-(Ea+Eb),根據(jù)式(1)提取出的公共指數(shù)Ea+Eb+50-2p,設對階移位量為Shift_Bit,則Shift_Bit=Ec+Ed-(Ea+Eb+50)=d-50,不同的移位量會產(chǎn)生以下幾種對階移位情形:
a)Shift_Bit≥0時,尾數(shù)mC*mD相對其在98位對階移位器中的最高位置左移或者不移動,則mA*mB的乘法結(jié)果只對粘貼位sticky位的計算有影響,sticky=|mA*mB,即A*B乘法結(jié)果的或值,左移時尾數(shù)后面填充的0對sticky位沒有影響。
b)Shift_Bit<0且Shift_Bit≥-50時,尾數(shù)mC*mD要右移,移位量為|Shift_Bit|,但mC*mD最多右移50位,而mC*mD還處在98位移位器中,此時sticky位要等到尾數(shù)加法完成后才能計算出來。
c)Shift_Bit<-50且Shift_Bit≥-98時,說明移位量大于50,尾數(shù)mC*mD有一部分尾數(shù)會移出移位器,但不會完全移出,可以將sticky位分成兩部分(sticky1和sticky2)計算:sticky1根據(jù)兩個乘法結(jié)果尾數(shù)在加法完成后,將需要舍入的位進行或操作,sticky2是將移出移位器的尾數(shù)值進行或操作,最終的sticky=sticky1|sticky2。
d)Shift_Bit≤-98時,尾數(shù)mC*mD全部移出移位器,也可將sticky位分成兩部分計算:sticky1是加法完成后需舍入的位數(shù)的或值,sticky2是移出移位器的尾數(shù)mC*mD的或值。
同理也設計了用于雙精度浮點乘加運算的108位對階移位器,該移位器也可以滿足單精度浮點乘加運算的對階移位。
規(guī)格化移位器是一個左移的移位器,為滿足IEEE754浮點運算標準,在尾數(shù)進行加法后,結(jié)果尾數(shù)最高位有可能不為1,需根據(jù)計算出的前導零個數(shù)將結(jié)果尾數(shù)進行左移操作,使結(jié)果尾數(shù)最高位為1。雙精度浮點乘加運算尾數(shù)為161位,最大只要一個161位的規(guī)格化移位器即可滿足要求;單精度浮點乘加運算需要一個74位的規(guī)格化移位器;復數(shù)與點積運算需要一個98位規(guī)格化移位器。針對規(guī)格化移位的設計需求,設計了一個108位對數(shù)移位器。主要是對雙精度的規(guī)格化移位作了優(yōu)化,先判斷計算出的結(jié)果尾數(shù)前導零個數(shù)是在前53位還是在后108位:若在前53位,則用移位器直接進行108位規(guī)格化移位要求;若在后108位,則結(jié)果尾數(shù)固定左移53位再用移位器進行108位移位.單精度浮點乘加與復數(shù)指令的規(guī)格化移位不需要再進行判斷,使用108位規(guī)格化移位完全可以滿足要求。
3FMAC模擬驗證與綜合優(yōu)化
3.1FMAC驗證
M-DSP中浮點MAC的驗證主要從模擬驗證和形式驗證兩方面來完成[12]。模擬驗證主要借助Cadence公司的NC-Verilog等工具完成,包括模塊級驗證、系統(tǒng)級驗證以及覆蓋率分析等;形式化驗證主要借助于ATEC(Advanced Test Equivalence Checking)和Formality等價性檢查工具來完成。通過上述驗證方法,發(fā)現(xiàn)了一些邊界值錯誤和全局控制信號的控制錯誤,均已修正。
3.1.1黃金模型建立
模塊級與系統(tǒng)級驗證都需要驗證大量功能點來保證功能的正確性,硬件仿真的結(jié)果需要與另一結(jié)果進行對比來判斷,而另一結(jié)果的取得由于數(shù)據(jù)量大且有準確性高的要求,往往不能由人工計算得到,所以使用準確度高、速度快的軟件方式計算結(jié)果對于提高驗證工作效率十分必要。按照硬件邏輯的執(zhí)行架構(gòu),使用C語言將每條指令的功能描述出來,并與硬件仿真調(diào)用同一組操作數(shù),這一由軟件建立的模型即為黃金模型。黃金模型的結(jié)果不依賴硬件,作為軟件結(jié)果而獨立存在,因此可以作為參考結(jié)果與硬件結(jié)果進行比較,方便檢查硬件結(jié)果的正確性,同時節(jié)省大量資源。
3.1.2模塊級驗證
浮點MAC的驗證首先從模塊級驗證開始,根據(jù)浮點數(shù)的數(shù)據(jù)結(jié)構(gòu)和浮點MAC單元實現(xiàn)的指令,有針對性地加入相應的功能點測試激勵,根據(jù)驗證結(jié)果分析模塊結(jié)構(gòu)是否存在錯誤;模塊級驗證工具采用NC-Verilog仿真工具進行驗證,通過編寫特定的TestBench加入到模塊級模擬驗證環(huán)境中,查看激勵響應,檢測模塊設計的正確性。對所有子模塊完成充分驗證之后,再在浮點MAC單元中進行功能驗證,模塊級驗證主要內(nèi)容如表2所示。
3.1.3系統(tǒng)級驗證
系統(tǒng)級驗證在單核情況下進行,通過匯編指令在高層次對FMAC進行驗證,保證FMAC在系統(tǒng)級工作的正確性。系統(tǒng)級驗證進行的主要驗證工作有:
1)隨機數(shù)測試。隨機數(shù)驗證主要是針對驗證功能點與邊界值時遺漏的測試點進行的驗證,手工編寫測試激勵很難將邊界值中的各種情況測試完全,根據(jù)浮點數(shù)據(jù)的結(jié)構(gòu)特征,將生成的符號位、指數(shù)位、尾數(shù)位自由交叉組合生成偽隨機數(shù)測試激勵,在單核系統(tǒng)下測試1000萬組隨機數(shù)。
2)精度測試。進行精度測試主要是為了查看在相同的標準條件下,浮點運算的結(jié)果是否一致或誤差的大小。在進行精度測試時,與Intel的Pentium Dual-core E5300 CPU和TI的TMS320C6678的運算結(jié)果進行了對比。由于TMS320C6678沒有復數(shù)指令和乘加、乘減指令,所以測試結(jié)果與其有誤差,但與Pentium E5300的結(jié)果完全一致。
3)流水線測試。指令流水線測試是為了驗證處于系統(tǒng)級下的浮點MAC單元是否按預定的執(zhí)行周期進行指令流水,浮點MAC單元共有9條指令,每條指令均能按照設計的流水節(jié)拍正確地執(zhí)行寫回。
4)全局信號測試。全局信號測試主要測試與外部模塊通信的接口和信號的通信和控制,主要涉及到控制流水線的相關全局信號,包括全局暫停(Global Stall, G_Stall)信號、流水線沖刷(Pipeline_Flush, P_Flush)信號、派發(fā)暫停(Instruction Dispatch Snop, ID_Snop)信號以及條件執(zhí)行(Condition Execution, Cond_Exe)信號。以全局信號測試為例,當全局信號G_Stall為高時,指令暫緩執(zhí)行,等到為低時流水線繼續(xù)執(zhí)行,其測試波形如圖6所示。
5)指令組合測試。M-DSP中MAC單元包括3個執(zhí)行單元:浮點MAC單元、定點MAC單元和浮點ALU單元,三條執(zhí)行通路共用一套讀寫端口,因此,在對浮點MAC指令進行驗證時,與其他單元的指令組合驗證是必要的,不僅可以檢查本單元的正確性,還可以驗證整個MAC流水線通路的正確性。
3.1.4形式驗證
形式驗證(Formal Verification, FV)是一種集成電路(Integrated Circuit, IC)設計的驗證方法,它從靜態(tài)的角度對設計進行驗證,不需要模擬驗證的激勵。ATEC等價性檢查工具采用形式化的驗證方法,將RTL代碼與C語言編寫的黃金模型轉(zhuǎn)化為可以比較的表達式,在相同的約束條件下進行等價性驗證,保證硬件設計的正確性。驗證初期已對浮點MAC單元的每條指令建立C語言黃金模型,ATEC等價性檢查的流程如圖7所示。由于FMAC模塊的復雜性,在進行ATEC驗證過程中,當存在錯誤時,會快速地舉出反例測試激勵,可以通過給出的測試激勵進行錯誤定位,大幅縮短設計周期。Formality等價性檢查旨在驗證綜合前的RTL代碼與綜合后的門級網(wǎng)表是否等價。
3.2邏輯綜合
浮點MAC單元采用Synopsys公司的DC工具進行邏輯綜合,綜合環(huán)境是基于40nm工藝庫,在Typical條件下進行綜合,綜合的目標頻率是1GHz,留給后端物理設計的時間大約是30%,剩下的前端的時鐘周期大約為450ps,寄存器的輸入延時設置為100ps,輸出延時設置為100ps。
采用上述綜合約束條件,對浮點MAC單元的乘法器模塊和MAC運算主體結(jié)構(gòu)流水線進行邏輯綜合,浮點MAC單元綜合結(jié)果如表3所示,單個浮點MAC單元綜合面積35250μm2,總功耗6.7570mW,其中動態(tài)功耗6.0432mW,靜態(tài)功耗713.7950μW,最長關鍵路徑450ps。與參考文獻[8]中的FMAC結(jié)構(gòu)相比,本文采用單雙精度通路分離的乘加結(jié)構(gòu),雖然通路分離,但精簡了邏輯設計,降低了硬件設計的復雜度,有效減少了硬件開銷;文獻[8]中的浮點MAC采用單一的浮點乘加結(jié)構(gòu),雖然復用了大部分邏輯資源,但增加了邏輯設計的復雜度,很多硬件資源并沒有有效復用,從而導致面積較大,本文所設計的FMAC在硬件資源開銷上比參考結(jié)構(gòu)在性能提高了2.17%,單元面積減少了12.95%。
4結(jié)語
本文詳細設計了M-DSP中浮點MAC單元,根據(jù)浮點MAC單元的指令功能和性能要求,設計和實現(xiàn)了單、雙精度通路分離的6級流水線浮點MAC單元,針對每個功能單元進行了詳細設計,并對乘法器等關鍵模塊進行了優(yōu)化設計。全面驗證了所設計的浮點MAC單元,基于40nm工藝對浮點MAC單元采用DC綜合工具進行綜合,綜合結(jié)果表明所設計的浮點MAC單元工作頻率可達1GHz,功耗6.7570mW,面積35250μm2。整個M-DSP芯片1GHz下峰值處理性能達到單精度浮點復數(shù)乘法25GFLOPs(Giga FLoating-point Operations Per second)、單精度浮點100GFLOPs、雙精度浮點50GFLOPs,滿足M-DSP芯片對浮點乘加運算的高性能要求。
參考文獻:
[1]李海森,李思純,周天.高速DSP原理、應用與試驗教程[M].北京:清華大學出版社,2009:23-47. (LI H S, LI S C, ZHOU T. High Speed DSP Principle, Application and Experiment Course [M]. Beijing: Tsinghua University Press, 2009: 23-47.)
[2]方維,孫廣中,吳超,等.一種三維快速傅里葉變換并行算法[J].計算機研究與發(fā)展,2011,48(3):440-446. (FANG W, SUN G Z, WU C, et al. A parallel algorithm of three-dimensional fast Fourier transform [J]. Journal of Computer Research and Development, 2011, 48(3): 440-446.)
[3]WANG X, ZHANG Y, WANG F, et al. A configurable floating-point discrete Hilbert transform processor for accelerating the calculation of filter in Katsevich formula [J]. WSEAS Transactions on Communications, 2012, 11(11): 395-404.
[4]張擁軍,陳艇.基于軟件無線電的并行多輸入多輸出均衡技術(shù)[J].計算機應用,2015,35(4):1179-1184. (ZHANG Y J, CHEN T. Parallel multiple input and multiple output equalization based on software defined radio [J]. Journal of Computer Applications, 2015, 35(4): 1179-1184.)
[5]MONTOYE R K, HOKENEK E, RUNYON S L. Design of the IBM RISC System/6000 floating-point execution unit [J]. IBM Journal of Research and Development, 1990, 34(1): 59-70.
[6]LANG T, BRUGUERA J D. Floating-point fused multiply-add with reduced latency [J]. IEEE Transactions on Computers, 2004, 53(8): 988-1003.
http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=1306992&url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F12%2F29016%2F01306992
http://xueshu.baidu.com/s?wd=paperuri%3A%280abb7fbed27abc68d04bc9efe4c31c30%29&filter=sc_long_sign&tn=SE_xueshusource_2kduw22v&sc_vurl=http%3A%2F%2Fdl.acm.org%2Fcitation.cfm%3Fid%3D846996&ie=utf-8&sc_us=16446173281281047444
ICCD '02 Proceedings of the 2002 IEEE International Conference on Computer Design: VLSI in Computers and Processors (ICCD'02)
Page 145
IEEE Computer Society Washington, DC, USA ?2002
[7]LANG T, BRUGUERA J D. Floating-point fused multiply-add: reduced latency for floating-point addition [C]// ARITH 05: Proceedings of the 17th IEEE Symposium on Computer Arithmetic. Washington, DC: IEEE Computer Society, 2005: 42-51.
[8]田甜.FT-XDSP中FMAC單元的研究與實現(xiàn)[D].長沙.國防科學技術(shù)大學,2013:56-57. (TIAN T. The research and implementation of high performance SIMD floating-point multiplication accumulator unit for FT-XDSP [D].Changsha: National University of Defence Technology, 2013: 56-57.)
[9]彭元喜,楊洪杰,謝剛.X-DSP浮點乘法器的設計與實現(xiàn)[J].計算機應用,2010,30(11):3121-3126. (PENG Y X, YANG H J, XIE G. Design and implementation of float point multiplier in X-DSP [J]. Journal of Computer Applications, 2010, 30(11): 3121-3126.)
[10]何軍,黃永勤,朱英.分離通路浮點乘加器設計與實現(xiàn)[J].計算機科學,2013,40(8):28-33. (HE J, HUANG Y Q, ZHU Y. Design and implementation of separated path floating-point fused multiply-add unit [J]. Computer Science, 2013, 40(8): 28-33.)
[11]RUBINFIELD L P. A proof of the modified Booths algorithm for multiplication [J]. IEEE Transactions on Computer, 1975, 24(10): 1014-1015.
[12]陳海燕,郭陽,劉祥遠,等.集成電路計算機輔助設計與驗證實踐[M].長沙:國防科技大學出版社,2010:210-220. (CHEN H Y, GUO Y, LIU X Y, et al. The Practice of Computer Aided Design and Verification of Integrated Circuits [M]. Changsha: National University of Defence Technology Press, 2010: 210-220.)