車文博 劉衡竹 田甜
摘要:針對(duì)高性能M型數(shù)字信號(hào)處理器(M-DSP)對(duì)浮點(diǎn)運(yùn)算的性能、面積和功耗要求,研究分析了M-DSP總體結(jié)構(gòu)和浮點(diǎn)運(yùn)算的指令特點(diǎn),設(shè)計(jì)和實(shí)現(xiàn)了一種高性能低功耗的浮點(diǎn)乘累加器(FMAC)。該乘加器采用單、雙精度通路分離的主體結(jié)構(gòu),分為六級(jí)流水站執(zhí)行,對(duì)乘法器、對(duì)階移位等關(guān)鍵模塊進(jìn)行了復(fù)用設(shè)計(jì),支持雙精度和單精度浮點(diǎn)乘法、乘累加、乘累減、單精度點(diǎn)積和復(fù)數(shù)運(yùn)算。對(duì)所設(shè)計(jì)的乘加器進(jìn)行了全面的驗(yàn)證,基于45nm工藝采用Synopsys公司的Design Compiler工具綜合所設(shè)計(jì)的代碼,綜合結(jié)果表明運(yùn)行頻率可達(dá)1GHz,單元面積36856μm2;與FT-XDSP中的乘加器相比,面積節(jié)省了12.95%,關(guān)鍵路徑長(zhǎng)度減少了2.17%。
關(guān)鍵詞:浮點(diǎn)乘法;浮點(diǎn)乘累加器;浮點(diǎn)點(diǎn)積;布斯算法;IEEE754
中圖分類號(hào):TP332.2
文獻(xiàn)標(biāo)志碼:A
0引言
數(shù)字信號(hào)處理器(Digital Signal Processor, DSP)從專用信號(hào)處理器開始發(fā)展到今天的超長(zhǎng)指令字(Very Long Instruction Word, VLIW)陣列處理器,其應(yīng)用領(lǐng)域已經(jīng)從最初的語音、聲納等低頻信號(hào)的處理發(fā)展到今天雷達(dá)、圖像等視頻大數(shù)據(jù)量的信號(hào)處理。由于浮點(diǎn)運(yùn)算和并行處理技術(shù)的應(yīng)用,信號(hào)處理能力已得到極大的提高。隨著數(shù)字信號(hào)處理器在處理速度和運(yùn)算精度兩個(gè)方向的發(fā)展,體系結(jié)構(gòu)中數(shù)據(jù)流結(jié)構(gòu)甚至人工神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)等,將可能成為下一代數(shù)字信號(hào)處理器的基本結(jié)構(gòu)模式。近些年,從傳統(tǒng)DSP結(jié)構(gòu)中已不能有效地提高DSP處理器的性能,許多新的提高DSP性能的方法被提出[1]。其中提高頻率的方法已達(dá)到瓶頸階段,最有效的途徑是提高并行性。數(shù)字信號(hào)處理領(lǐng)域的核心算法根據(jù)運(yùn)算類型可以分為兩大類:一類是以密集的浮點(diǎn)乘加運(yùn)算為典型的信號(hào)處理算法,包括快速傅里葉變換(Fast Fourier Transformation, FFT)[2-3]、有限沖激響應(yīng)(Finite Impulse Response,F(xiàn)IR)和離散傅里葉變換(Discrete Fourier Transform, DFT)等算法;另一類是以密集的復(fù)數(shù)矩陣操作為主的算法,包括信道估計(jì)和多輸入多輸出(Multiple-Input Multiple-Output, MIMO)均衡[4]等算法。這兩類算法均需要DSP處理器提供較高的浮點(diǎn)乘加運(yùn)算的計(jì)算性能。第一類算法主要是進(jìn)行乘加運(yùn)算(a*b+c),第二類算法主要進(jìn)行大量的復(fù)數(shù)矩陣乘和矩陣求逆等運(yùn)算,而在這些運(yùn)算中都存在密集的乘后加運(yùn)算(a*c+c*d)。浮點(diǎn)乘累加器(Floating-point Multiply ACcumulate, FMAC)已經(jīng)成為提高并行計(jì)算以減少計(jì)算延時(shí)的有效方法,其運(yùn)算能力已經(jīng)成為衡量數(shù)字信號(hào)處理器DSP性能的一個(gè)重要特征。
浮點(diǎn)乘加結(jié)構(gòu)已被研究多年,IBM學(xué)者M(jìn)ontoye和Hokenek于1990年最先提出了融合乘加的概念[5],即將乘法和加法融合成一條指令執(zhí)行,并將加法操作融合在乘法的部分積壓縮陣列中,從而減少硬件開銷和延時(shí);這種乘加結(jié)構(gòu)的主要缺點(diǎn)是求和尾數(shù)長(zhǎng)且結(jié)果尾數(shù)舍入延時(shí)長(zhǎng)。Lang等[6]于2004年提出了低延時(shí)融合乘加結(jié)構(gòu),這種結(jié)構(gòu)采用前導(dǎo)零預(yù)測(cè)(Leading Zero Anticipation, LZA),將尾數(shù)舍入和加法合并,并在尾數(shù)加法之前進(jìn)行規(guī)格化移位。目前大多數(shù)處理器中的浮點(diǎn)乘加設(shè)計(jì)實(shí)現(xiàn)均采用這種技術(shù),為進(jìn)一步提高浮點(diǎn)融合乘加結(jié)構(gòu)的并行度以提升浮點(diǎn)乘加器的性能,Lang等[7]于2005 年設(shè)計(jì)了雙通路浮點(diǎn)融合乘加結(jié)構(gòu),該乘加結(jié)構(gòu)主要優(yōu)點(diǎn)是延時(shí)更低、處理性能得到進(jìn)一步提高;但該乘加結(jié)構(gòu)邏輯設(shè)計(jì)復(fù)雜,硬件資源消耗大。國(guó)防科技大學(xué)研制的FT-XDSP中設(shè)計(jì)了多功能快速浮點(diǎn)融合乘加運(yùn)算單元[8],但該設(shè)計(jì)硬件資源消耗太多,功耗過大。
本文基于高性能計(jì)算的應(yīng)用需求,以M型數(shù)字信號(hào)處理器(M-DSP)為研究背景,深入研究FMAC的各功能模塊和流水線結(jié)構(gòu),對(duì)已有浮點(diǎn)融合乘加結(jié)構(gòu)[9]的關(guān)鍵模塊和算法進(jìn)行了研究與優(yōu)化,設(shè)計(jì)了6級(jí)流水線結(jié)構(gòu)的FMAC單元,可支持雙精度和單精度浮點(diǎn)乘法、乘累加、乘累減、單精度點(diǎn)積和復(fù)數(shù)運(yùn)算。對(duì)所設(shè)計(jì)的FMAC單元的寄存器傳送語言(Register Transfer Language, RTL)代碼實(shí)現(xiàn)進(jìn)行了仿真測(cè)試,并基于45nm工藝采用Synopsys公司的DC(Design Compiler)對(duì)硬件實(shí)現(xiàn)進(jìn)行了綜合,運(yùn)行頻率可達(dá)1GHz。
1M-DSP處理器體系結(jié)構(gòu)
M-DSP總體結(jié)構(gòu)設(shè)計(jì)如圖1所示。M-DSP 是自主研發(fā)的一款具有自主知識(shí)產(chǎn)權(quán)的高性能DSP,目標(biāo)頻率1GHz。內(nèi)核采用新型的哈佛結(jié)構(gòu),采用可變長(zhǎng)的11發(fā)射超長(zhǎng)指令字結(jié)構(gòu),可以同時(shí)并行取指和派發(fā)11條指令。M-DSP中內(nèi)核結(jié)構(gòu)主要包括一級(jí)程序Cache、取指單元(Instruction Fetch, IF)、指令派發(fā)單元(DisPatch, DP)、向量運(yùn)算部件(Vector Process Unit,VPU)、標(biāo)量運(yùn)算部件(Scale Process Unit,SPU)和向量陣列存儲(chǔ)器(Array Memory, AM)等。其中運(yùn)算部件是DSP內(nèi)核中最重要的單元之一,約80%以上的指令來自于運(yùn)算部件。標(biāo)量運(yùn)算單元(Scale Process Element, SPE)包括兩個(gè)乘加部件和一個(gè)定點(diǎn)執(zhí)行單元。兩個(gè)同構(gòu)的乘加部件由共享54×32位乘法器結(jié)構(gòu)的定點(diǎn)MAC單元與浮點(diǎn)MAC單元以及浮點(diǎn)算數(shù)邏輯單元(Arithmetic Logical Unit, ALU)組成,三個(gè)單元獨(dú)立運(yùn)算但共用乘累加(Multiply-ACcumulate, MAC)單元的寫端口寫回到寄存器,三個(gè)單元共用同一套寄存器端口。
向量運(yùn)算單元(Vector Process Element, VPE)內(nèi)數(shù)據(jù)通路如圖2所示,它包含64個(gè)局部通用寄存器,三個(gè)同構(gòu)的MAC部件由定點(diǎn)乘加(Integer Multiply Accumulate, IMAC)、浮點(diǎn)MAC和浮點(diǎn)ALU單元三個(gè)單元構(gòu)成,其中FMAC和IMAC復(fù)用了一個(gè)54×32乘法器。向量運(yùn)算部件均包含有16個(gè)相同結(jié)構(gòu)的向量運(yùn)算單元VPE,與標(biāo)量運(yùn)算類似,每一個(gè)向量運(yùn)算單元由三個(gè)向量乘加部件(Vector Multiply ACcumulate, VMAC)及一個(gè)向量定點(diǎn)執(zhí)行單元組成。每一個(gè)單元內(nèi)部的部件組成及數(shù)據(jù)寫回方式與標(biāo)量的處理方式相同。
VPE之間通過混洗網(wǎng)絡(luò)和規(guī)約樹網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交互?;煜淳W(wǎng)絡(luò)可以根據(jù)混洗粒度和混洗模式的不同對(duì)VPE之間的數(shù)據(jù)進(jìn)行混洗操作;歸約網(wǎng)絡(luò)將多個(gè)VPE中的數(shù)據(jù)通過多寬度規(guī)約方式規(guī)約到一個(gè)或者多個(gè)VPE中,多寬度歸約操作將所有的16個(gè)VPE進(jìn)行分組,每個(gè)分組歸約操作并行執(zhí)行,分組只支持平均分組,分組大小為2的整數(shù)次冪。
2FMAC單元的結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)
2.1浮點(diǎn)乘加單元指令集設(shè)計(jì)
浮點(diǎn)MAC單元共設(shè)計(jì)實(shí)現(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)、浮點(diǎn)復(fù)數(shù)實(shí)部乘法(Floating-point Complex multiplication REAL, FCREAL)、浮點(diǎn)復(fù)數(shù)虛部乘法(Floating-point Complex multiplication IMAGinary, FCIMAG)和
浮點(diǎn)點(diǎn)積(Floating-point DOT product, FDOT)指令。由于寄存器端口的限制,雙精度指令和4操作數(shù)單精度指令需要讀取兩拍,雙精度結(jié)果寫回需要兩拍。
2.2高性能浮點(diǎn)MAC單元的體系結(jié)構(gòu)設(shè)計(jì)
浮點(diǎn)MAC單元其總體結(jié)構(gòu)設(shè)計(jì)實(shí)現(xiàn)如圖3所示?;诮?jīng)典低延時(shí)浮點(diǎn)乘加結(jié)構(gòu),根據(jù)M-DSP的體系結(jié)構(gòu)設(shè)計(jì)要求設(shè)計(jì)實(shí)現(xiàn)了雙精度浮點(diǎn)乘加運(yùn)算通路,在此基礎(chǔ)上復(fù)用部分硬件實(shí)現(xiàn)單精度指令的相關(guān)運(yùn)算通路,包括單精度浮點(diǎn)乘法/乘加、點(diǎn)積和復(fù)數(shù)操作。為提高性能、降低邏輯設(shè)計(jì)復(fù)雜度,基于傳統(tǒng)浮點(diǎn)乘加結(jié)構(gòu)將單、雙精度指令計(jì)算分開處理,設(shè)計(jì)了一套單、雙精度通路分離[10]的浮點(diǎn)乘加結(jié)構(gòu)。所設(shè)計(jì)的浮點(diǎn)MAC單元包括54×32共享乘法器、指數(shù)計(jì)算、源操作數(shù)例外判斷、尾數(shù)對(duì)階移位、尾數(shù)加法、乘法結(jié)果輸出、結(jié)果符號(hào)計(jì)算、結(jié)果尾數(shù)規(guī)格化移位、結(jié)果舍入和結(jié)果選擇寫回等模塊,單/雙精度浮點(diǎn)操作均需要用到上述模塊。根據(jù)邏輯復(fù)用的設(shè)計(jì)思想,將對(duì)階移位、尾數(shù)加法和前導(dǎo)零等模塊進(jìn)行優(yōu)化,使得硬件邏輯在支持單/雙精度浮點(diǎn)乘加的同時(shí)支持單精度浮點(diǎn)乘法后加法操作。各流水線設(shè)計(jì)如下:
1)流水線第一站設(shè)計(jì)實(shí)現(xiàn)。流水線第一站主要由源操作數(shù)讀取、源操作數(shù)例外判斷、指數(shù)計(jì)算和對(duì)階移位量計(jì)算等運(yùn)算模塊構(gòu)成(乘法器模塊單獨(dú)設(shè)計(jì)),其中乘法器的相關(guān)模塊與定點(diǎn)MAC單元共用,為了減少乘法器面積和提高邏輯復(fù)用的能力,采用4個(gè)27×16的乘法器實(shí)現(xiàn)54×32的乘法操作,雙精度乘法需要兩次乘法操作才能計(jì)算出結(jié)果,乘法器詳細(xì)設(shè)計(jì)在2.3.1節(jié)中介紹。
2)流水線第二站設(shè)計(jì)實(shí)現(xiàn)。流水線第二站主要包括部分積壓縮第3級(jí)、27×16乘法結(jié)果的Sum與Carry的加法和乘法/乘加指令的尾數(shù)對(duì)階移位等運(yùn)算模塊。第3級(jí)部分級(jí)壓縮將乘法器中前兩級(jí)壓縮的結(jié)果采用進(jìn)位保留加法器(Carry-Save Adder, CSA)進(jìn)一步壓縮,在得到單精度乘法的部分積和陣列的Sum和Carry后,采用43位加法器對(duì)Sum和Carry進(jìn)行全加操作,得到高位部分的單精度浮點(diǎn)乘法結(jié)果尾數(shù)。
3)流水線第三站設(shè)計(jì)實(shí)現(xiàn)。流水線第三站包括乘加/乘后加指令的尾數(shù)加法等運(yùn)算模塊。在第三站中,在單精度乘法操作完成后,雙精度乘法的中間結(jié)果Sum和Carry也已計(jì)算出來,采用2個(gè)全加器用來計(jì)算浮點(diǎn)尾數(shù)求和,前導(dǎo)零LZA邏輯有部分邏輯在第三站進(jìn)行。
4)流水線第四站設(shè)計(jì)實(shí)現(xiàn)。第四流水站主要包括前導(dǎo)零預(yù)測(cè)LZA第二部分、乘加結(jié)果尾數(shù)舍入進(jìn)位處理、乘法結(jié)果溢出、例外判斷和乘法結(jié)果選擇寫回等運(yùn)算模塊,在乘法結(jié)果旁路寫回模塊中,單精度乘法執(zhí)行4拍寫回,雙精度乘法由于讀、寫都要多一拍,需要6拍寫回結(jié)果。
5)流水線第五站設(shè)計(jì)實(shí)現(xiàn)。流水線第五站主要包括規(guī)格化移位、尾數(shù)舍入處理、結(jié)果符號(hào)計(jì)算和結(jié)果指數(shù)修正。在第五級(jí)流水線中,浮點(diǎn)MAC除乘法類的各條指令的規(guī)格化移位都使用128位對(duì)數(shù)移位器對(duì)結(jié)果尾數(shù)進(jìn)行規(guī)格化移位。根據(jù)舍入模式以及粘接位的值,舍入模塊判斷是否對(duì)最后結(jié)果尾數(shù)進(jìn)行加1操作。根據(jù)規(guī)格化移位的結(jié)果尾數(shù)和移位量,利用指數(shù)修正模塊可以計(jì)算出正確的結(jié)果指數(shù),根據(jù)尾數(shù)加法的最后結(jié)果采用符號(hào)計(jì)算邏輯判斷結(jié)果符號(hào)。
6)流水線第六站設(shè)計(jì)實(shí)現(xiàn)。第六級(jí)流水線主要包括結(jié)果尾數(shù)的例外判斷、溢出判斷以及結(jié)果選擇寫回處理。結(jié)果尾數(shù)選擇寫回時(shí),先根據(jù)浮點(diǎn)控制寄存器中各標(biāo)志位進(jìn)行結(jié)果處理,待結(jié)果尾數(shù)確定后選擇寫回,寫回時(shí)雙精度指令要寫兩拍。
2.3浮點(diǎn)MAC單元關(guān)鍵模塊設(shè)計(jì)
2.3.1乘法器設(shè)計(jì)
傳統(tǒng)的定點(diǎn)和浮點(diǎn)運(yùn)算部件都有單獨(dú)的乘法器單元。特別是處于同一流水線上的定、浮點(diǎn)單元,這樣的設(shè)計(jì)會(huì)導(dǎo)致硬件資源浪費(fèi)。因此在M-DSP中,采用定點(diǎn)乘加部件與浮點(diǎn)乘加部件復(fù)用同一個(gè)乘法器,這樣可以在滿足功能要求的前提條件下,提高硬件利用率,減少芯片面積。按照指令設(shè)計(jì)需求,定點(diǎn)MAC單元中有32×32和單指令多數(shù)據(jù)(Single Instruction Multiple Data, SIMD)的16×16定點(diǎn)乘法,浮點(diǎn)MAC單元有54×54和24×24的浮點(diǎn)乘法。由于寄存器文件端口個(gè)數(shù)和位寬的限制,浮點(diǎn)乘加的讀操作數(shù)與寫結(jié)果均需要兩拍實(shí)現(xiàn),無法實(shí)現(xiàn)全流水操作。通過優(yōu)化邏輯結(jié)構(gòu),因此將乘法器設(shè)計(jì)為54×32位乘法器,采用4個(gè)27×16的子乘法器搭建而成,復(fù)用的乘法器共三級(jí)流水,其中定點(diǎn)MAC單元使用前面的兩級(jí)流水站,浮點(diǎn)MAC單元使用三級(jí)流水站。由于乘法器面積在定、浮點(diǎn)乘加部件面積中比重較大,共享同一個(gè)乘法器的設(shè)計(jì)可以大幅度減少M(fèi)AC單元的面積。
27×16位乘法器采用兩級(jí)流水實(shí)現(xiàn),其實(shí)現(xiàn)結(jié)構(gòu)如圖4所示,其中基2Booth編碼[11]、第一級(jí)壓縮與第二級(jí)壓縮為第一站,第三級(jí)壓縮和Sum與Carry的加法為第二站。這樣的流水設(shè)計(jì)滿足功能要求和時(shí)序要求,并且可以提高乘法器速度。對(duì)所設(shè)計(jì)的27×16位與54×32位乘法器進(jìn)行模塊級(jí)驗(yàn)證后,使用綜合工具DC在40nm工藝下對(duì)所設(shè)計(jì)的乘法器進(jìn)行了邏輯綜合, 27×16位乘法器關(guān)鍵路徑340ps,單元面積6758.707μm2,單元總功耗6.0817mW;54×32位乘法器關(guān)鍵路徑390ps,單元面積27438.196μm2,單元總功耗17.4217mW。
定、浮點(diǎn)MAC單元共享乘法器結(jié)構(gòu)如圖5所示,其中PP0~PP8表示9個(gè)部分積(Part of the Product, PP),乘法器內(nèi)部有單獨(dú)的源操作數(shù)預(yù)處理模塊,根據(jù)派發(fā)的定、浮點(diǎn)指令對(duì)讀取的源操作數(shù)進(jìn)行處理,浮點(diǎn)尾數(shù)乘法的操作數(shù)均視作無符號(hào)數(shù),而定點(diǎn)的操作數(shù)則要區(qū)分有無符號(hào)分別處理。
2.3.2對(duì)階移位和規(guī)格化移位
本文所設(shè)計(jì)的浮點(diǎn)乘加單元,浮點(diǎn)乘加指令需要對(duì)尾數(shù)進(jìn)行對(duì)階移位,設(shè)計(jì)一個(gè)m位移位器,將尾數(shù)乘積固定在設(shè)計(jì)的移位器最右端,通過固定右移加數(shù)實(shí)現(xiàn)對(duì)階。乘積與加數(shù)的指數(shù)差決定了對(duì)階移位的移位量。同樣在進(jìn)行乘加/減指令時(shí),在對(duì)尾數(shù)進(jìn)行加法后,由于尾數(shù)高位可能會(huì)出現(xiàn)0的情況,為滿足IEEE754浮點(diǎn)數(shù)標(biāo)準(zhǔn),需要對(duì)結(jié)果尾數(shù)進(jìn)行規(guī)格化,使其最高位為1,即規(guī)格化移位,在規(guī)格化的同時(shí)根據(jù)移位量對(duì)預(yù)測(cè)結(jié)果指數(shù)進(jìn)行修正。本文所設(shè)計(jì)的浮點(diǎn)MAC單元,除乘法類指令外其余指令需要進(jìn)行規(guī)格化移位操作。
在浮點(diǎn)MAC 中設(shè)計(jì)了兩個(gè)右移的對(duì)階移位器,一個(gè)是106位用于單/雙精度浮點(diǎn)乘加尾數(shù)對(duì)階移位器,一個(gè)是98位用于點(diǎn)積和復(fù)數(shù)指令運(yùn)算的對(duì)階移位器,均處于浮點(diǎn)MAC流水線上的第二級(jí)流水站。設(shè)計(jì)兩個(gè)對(duì)階移位器主要是考慮時(shí)序問題,通過實(shí)驗(yàn),復(fù)用同一個(gè)對(duì)階移位器時(shí),面積并沒有減少,由于關(guān)鍵路徑的增加,面積還會(huì)有增大。這里以點(diǎn)積指令為例介紹其移位設(shè)計(jì)思想。浮點(diǎn)單精度點(diǎn)積乘法尾數(shù)對(duì)階采用一個(gè)98位的移位器進(jìn)行對(duì)階操作, 98位移位器的結(jié)構(gòu)組成是由48位單精度乘法結(jié)果、用于保護(hù)處理和舍入操作的2位填充位和另一個(gè)單精度乘法尾數(shù)的48位組成,保護(hù)位與舍入位的添加可以簡(jiǎn)化舍入運(yùn)算。
由式(1)可知,在提取公共指數(shù)Ea+Eb+50-2p后,C*D結(jié)果尾數(shù)右移|Ec-(Ea+Eb+50)|位后,兩個(gè)乘法結(jié)果尾數(shù)的小數(shù)點(diǎn)已對(duì)齊。設(shè)兩個(gè)乘法指數(shù)階差為d,則d=Ec+Ed-(Ea+Eb),根據(jù)式(1)提取出的公共指數(shù)Ea+Eb+50-2p,設(shè)對(duì)階移位量為Shift_Bit,則Shift_Bit=Ec+Ed-(Ea+Eb+50)=d-50,不同的移位量會(huì)產(chǎn)生以下幾種對(duì)階移位情形:
a)Shift_Bit≥0時(shí),尾數(shù)mC*mD相對(duì)其在98位對(duì)階移位器中的最高位置左移或者不移動(dòng),則mA*mB的乘法結(jié)果只對(duì)粘貼位sticky位的計(jì)算有影響,sticky=|mA*mB,即A*B乘法結(jié)果的或值,左移時(shí)尾數(shù)后面填充的0對(duì)sticky位沒有影響。
b)Shift_Bit<0且Shift_Bit≥-50時(shí),尾數(shù)mC*mD要右移,移位量為|Shift_Bit|,但mC*mD最多右移50位,而mC*mD還處在98位移位器中,此時(shí)sticky位要等到尾數(shù)加法完成后才能計(jì)算出來。
c)Shift_Bit<-50且Shift_Bit≥-98時(shí),說明移位量大于50,尾數(shù)mC*mD有一部分尾數(shù)會(huì)移出移位器,但不會(huì)完全移出,可以將sticky位分成兩部分(sticky1和sticky2)計(jì)算:sticky1根據(jù)兩個(gè)乘法結(jié)果尾數(shù)在加法完成后,將需要舍入的位進(jìn)行或操作,sticky2是將移出移位器的尾數(shù)值進(jìn)行或操作,最終的sticky=sticky1|sticky2。
d)Shift_Bit≤-98時(shí),尾數(shù)mC*mD全部移出移位器,也可將sticky位分成兩部分計(jì)算:sticky1是加法完成后需舍入的位數(shù)的或值,sticky2是移出移位器的尾數(shù)mC*mD的或值。
同理也設(shè)計(jì)了用于雙精度浮點(diǎn)乘加運(yùn)算的108位對(duì)階移位器,該移位器也可以滿足單精度浮點(diǎn)乘加運(yùn)算的對(duì)階移位。
規(guī)格化移位器是一個(gè)左移的移位器,為滿足IEEE754浮點(diǎn)運(yùn)算標(biāo)準(zhǔn),在尾數(shù)進(jìn)行加法后,結(jié)果尾數(shù)最高位有可能不為1,需根據(jù)計(jì)算出的前導(dǎo)零個(gè)數(shù)將結(jié)果尾數(shù)進(jìn)行左移操作,使結(jié)果尾數(shù)最高位為1。雙精度浮點(diǎn)乘加運(yùn)算尾數(shù)為161位,最大只要一個(gè)161位的規(guī)格化移位器即可滿足要求;單精度浮點(diǎn)乘加運(yùn)算需要一個(gè)74位的規(guī)格化移位器;復(fù)數(shù)與點(diǎn)積運(yùn)算需要一個(gè)98位規(guī)格化移位器。針對(duì)規(guī)格化移位的設(shè)計(jì)需求,設(shè)計(jì)了一個(gè)108位對(duì)數(shù)移位器。主要是對(duì)雙精度的規(guī)格化移位作了優(yōu)化,先判斷計(jì)算出的結(jié)果尾數(shù)前導(dǎo)零個(gè)數(shù)是在前53位還是在后108位:若在前53位,則用移位器直接進(jìn)行108位規(guī)格化移位要求;若在后108位,則結(jié)果尾數(shù)固定左移53位再用移位器進(jìn)行108位移位.單精度浮點(diǎn)乘加與復(fù)數(shù)指令的規(guī)格化移位不需要再進(jìn)行判斷,使用108位規(guī)格化移位完全可以滿足要求。
3FMAC模擬驗(yàn)證與綜合優(yōu)化
3.1FMAC驗(yàn)證
M-DSP中浮點(diǎn)MAC的驗(yàn)證主要從模擬驗(yàn)證和形式驗(yàn)證兩方面來完成[12]。模擬驗(yàn)證主要借助Cadence公司的NC-Verilog等工具完成,包括模塊級(jí)驗(yàn)證、系統(tǒng)級(jí)驗(yàn)證以及覆蓋率分析等;形式化驗(yàn)證主要借助于ATEC(Advanced Test Equivalence Checking)和Formality等價(jià)性檢查工具來完成。通過上述驗(yàn)證方法,發(fā)現(xiàn)了一些邊界值錯(cuò)誤和全局控制信號(hào)的控制錯(cuò)誤,均已修正。
3.1.1黃金模型建立
模塊級(jí)與系統(tǒng)級(jí)驗(yàn)證都需要驗(yàn)證大量功能點(diǎn)來保證功能的正確性,硬件仿真的結(jié)果需要與另一結(jié)果進(jìn)行對(duì)比來判斷,而另一結(jié)果的取得由于數(shù)據(jù)量大且有準(zhǔn)確性高的要求,往往不能由人工計(jì)算得到,所以使用準(zhǔn)確度高、速度快的軟件方式計(jì)算結(jié)果對(duì)于提高驗(yàn)證工作效率十分必要。按照硬件邏輯的執(zhí)行架構(gòu),使用C語言將每條指令的功能描述出來,并與硬件仿真調(diào)用同一組操作數(shù),這一由軟件建立的模型即為黃金模型。黃金模型的結(jié)果不依賴硬件,作為軟件結(jié)果而獨(dú)立存在,因此可以作為參考結(jié)果與硬件結(jié)果進(jìn)行比較,方便檢查硬件結(jié)果的正確性,同時(shí)節(jié)省大量資源。
3.1.2模塊級(jí)驗(yàn)證
浮點(diǎn)MAC的驗(yàn)證首先從模塊級(jí)驗(yàn)證開始,根據(jù)浮點(diǎn)數(shù)的數(shù)據(jù)結(jié)構(gòu)和浮點(diǎn)MAC單元實(shí)現(xiàn)的指令,有針對(duì)性地加入相應(yīng)的功能點(diǎn)測(cè)試激勵(lì),根據(jù)驗(yàn)證結(jié)果分析模塊結(jié)構(gòu)是否存在錯(cuò)誤;模塊級(jí)驗(yàn)證工具采用NC-Verilog仿真工具進(jìn)行驗(yàn)證,通過編寫特定的TestBench加入到模塊級(jí)模擬驗(yàn)證環(huán)境中,查看激勵(lì)響應(yīng),檢測(cè)模塊設(shè)計(jì)的正確性。對(duì)所有子模塊完成充分驗(yàn)證之后,再在浮點(diǎn)MAC單元中進(jìn)行功能驗(yàn)證,模塊級(jí)驗(yàn)證主要內(nèi)容如表2所示。
3.1.3系統(tǒng)級(jí)驗(yàn)證
系統(tǒng)級(jí)驗(yàn)證在單核情況下進(jìn)行,通過匯編指令在高層次對(duì)FMAC進(jìn)行驗(yàn)證,保證FMAC在系統(tǒng)級(jí)工作的正確性。系統(tǒng)級(jí)驗(yàn)證進(jìn)行的主要驗(yàn)證工作有:
1)隨機(jī)數(shù)測(cè)試。隨機(jī)數(shù)驗(yàn)證主要是針對(duì)驗(yàn)證功能點(diǎn)與邊界值時(shí)遺漏的測(cè)試點(diǎn)進(jìn)行的驗(yàn)證,手工編寫測(cè)試激勵(lì)很難將邊界值中的各種情況測(cè)試完全,根據(jù)浮點(diǎn)數(shù)據(jù)的結(jié)構(gòu)特征,將生成的符號(hào)位、指數(shù)位、尾數(shù)位自由交叉組合生成偽隨機(jī)數(shù)測(cè)試激勵(lì),在單核系統(tǒng)下測(cè)試1000萬組隨機(jī)數(shù)。
2)精度測(cè)試。進(jìn)行精度測(cè)試主要是為了查看在相同的標(biāo)準(zhǔn)條件下,浮點(diǎn)運(yùn)算的結(jié)果是否一致或誤差的大小。在進(jìn)行精度測(cè)試時(shí),與Intel的Pentium Dual-core E5300 CPU和TI的TMS320C6678的運(yùn)算結(jié)果進(jìn)行了對(duì)比。由于TMS320C6678沒有復(fù)數(shù)指令和乘加、乘減指令,所以測(cè)試結(jié)果與其有誤差,但與Pentium E5300的結(jié)果完全一致。
3)流水線測(cè)試。指令流水線測(cè)試是為了驗(yàn)證處于系統(tǒng)級(jí)下的浮點(diǎn)MAC單元是否按預(yù)定的執(zhí)行周期進(jìn)行指令流水,浮點(diǎn)MAC單元共有9條指令,每條指令均能按照設(shè)計(jì)的流水節(jié)拍正確地執(zhí)行寫回。
4)全局信號(hào)測(cè)試。全局信號(hào)測(cè)試主要測(cè)試與外部模塊通信的接口和信號(hào)的通信和控制,主要涉及到控制流水線的相關(guān)全局信號(hào),包括全局暫停(Global Stall, G_Stall)信號(hào)、流水線沖刷(Pipeline_Flush, P_Flush)信號(hào)、派發(fā)暫停(Instruction Dispatch Snop, ID_Snop)信號(hào)以及條件執(zhí)行(Condition Execution, Cond_Exe)信號(hào)。以全局信號(hào)測(cè)試為例,當(dāng)全局信號(hào)G_Stall為高時(shí),指令暫緩執(zhí)行,等到為低時(shí)流水線繼續(xù)執(zhí)行,其測(cè)試波形如圖6所示。
5)指令組合測(cè)試。M-DSP中MAC單元包括3個(gè)執(zhí)行單元:浮點(diǎn)MAC單元、定點(diǎn)MAC單元和浮點(diǎn)ALU單元,三條執(zhí)行通路共用一套讀寫端口,因此,在對(duì)浮點(diǎn)MAC指令進(jìn)行驗(yàn)證時(shí),與其他單元的指令組合驗(yàn)證是必要的,不僅可以檢查本單元的正確性,還可以驗(yàn)證整個(gè)MAC流水線通路的正確性。
3.1.4形式驗(yàn)證
形式驗(yàn)證(Formal Verification, FV)是一種集成電路(Integrated Circuit, IC)設(shè)計(jì)的驗(yàn)證方法,它從靜態(tài)的角度對(duì)設(shè)計(jì)進(jìn)行驗(yàn)證,不需要模擬驗(yàn)證的激勵(lì)。ATEC等價(jià)性檢查工具采用形式化的驗(yàn)證方法,將RTL代碼與C語言編寫的黃金模型轉(zhuǎn)化為可以比較的表達(dá)式,在相同的約束條件下進(jìn)行等價(jià)性驗(yàn)證,保證硬件設(shè)計(jì)的正確性。驗(yàn)證初期已對(duì)浮點(diǎn)MAC單元的每條指令建立C語言黃金模型,ATEC等價(jià)性檢查的流程如圖7所示。由于FMAC模塊的復(fù)雜性,在進(jìn)行ATEC驗(yàn)證過程中,當(dāng)存在錯(cuò)誤時(shí),會(huì)快速地舉出反例測(cè)試激勵(lì),可以通過給出的測(cè)試激勵(lì)進(jìn)行錯(cuò)誤定位,大幅縮短設(shè)計(jì)周期。Formality等價(jià)性檢查旨在驗(yàn)證綜合前的RTL代碼與綜合后的門級(jí)網(wǎng)表是否等價(jià)。
3.2邏輯綜合
浮點(diǎn)MAC單元采用Synopsys公司的DC工具進(jìn)行邏輯綜合,綜合環(huán)境是基于40nm工藝庫(kù),在Typical條件下進(jìn)行綜合,綜合的目標(biāo)頻率是1GHz,留給后端物理設(shè)計(jì)的時(shí)間大約是30%,剩下的前端的時(shí)鐘周期大約為450ps,寄存器的輸入延時(shí)設(shè)置為100ps,輸出延時(shí)設(shè)置為100ps。
采用上述綜合約束條件,對(duì)浮點(diǎn)MAC單元的乘法器模塊和MAC運(yùn)算主體結(jié)構(gòu)流水線進(jìn)行邏輯綜合,浮點(diǎn)MAC單元綜合結(jié)果如表3所示,單個(gè)浮點(diǎn)MAC單元綜合面積35250μm2,總功耗6.7570mW,其中動(dòng)態(tài)功耗6.0432mW,靜態(tài)功耗713.7950μW,最長(zhǎng)關(guān)鍵路徑450ps。與參考文獻(xiàn)[8]中的FMAC結(jié)構(gòu)相比,本文采用單雙精度通路分離的乘加結(jié)構(gòu),雖然通路分離,但精簡(jiǎn)了邏輯設(shè)計(jì),降低了硬件設(shè)計(jì)的復(fù)雜度,有效減少了硬件開銷;文獻(xiàn)[8]中的浮點(diǎn)MAC采用單一的浮點(diǎn)乘加結(jié)構(gòu),雖然復(fù)用了大部分邏輯資源,但增加了邏輯設(shè)計(jì)的復(fù)雜度,很多硬件資源并沒有有效復(fù)用,從而導(dǎo)致面積較大,本文所設(shè)計(jì)的FMAC在硬件資源開銷上比參考結(jié)構(gòu)在性能提高了2.17%,單元面積減少了12.95%。
4結(jié)語
本文詳細(xì)設(shè)計(jì)了M-DSP中浮點(diǎn)MAC單元,根據(jù)浮點(diǎn)MAC單元的指令功能和性能要求,設(shè)計(jì)和實(shí)現(xiàn)了單、雙精度通路分離的6級(jí)流水線浮點(diǎn)MAC單元,針對(duì)每個(gè)功能單元進(jìn)行了詳細(xì)設(shè)計(jì),并對(duì)乘法器等關(guān)鍵模塊進(jìn)行了優(yōu)化設(shè)計(jì)。全面驗(yàn)證了所設(shè)計(jì)的浮點(diǎn)MAC單元,基于40nm工藝對(duì)浮點(diǎn)MAC單元采用DC綜合工具進(jìn)行綜合,綜合結(jié)果表明所設(shè)計(jì)的浮點(diǎn)MAC單元工作頻率可達(dá)1GHz,功耗6.7570mW,面積35250μm2。整個(gè)M-DSP芯片1GHz下峰值處理性能達(dá)到單精度浮點(diǎn)復(fù)數(shù)乘法25GFLOPs(Giga FLoating-point Operations Per second)、單精度浮點(diǎn)100GFLOPs、雙精度浮點(diǎn)50GFLOPs,滿足M-DSP芯片對(duì)浮點(diǎn)乘加運(yùn)算的高性能要求。
參考文獻(xiàn):
[1]李海森,李思純,周天.高速DSP原理、應(yīng)用與試驗(yàn)教程[M].北京:清華大學(xué)出版社,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].計(jì)算機(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].計(jì)算機(jī)應(yīng)用,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單元的研究與實(shí)現(xiàn)[D].長(zhǎng)沙.國(guó)防科學(xué)技術(shù)大學(xué),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浮點(diǎn)乘法器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,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]何軍,黃永勤,朱英.分離通路浮點(diǎn)乘加器設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),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]陳海燕,郭陽(yáng),劉祥遠(yuǎn),等.集成電路計(jì)算機(jī)輔助設(shè)計(jì)與驗(yàn)證實(shí)踐[M].長(zhǎng)沙:國(guó)防科技大學(xué)出版社,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.)