高嘉軒,劉鴻瑾,施 博,張紹林,華更新
(1.北京控制工程研究所,北京 100190;2.北京軒宇空間科技有限公司,北京 100080)
目前嵌入式領(lǐng)域主要應(yīng)用的處理器為ARM架構(gòu)處理器,然而該架構(gòu)經(jīng)過多年的研究與擴(kuò)展,其實(shí)現(xiàn)逐漸變得復(fù)雜。同時(shí),ARM架構(gòu)需要高昂的授權(quán)費(fèi),導(dǎo)致應(yīng)用開發(fā)成本增高,不利于進(jìn)行自主擴(kuò)展開發(fā)。而RISC-V是由加州大學(xué)伯克利分校提出的一個開源指令集架構(gòu),其特點(diǎn)是開源、簡單、可擴(kuò)展等,具有良好的內(nèi)部結(jié)構(gòu)[1]。其高度模塊化的指令集架構(gòu)可應(yīng)用于各種需求的處理器設(shè)計(jì)[2]。出于自主可控的考慮,開源的RISC-V架構(gòu)將成為處理器開發(fā)的新方向。作為一種新興的開源指令集架構(gòu),RISC-V已經(jīng)在學(xué)術(shù)界和工業(yè)界都得到了廣泛的關(guān)注[3]。RISC-V生態(tài)系統(tǒng)的開源社區(qū)為其提供了豐富的對應(yīng)工具鏈與開源軟件,使研究者們能夠在研究中快速利用RISC-V[4]?;赗ISC-V官方指令集手冊,已發(fā)布了多款RISC-V處理器[5],比如Rocket Core[6]、SiFive[7]、BOOM Core[8]和LowRISCSoC[5]。
乘法器是處理器的運(yùn)算核心,其運(yùn)行速度影響了處理器的運(yùn)行速度[9]。許多數(shù)字信號處理和機(jī)器學(xué)習(xí)應(yīng)用需要進(jìn)行大量乘法計(jì)算,其表現(xiàn)在很大程度上受到乘法器性能的限制。以卷積神經(jīng)網(wǎng)絡(luò)為例,超過90%的CNN計(jì)算為乘法累加計(jì)算[10]。因此面對嵌入式領(lǐng)域乘法算力需求較高的應(yīng)用場景,研究開源指令集架構(gòu)的RISC-V乘法器算力與功耗優(yōu)化十分必要。乘法器主要包括三個階段:操作數(shù)相乘產(chǎn)生部分積、部分積累加產(chǎn)生兩個結(jié)果以及兩個結(jié)果相加產(chǎn)生最終結(jié)果。目前整型乘法器的算法設(shè)計(jì)主要有串行累加陣列、Booth編碼和Wallace樹型結(jié)構(gòu)[11]。針對Booth編碼的研究,通過改進(jìn)后的4位編碼加快了對部分積最低位的獲取,但編碼位數(shù)更多,邏輯更為復(fù)雜[12]。而縮減基4-Booth編碼位數(shù),則無法對最低位獲取進(jìn)行優(yōu)化,浪費(fèi)了芯片面積[13]。有研究采用了符號擴(kuò)展,從而減少了資源消耗,但未考慮部分積累加時(shí)的壓縮[14]。而針對Wallace樹型結(jié)構(gòu),有研究表明僅由基本壓縮器構(gòu)成 Wallace 樹結(jié)構(gòu),需要經(jīng)過5級壓縮才能將9個部分積壓縮為2個結(jié)果,其運(yùn)算效率十分低下[15]。文獻(xiàn)[16]對Wallace樹型結(jié)構(gòu)進(jìn)行了改進(jìn),縮短了壓縮延時(shí),解決了蜂鳥E203部分積壓縮延時(shí)大的問題,但其未考慮有符號部分積擴(kuò)展帶來的損失。對壓縮器的研究主要是對其硬件結(jié)構(gòu)進(jìn)行研究,通過傳輸門結(jié)構(gòu)設(shè)計(jì)基本壓縮器,節(jié)省了壓縮器面積,但不能實(shí)現(xiàn)雙軌輸出[17]。而高階壓縮器可以由多個基本壓縮器串聯(lián)形成,但關(guān)鍵路徑上門數(shù)較多,延時(shí)較長影響壓縮器性能[18]。
為了在不提升處理器功耗的前提下,提高RISC-V乘法器算力,減少進(jìn)位次數(shù),壓縮延時(shí),本文提出了一種基于符號補(bǔ)償、基4-Booth編碼以及Wallace樹型結(jié)構(gòu)的優(yōu)化乘法器。由于基4-Booth編碼的系數(shù)存在負(fù)數(shù),在壓縮時(shí),需要進(jìn)行符號擴(kuò)展補(bǔ)齊,負(fù)數(shù)部分積累加時(shí)將產(chǎn)生大量進(jìn)位以及比特翻轉(zhuǎn)。針對該問題,本文提出了基于符號補(bǔ)償?shù)幕?-Booth編碼,有效壓縮了負(fù)數(shù)符號擴(kuò)展時(shí)連續(xù)比特1,減少了在加法時(shí)造成的進(jìn)位以及比特翻轉(zhuǎn),降低了乘法器功耗。傳統(tǒng)Wallace樹型結(jié)構(gòu)由于硬件壓縮器功能簡單,因此其層次過多,關(guān)鍵路徑過長,結(jié)構(gòu)不對稱。針對該問題,本文提出了交替使用3-2壓縮器與4-2壓縮器的Wallace樹型結(jié)構(gòu)。改進(jìn)后的Wallace樹型結(jié)構(gòu)對稱,有效減少了樹型結(jié)構(gòu)的層次,縮短了關(guān)鍵路徑的長度,壓縮了累加過程的延遲,降低了乘法指令執(zhí)行延遲,提高了處理器乘法算力。同時(shí)由于壓縮器階數(shù)不高,因此對電路復(fù)雜度以及延遲未有明顯影響。本文從仿真、綜合以及板級層面對其進(jìn)行了功能性驗(yàn)證以及性能評估,測試結(jié)果表明,與未改進(jìn)的PicoRV32相比,使用改進(jìn)乘法器的PicoRV32在功耗有所降低的情況下,乘法器性能得到了顯著提升。
作為一種新興指令集架構(gòu),RISC-V架構(gòu)在設(shè)計(jì)之初總結(jié)了傳統(tǒng)指令集的優(yōu)缺點(diǎn),避免了傳統(tǒng)指令集的不合理設(shè)計(jì)。RISC-V指令編碼簡單,并且為擴(kuò)展指令集預(yù)留出了足夠的編碼空間。RISC-V指令主要分為6個類型[19],包括:R型指令:寄存器-寄存器操作;I型指令:短立即數(shù)和訪存load操作;S型指令:訪存store操作;B型指令:條件跳轉(zhuǎn)操作;U型指令:長立即數(shù)操作;J型指令:無條件跳轉(zhuǎn)操作。各個類型指令結(jié)構(gòu)如圖1所示。
其中,opcode為操作碼,表示指令操作。funct3和funct7部分作為opcode的附加字段,和opcode共同決定指令的具體操作。rs1和rs2表示兩個源操作數(shù)的寄存器編號,rd表示目的操作數(shù)的寄存器編號。該編碼結(jié)構(gòu)位置固定,便于譯碼模塊對指令進(jìn)行解析。
RISC-V指令集的整數(shù)乘法指令共有4條,分別為MUL、MULH、MULHSU、MULHU,均為R型指令。指令具體描述及用法如表1所示。
表1 RISC-V乘法指令表
其中MUL指令將源操作數(shù)進(jìn)行符號位擴(kuò)展,選取計(jì)算結(jié)果的低32位,MULH指令將源操作數(shù)進(jìn)行符號位擴(kuò)展,選取計(jì)算結(jié)果的高32位,MULHSU指令的源操作數(shù)rs1為有符號數(shù),rs2為無符號數(shù),指令結(jié)果選取計(jì)算結(jié)果的高32位,MULHU指令將源操作數(shù)進(jìn)行零擴(kuò)展,選取計(jì)算結(jié)果的高32位。
1951年,A.D Booth 在其論文“A Signed binary multiplication technique”中提出一種快速乘法算法——Booth算法[20],即為了解決有符號乘法運(yùn)算中復(fù)雜的符號修正問題而提出一種乘法算法,將乘數(shù)轉(zhuǎn)變數(shù)據(jù)表示形式,使其數(shù)據(jù)出現(xiàn)盡可能多的0,其編碼原理如式(1)所示。
y=2n-1(-yn-1+yn-2)+2n-2(-yn-2+yn-3)+
2(-y1+y0)+(-y0+y-1)
(1)
式中,y為乘數(shù),n為乘數(shù)位數(shù),yn-1為y的n-1位。
從式(1)可以看出,基礎(chǔ)Booth編碼并不能在硬件乘法器電路中起到真正的優(yōu)化作用,實(shí)際部分積個數(shù)并未減少。因此在基2-Booth編碼的基礎(chǔ)上提出了改進(jìn)的Booth編碼,即基4-Booth編碼,進(jìn)一步減少部分積個數(shù),從而達(dá)到減少硬件加法器的目的,其編碼原理如式(2)所示。
y=2n-2(-2yn-1+yn-2+yn-3)+
2n-4(-2yn-3+yn-4+yn-5)+
22(-2y3+y2+y1)+(-2y1+y0+y-1)
(2)
式中,y為乘數(shù),n為乘數(shù)位數(shù),yn-1為y的n-1位。
從式(2)可以看出,多項(xiàng)式的項(xiàng)數(shù)相較于式1減少了一半,因此通過基4-Booth編碼可以有效減少部分積的個數(shù)。
然而基4-Booth編碼的系數(shù)存在負(fù)數(shù)的情況,以2n-2項(xiàng)系數(shù)為例,當(dāng)yn-2=0,yn-3=0且yn-1=1時(shí),該項(xiàng)系數(shù)為-2,因此需要考慮負(fù)數(shù)部分積對壓縮的影響。由于部分積位數(shù)不同,在壓縮時(shí),需要進(jìn)行符號擴(kuò)展進(jìn)行補(bǔ)齊,當(dāng)部分積為負(fù)數(shù)時(shí),符號位補(bǔ)齊為1,累加時(shí)將產(chǎn)生大量進(jìn)位以及比特翻轉(zhuǎn),增加乘法器功耗。
基4-Booth編碼優(yōu)化了整型乘法中部分積的數(shù)量,從而減少累加次數(shù)。而為了進(jìn)一步減少累加操作產(chǎn)生的延遲,1964年,C.S.Wallace提出的一種高效快速的加法樹結(jié)構(gòu),被后人稱為Wallace樹[21],其核心思想為將每3個加數(shù)分為一組,壓縮至2個加數(shù),即計(jì)算結(jié)果與進(jìn)位,循環(huán)往復(fù),最終得到累加結(jié)果,其結(jié)構(gòu)如圖2所示。
圖2 Wallace樹型結(jié)構(gòu)圖
圖3 RISC-V處理器結(jié)構(gòu)圖
Wallace樹型結(jié)構(gòu)提高了累加操作的執(zhí)行并發(fā)性,通過樹型結(jié)構(gòu)提高了硬件壓縮器的復(fù)用性,縮短了關(guān)鍵路徑的長度,有效地縮短了累加操作的執(zhí)行時(shí)間。
然而傳統(tǒng)Wallace樹型結(jié)構(gòu)由于硬件壓縮器功能簡單,其層次依舊過多,并且對于32位數(shù)據(jù)計(jì)算,其結(jié)構(gòu)不對稱,增加了電路的復(fù)雜度,消耗了更多布線資源。不規(guī)則的布局布線結(jié)構(gòu),增大了關(guān)鍵路徑的時(shí)延。隨著硬件壓縮器的不斷發(fā)展,Wallace樹型結(jié)構(gòu)可通過使用高階壓縮器實(shí)現(xiàn)進(jìn)一步優(yōu)化。而階數(shù)過高的壓縮器,例如7-3壓縮器、6-3壓縮器存在電路設(shè)計(jì)復(fù)雜、硬件占用資源多、功耗高以及面積大等問題,因此面對嵌入式領(lǐng)域?qū)Φ凸牡男枨?,需要在控制乘法器功耗以及面積的情況下,優(yōu)化Wallace樹型結(jié)構(gòu),從而提高乘法器算力。
本文設(shè)計(jì)的乘法器用于單發(fā)射順序執(zhí)行五級流水線RISC-V處理器32×32位有符號整數(shù)乘法運(yùn)算,主要模塊包括:通過改進(jìn)的基4-Booth編碼產(chǎn)生部分積,通過改進(jìn)的Wallace樹型結(jié)構(gòu)對部分積進(jìn)行壓縮。RISC-V處理器結(jié)構(gòu)圖以及乘法器的結(jié)構(gòu)圖如圖3所示。
在處理器五級流水線結(jié)構(gòu)中,乘法器位于執(zhí)行階段,譯碼模塊從指令中解析出被乘數(shù)與乘數(shù),通過改進(jìn)的基4-Booth編碼產(chǎn)生部分積,部分積陣列通過Wallace樹型結(jié)構(gòu)計(jì)算出累加結(jié)果和進(jìn)位兩個數(shù)據(jù),最后通過加法器計(jì)算出最終結(jié)果,通過多選器根據(jù)指令功能選取對應(yīng)的結(jié)果位。
本文對基4-Booth編碼進(jìn)行改進(jìn),將補(bǔ)碼計(jì)算以及符號位擴(kuò)展與基4-Booth編碼相結(jié)合,減少符號位擴(kuò)展對壓縮效率的影響。對Wallace樹型結(jié)構(gòu)進(jìn)行改進(jìn),加入4-2壓縮器,使改進(jìn)的Wallace樹型結(jié)構(gòu)對稱,減少其層次數(shù)量,縮短關(guān)鍵路徑長度。部分積陣列經(jīng)過改進(jìn)后的Wallace樹型結(jié)構(gòu),產(chǎn)生兩個結(jié)果,通過全加器得到乘法計(jì)算結(jié)果。
基4-Booth編碼減少了部分積的數(shù)量,其中存在負(fù)數(shù)部分積,而當(dāng)部分積為負(fù)數(shù)時(shí),符號位補(bǔ)齊為1,累加時(shí)將產(chǎn)生大量進(jìn)位以及比特翻轉(zhuǎn),增加乘法器功耗。針對該符號位問題,有研究提出了一種有效的符號補(bǔ)償方式[22],有效減少了符號位擴(kuò)展以及補(bǔ)碼引起的功率消耗。采用符號位直接擴(kuò)展時(shí),以8位數(shù)據(jù)snXXXXXXX為例,其中sn表示符號位,將其擴(kuò)展為16位數(shù)據(jù),其結(jié)果為sn sn sn sn sn sn sn sn snXXXXXXX。而使用該符號補(bǔ)償方式,可對其進(jìn)行等價(jià)邏輯變換,如式(3)所示:
snsnsnsnsnsnsnsnsnXXXXXXX=
(3)
從式(3)可以得出,由于符號位擴(kuò)展部分為連續(xù)相同的數(shù)據(jù),因此根據(jù)二進(jìn)制計(jì)算特點(diǎn),可將符號擴(kuò)展變換為只與符號位及固定值有關(guān)的運(yùn)算,而固定值可提前根據(jù)部分積數(shù)量以及位數(shù)進(jìn)行計(jì)算,其計(jì)算結(jié)果可在部分積累加前通過編碼實(shí)現(xiàn)。因此本文通過將該符號補(bǔ)償方式、補(bǔ)碼計(jì)算與基4-Booth編碼相結(jié)合,形成改進(jìn)后的基4-Booth編碼,擴(kuò)展方式如圖4所示。
圖4 改進(jìn)符號擴(kuò)展圖
本文在基4-Booth編碼的基礎(chǔ)上,加入對符號補(bǔ)償以及補(bǔ)碼的編碼,從而將上述符號補(bǔ)償方式與基4-Booth編碼相結(jié)合,減少部分積壓縮的功率消耗。本文采用如表2所示的編碼。
表2 改進(jìn)的基4-Booth編碼表
表中y2i+1y2iy2i-1代表乘數(shù)的第2i+1、2i和2i-1位,對于32位處理器,i的范圍為0到16;Coefi代表第i個部分積系數(shù);E代表乘上系數(shù)后的符號位,sn代表被乘數(shù)的符號位;S代表補(bǔ)碼加1操作產(chǎn)生的中間值,本級的中間值拼接至下一級部分積,在壓縮過程中實(shí)現(xiàn)補(bǔ)碼計(jì)算。改進(jìn)的基4-Booth編碼電路圖如圖5所示。
其中:Y_2i+1、Y_2i和Y_2i-1代表y2i+1y2iy2i-1,即乘數(shù)的第2i+1、2i和2i-1位,sign代表Coefi的符號,coef1代表Coefi[1],coef0代表Coefi[0],E代表被乘數(shù)符號位的系數(shù),S1代表中間值S[1],S0代表中間值S[0]。
圖5 改進(jìn)基4-Booth編碼電路圖
從圖5可以看出,改進(jìn)的Booth編碼通過與門、或門、非門以及二選一多選器實(shí)現(xiàn),經(jīng)過4個門的時(shí)間延遲即可得出編碼結(jié)果。
根據(jù)Coefi的編碼結(jié)果,分別對被乘數(shù)進(jìn)行相應(yīng)操作。對于系數(shù)為負(fù)數(shù)的部分積,對被乘數(shù)進(jìn)行按位取反,對于系數(shù)絕對值為2的部分積,對被乘數(shù)進(jìn)行左移1位操作。將乘以系數(shù)的部分積與編碼后的符號位以及中間值進(jìn)行拼接,形成改進(jìn)后的部分積,該部分積陣列輸入Wallace樹型結(jié)構(gòu)進(jìn)行累加計(jì)算。
采用基于符號補(bǔ)償?shù)幕?-Booth編碼,不需要擴(kuò)展全部符號位,減少了由于擴(kuò)展大量連續(xù)的1,在加法時(shí)造成的進(jìn)位以及翻轉(zhuǎn),降低了乘法器功耗。
基礎(chǔ)的Wallace樹型結(jié)構(gòu)采用3-2壓縮器,通過樹型結(jié)構(gòu)有效提高累加操作的并行性,同時(shí)從硬件設(shè)計(jì)角度,增加了加法器的復(fù)用性,減少了硬件加法器的數(shù)量。為了更好地配合32位處理器的運(yùn)算需求,在不提高處理器功耗的情況下,盡可能減少Wallace樹型結(jié)構(gòu)的層次,提出了一種交替使用3-2壓縮器與4-2壓縮器的Wallace樹型結(jié)構(gòu),改進(jìn)后的Wallace樹型結(jié)構(gòu)示意圖如圖6所示。
圖6 改進(jìn)的Wallace樹型結(jié)構(gòu)圖
由于使用符號補(bǔ)償方式,32位操作數(shù)將產(chǎn)生17個部分積,因此為了使Wallace樹型結(jié)構(gòu)對稱,將32位乘法運(yùn)算經(jīng)過符號擴(kuò)展,產(chǎn)生18個部分積,18個部分積經(jīng)過3-2壓縮器產(chǎn)生12個操作數(shù),再經(jīng)過4-2壓縮器產(chǎn)生6個操作數(shù),6個操作數(shù)經(jīng)過3-2壓縮器產(chǎn)生4個操作數(shù),在經(jīng)過4-2壓縮器產(chǎn)生最終的2個結(jié)果。
其中3-2壓縮器的邏輯表達(dá)式如式(4)~(5)所示:
S0=X0⊕X1⊕X2
(4)
C1=X0X1+X0X2+X1X2
(5)
式中,S0為第0個3-2壓縮器的壓縮結(jié)果,C1為第0個3-2壓縮器的進(jìn)位結(jié)果,X0、X1和X2為3-2壓縮器的3個輸入操作數(shù)。
其1位電路示意圖如圖7所示。
圖7 3-2壓縮器1位電路圖
從圖7可以看出,3-2壓縮器僅使用與門、或門和或非門構(gòu)成,經(jīng)過3個門的時(shí)間延遲即可得出結(jié)果。
4-2壓縮器,又稱5-3計(jì)數(shù)器,包括5個輸入和3個輸出,輸入和輸出分別包括一個進(jìn)位。傳統(tǒng)的4-2壓縮器是由兩個串行連接的3-2壓縮器組成,而改進(jìn)后的4-2壓縮器可以通過異或門和2-1的多選器構(gòu)成,改進(jìn)后的4-2壓縮器的邏輯表達(dá)式如下所示:
Cout=X0X1+X0X2+X1X2
Xor=X0⊕X1⊕X2⊕X3
S0=Xor⊕Cin
式中,S0為第0個4-2壓縮器的壓縮結(jié)果,C1為第0個4-2壓縮器的進(jìn)位結(jié)果,Cout為同級4-2壓縮器的進(jìn)位結(jié)果,X0、X1、X2和X3為4-2壓縮器的4個輸入操作數(shù)。
由于Cout的邏輯表達(dá)式與Cin無關(guān),所以4-2壓縮器之間雖有信號連接,但不會形成行波進(jìn)位鏈,4-2壓縮器之間依舊是并行的,其結(jié)構(gòu)示意圖如圖8所示。
圖8 4-2壓縮器結(jié)構(gòu)圖
圖9 乘法指令波形圖
采用3-2壓縮器和4-2壓縮器交替的Wallace樹型結(jié)構(gòu)對稱,減少了布局布線資源,有效減少了樹型結(jié)構(gòu)的層次,縮短了關(guān)鍵路徑的長度,壓縮了累加過程的延遲。同時(shí),使用的3-2壓縮器和4-2壓縮器電路簡單,電路最大延時(shí)短,未造成處理器功耗以及面積大幅提高。
本文的實(shí)驗(yàn)環(huán)境如表3所示。
表3 實(shí)驗(yàn)環(huán)境表
采用Verilog語言對設(shè)計(jì)的32位乘法器進(jìn)行實(shí)現(xiàn),并嵌入到PicoRV32中,通過匯編語言對乘法器進(jìn)行功能仿真,將結(jié)果與Spike仿真結(jié)果進(jìn)行對比驗(yàn)證乘法器功能的正確性。
圖9為乘法器執(zhí)行乘法指令的仿真波形,其結(jié)果與Spike仿真的結(jié)果一致。
從圖9可以看出,通過MUL指令計(jì)算32’habcde與32’habcde相乘,其計(jì)算結(jié)果為32’h4caed084,與預(yù)期結(jié)果相符。通過如下所示代碼,對其余指令以及邊界值進(jìn)行驗(yàn)證。
.global MUL
MUL:
li x3, 0x80000000
li x4, 0x7fffffff
li x10, 0xabcde
mul x5, x0, x3
bne x5, x0, __fail
mul x5, x0, x0
bne x5, x0, __fail
mul x5, x0, x4
bne x5, x0, __fail
mul x5, x4, x4
li x6, 0x1
bne x5, x6, __fail
mul x5, x4, x0
bne x5, x0, __fail
mul x5, x4, x3
li x6, 0x80000000
bne x5, x6, __fail
mul x5, x4, x10
li x6, 0xfff54322
bne x5, x6, __fail
mul x5, x3, x3
li x6, 0x0
bne x5, x6, __fail
mul x5, x3, x0
bne x5, x0, __fail
mul x5, x3, x4
li x6, 0x80000000
bne x6, x5, __fail
mul x5, x3, x10
li x6, 0x0
bne x6, x5, __fail
mul x5, x10, x10
li x6, 0x4caed084
bne x6, x5, __fail
上述代碼對32位操作數(shù)的最大正值0x7fffffff、最小負(fù)值0x80000000、中間值0xabcde以及0進(jìn)行乘法計(jì)算,通過對乘法器計(jì)算結(jié)果的判斷,進(jìn)行程序跳轉(zhuǎn),從而測試指令執(zhí)行結(jié)果是否正確。當(dāng)指令結(jié)果正確,即符合預(yù)期時(shí),程序順序執(zhí)行,仿真成功結(jié)束。當(dāng)指令結(jié)果不正確時(shí),程序跳轉(zhuǎn)至__fail,表示程序執(zhí)行錯誤,仿真錯誤結(jié)束。其余3條乘法指令與MUL指令測試程序相同。如圖10所示,測試結(jié)果為仿真成功結(jié)束,表明指令執(zhí)行結(jié)果正確,即設(shè)計(jì)的乘法器功能正確。
圖10 乘法指令測試結(jié)果圖
通過圖9波形圖,本文的乘法器接收到乘法指令,第一個時(shí)鐘周期計(jì)算累加結(jié)果以及進(jìn)位,第二個時(shí)鐘周期兩者相加得出最終結(jié)果,因此乘法所需時(shí)鐘周期為2個時(shí)鐘周期。為了更加直觀地體現(xiàn)本文乘法器的性能,將優(yōu)化后的乘法器與PicoRV32乘法器以及文獻(xiàn)[16]進(jìn)行了性能對比,結(jié)果如表4所示。
表4 乘法器時(shí)鐘周期數(shù)對比表
從表4可以看出,與文獻(xiàn)[16]相比,本文的乘法器執(zhí)行乘法運(yùn)算花費(fèi)的時(shí)鐘周期數(shù)相同。而相較于PicoRV32乘法器,本文改進(jìn)后的乘法器大幅減少了乘法計(jì)算所花費(fèi)的時(shí)鐘周期數(shù),乘法指令執(zhí)行時(shí)間縮短了88.2%,減少了乘法指令的執(zhí)行延遲,提高了處理器的算力。
本文使用Synopsys公司的Design Compiler軟件,基于smic40nm工藝庫,對乘法器進(jìn)行了綜合,對其面積進(jìn)行了評估,結(jié)果如表5所示。
表5 乘法器面積對比表
從表5可以看出,由于擴(kuò)展了基4-Booth編碼以及使用了4-2壓縮器,本文乘法器相較于PicoRV32原乘法器在面積上增加了13.3%。而與文獻(xiàn)[16]乘法器相比,本文乘法器在面積上優(yōu)于文獻(xiàn)[16],減少了10.6%。從表4可以得出,本文乘法器與文獻(xiàn)[16]乘法器執(zhí)行乘法指令時(shí)鐘周期數(shù)相同,因此本文設(shè)計(jì)優(yōu)化的乘法器優(yōu)于文獻(xiàn)[16]。
Dhrystone可對處理器的整型運(yùn)算性能進(jìn)行測量。因此本文通過運(yùn)行測量處理器運(yùn)算能力的基準(zhǔn)程序之一的Dhrystone,在板級對帶有本文乘法器的RISC-V處理器進(jìn)行了進(jìn)一步性能與功耗測試,其性能與PicoRV32對比如表6所示。
表6 處理器性能對比表
從表6可以看出,與PicoRV32相比,本文設(shè)計(jì)的乘法器在算力方面提高了71.7%,而處理器算力提高的同時(shí),處理器功耗降低了4.9%。文獻(xiàn)[16]提升了處理器算力,但處理器功耗也有所提高,而本文的乘法器與其相比,算力有所提高,功耗有所降低,提高了處理器的能耗比。
本文通過對RISC-V架構(gòu)中整數(shù)乘法指令的研究以及乘法器的研究,提出了基于符號補(bǔ)償?shù)幕?-Booth編碼以及使用3-2壓縮器和4-2壓縮的改進(jìn)Wallace樹型結(jié)構(gòu),設(shè)計(jì)實(shí)現(xiàn)了改進(jìn)后的RISC-V處理器乘法器。通過RISC-V匯編語言對改進(jìn)后的乘法器進(jìn)行功能仿真,驗(yàn)證了其功能正確性。使用Design Compiler軟件對乘法器面積進(jìn)行了綜合,與處理器原乘法器以及已有工作進(jìn)行了對比分析。通過板級測試,對處理器算力以及功耗進(jìn)行了評估,并與原處理器以及已有工作進(jìn)行了對比分析。結(jié)果表明,本文改進(jìn)的乘法器功能正確,執(zhí)行整型乘法指令所花費(fèi)的時(shí)鐘周期為2,相較于PicoRV32乘法器,縮短了88.2%。Dhrystone分?jǐn)?shù)為2.115 728 DMIPS/MHz,功耗為0.035 42 W,相較于未改進(jìn)的PicoRV32,性能提高了71.7%,功耗降低了4.9%,在功耗有少許降低的情況下,大幅提高了處理器性能,提高了處理器計(jì)算速度。與已有研究工作相比,本文改進(jìn)的乘法器在執(zhí)行乘法指令時(shí)鐘周期數(shù)相同的情況下,面積與功耗均優(yōu)于已有工作,適用于嵌入式領(lǐng)域?qū)μ幚砥髅娣e、功耗以及算力有較高需求的應(yīng)用場景。本文的乘法器確實(shí)在縮短整型乘法執(zhí)行時(shí)間方面有一定效果,但在功耗方面優(yōu)化并不明顯,同時(shí)由于增加了符號擴(kuò)展編碼,乘法器面積有所增加,未來的改進(jìn)方向?yàn)椋?/p>
1)優(yōu)化編碼設(shè)計(jì),盡可能降低編碼邏輯復(fù)雜度;
2)考慮乘法器的低功耗優(yōu)化。