潘樹朋,劉有耀,焦繼業(yè),李 昭
1.西安郵電大學(xué) 電子工程學(xué)院,西安710121
2.西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,西安710121
隨著嵌入式系統(tǒng)中浮點(diǎn)運(yùn)算的需求日益增多,應(yīng)用范圍從氣候建模、電磁散射理論到圖像處理、FFT 計(jì)算[1]、特征值計(jì)算等。為了支持和加速這些應(yīng)用,需要能夠產(chǎn)生高吞吐量的高性能計(jì)算設(shè)備。浮點(diǎn)處理器(Floating Point Unit,F(xiàn)PU)極大地提高了這些高計(jì)算應(yīng)用的性能。在大多數(shù)現(xiàn)代通用計(jì)算機(jī)體系結(jié)構(gòu)中,浮點(diǎn)處理器集成在處理器芯片內(nèi),比如ARM、MIPS等[2]。浮點(diǎn)處理器作為一種加速器,與整數(shù)流水線并行工作,并從主處理器分擔(dān)大型計(jì)算、高延遲浮點(diǎn)指令。如果這些指令是由主處理器執(zhí)行,由于浮點(diǎn)除法、平方根和乘累加等運(yùn)算需要大量的計(jì)算和較長的等待時(shí)間,會(huì)降低主處理器的速度,運(yùn)算精度也會(huì)有所損失,因此浮點(diǎn)處理器有助于加速整個(gè)芯片[3]。
許多嵌入式處理器,尤其是一些傳統(tǒng)的設(shè)計(jì),不支持浮點(diǎn)運(yùn)算。許多浮點(diǎn)處理器的功能可以通過軟件庫來仿真[4],雖然節(jié)省了浮點(diǎn)處理器的附加硬件成本,但是速度明顯較慢,不足以滿足嵌入式處理器的實(shí)時(shí)性要求。為了提高系統(tǒng)的性能,需要對(duì)浮點(diǎn)處理器進(jìn)行硬件實(shí)現(xiàn)。
到目前為止,浮點(diǎn)處理器的設(shè)計(jì)已經(jīng)做了很多工作。文獻(xiàn)[5-6]介紹了一種64 位、5 級(jí)流水線、單發(fā)射順序執(zhí)行的開源RISC-V處理器核Rocket-Chip,由伯克利大學(xué)設(shè)計(jì),具有兼容IEEE754-2008 標(biāo)準(zhǔn)的FPU,但采用Chisel語言編寫,可讀性較差。文獻(xiàn)[7]介紹了浮點(diǎn)向量協(xié)處理器FPVC,支持標(biāo)量計(jì)算,實(shí)現(xiàn)了浮點(diǎn)加法、乘法、除法和平方根運(yùn)算,僅支持單精度操作數(shù)。文獻(xiàn)[8]為了提高基于定點(diǎn)DSP的數(shù)字平臺(tái)的計(jì)算能力,設(shè)計(jì)了一種基于FPGA的可配置浮點(diǎn)協(xié)處理器,僅支持單精度操作數(shù)。此外,一些設(shè)計(jì)具有有限的算術(shù)運(yùn)算,文獻(xiàn)[8]的設(shè)計(jì)僅支持加、減、除運(yùn)算。文獻(xiàn)[9]實(shí)現(xiàn)了采用SPARC架構(gòu)設(shè)計(jì)的浮點(diǎn)協(xié)處理器,支持加法、乘法和除法運(yùn)算。文獻(xiàn)[10]提出了采用RISC 架構(gòu)設(shè)計(jì)的浮點(diǎn)協(xié)處理器,僅實(shí)現(xiàn)了單精度浮點(diǎn)運(yùn)算,缺少乘累加等主要運(yùn)算。
針對(duì)上述公開文獻(xiàn)設(shè)計(jì)方案的不足:(1)支持的浮點(diǎn)精度單一;(2)運(yùn)算種類有限,不能滿足多種運(yùn)算需求。因此,本文基于RISC-V 指令集實(shí)現(xiàn)了一種支持單精度的浮點(diǎn)處理器,具有廣泛的算術(shù)運(yùn)算,如加法、減法、乘法、除法、平方根、乘累加和比較,與IEEE-754 2008標(biāo)準(zhǔn)完全兼容。
RISC-V 的指令集編碼非常規(guī)整,指令所需的通用寄存器的索引(Index)都被放在固定的位置。因此指令譯碼器可以非常便捷地譯碼出寄存器索引,然后讀取通用寄存器組。RISC-V基本指令類型如圖1所示,分別為R類、I類、S類、U類。
圖1 RISC-V指令格式
RISC-V是一個(gè)新的指令集體系結(jié)構(gòu)(ISA),完全開放,適合直接在硬件上實(shí)現(xiàn),不僅僅是適用于模擬或者二進(jìn)制翻譯,還支持豐富的用戶級(jí)ISA 擴(kuò)展,具有可選的變長指令,以支持?jǐn)U展可用的指令編碼空間和一個(gè)可選的密集指令編碼,以提高性能、靜態(tài)代碼大小和能耗效率。
為了滿足某些對(duì)于代碼體積要求較高的場(chǎng)景(例如嵌入式領(lǐng)域),RISC-V 定義了一種可選的壓縮(Compressed)指令子集,用字母C 表示,也可以用RVC 表示。RISC-V具有后發(fā)優(yōu)勢(shì),從一開始便規(guī)劃了壓縮指令,預(yù)留了足夠的編碼空間,16 位長指令與普通的32 位長指令可以無縫自由地交織在一起,處理器也沒有定義額外的狀態(tài)。
RISC-V 架構(gòu)的研究者進(jìn)行了詳細(xì)的代碼體積分析,如圖2所示,通過分析結(jié)果可以看出,RV32C的代碼體積相比RV32 的代碼體積減少了40%,并且與ARM,MIPS和x86等架構(gòu)相比都有不錯(cuò)的表現(xiàn)。
圖2 各指令集的代碼密度比較
當(dāng)今主流的指令集架構(gòu)有MIPS 和ARM 等,MIPS架構(gòu)主要用于計(jì)算機(jī),ARM 架構(gòu)相對(duì)于MIPS 更精簡(jiǎn)、能耗更低,主要用于移動(dòng)設(shè)備端,而RISC-V作為新興起的指令集架構(gòu)[11],不僅能實(shí)現(xiàn)低功耗且更加適合嵌入式領(lǐng)域[12]。在選擇用RISC-V 指令集實(shí)現(xiàn)浮點(diǎn)處理器之前,對(duì)MIPS、ARM和RISC-V中的浮點(diǎn)指令集從幾個(gè)方面進(jìn)行了分析,如表1所示。
表1 RISC-V、ARM、MIPS浮點(diǎn)指令集分析
RISC-V 指令集使用模塊化的方式進(jìn)行組織,每一個(gè)模塊使用一個(gè)英文字母來表示。RISC-V最基本也是唯一強(qiáng)制要求實(shí)現(xiàn)的指令集部分是由I字母表示的基本整數(shù)指令子集。使用該整數(shù)指令子集,便能夠?qū)崿F(xiàn)完整的軟件編譯器。其他的指令子集部分均為可選的模塊,具有代表性的模塊包括M/A/F/D/C,其中“F”代表的是RISC-V 單精度浮點(diǎn)指令集。由表1 可知,RISC-V 指令集共有26條單精度浮點(diǎn)指令,部分指令編碼格式如表2所示。
表2 RISC-V部分浮點(diǎn)指令編碼格式
本設(shè)計(jì)將浮點(diǎn)處理器與開源處理器核蜂鳥E203進(jìn)行集成。蜂鳥E200 是一個(gè)處理器系列,主要面向極低功耗與極小面積的場(chǎng)景而設(shè)計(jì),非常適合于替代傳統(tǒng)的8051 內(nèi)核或者Cortex-M 系列內(nèi)核應(yīng)用于IoT 或其他低功耗場(chǎng)景[13],其包含了多款不同的具體處理器型號(hào),目前開源的具體型號(hào)為蜂鳥E203處理器核。
圖3 為浮點(diǎn)處理器與開源處理器核E203 的集成結(jié)構(gòu)圖。取指單元基于程序計(jì)數(shù)器值從程序存儲(chǔ)器提取指令,在取指之后,將進(jìn)行指令譯碼操作[14]。由于指令所包含的信息編碼在有限長度的指令字中,因此需要譯碼將指令所需要讀取的操作數(shù)寄存器索引、指令需要寫回的寄存器索引、指令的其他信息,譬如指令類型、指令的操作信息等從指令字中翻譯出來,在本設(shè)計(jì)中對(duì)E203的譯碼模塊進(jìn)行了修改,根據(jù)浮點(diǎn)指令編碼格式,增加了浮點(diǎn)指令譯碼相關(guān)內(nèi)容。
圖3 浮點(diǎn)處理器與開源處理器核E203的集成
譯碼完成之后,將寄存器索引傳遞到寄存器選擇單元。RISC-V 架構(gòu)規(guī)定,如果支持單精度浮點(diǎn)指令或雙精度浮點(diǎn)指令,則需要增加一組獨(dú)立的通用浮點(diǎn)寄存器組(Floating Point Regfile),如圖3所示。如果當(dāng)前指令是整數(shù)相關(guān)指令,則傳遞到整數(shù)流水線,最終結(jié)果通過寫回單元寫回通用整數(shù)寄存器組。如果該指令與浮點(diǎn)相關(guān),則傳遞到浮點(diǎn)處理器流水線,最終結(jié)果通過寫回單元寫回通用浮點(diǎn)寄存器組。
浮點(diǎn)通用寄存器組包含了32 個(gè)通用浮點(diǎn)寄存器,標(biāo)號(hào)為f0至f31。浮點(diǎn)通用寄存器組如圖4所示。其中FLEN表示浮點(diǎn)寄存器的寬度,為32位。
圖4 浮點(diǎn)通用寄存器組
浮點(diǎn)控制和狀態(tài)寄存器fcsr是一個(gè)RISC-V控制和狀態(tài)寄存器(CSR)。它是一個(gè)32 位的讀/寫寄存器,用于為浮點(diǎn)算術(shù)操作選擇動(dòng)態(tài)舍入模式,并保存產(chǎn)生的異常標(biāo)志,如圖5所示。
圖5 浮點(diǎn)控制和狀態(tài)寄存器
fcsr 寄存器可被FRCSR 和FSCSR 指令進(jìn)行讀寫,它們是由底層的CSR訪問指令實(shí)現(xiàn)的。FRCSR指令通過將fcsr 寄存器復(fù)制到整數(shù)寄存器rd 實(shí)現(xiàn)讀操作。FSCSR通過將fcsr原來的值復(fù)制到rd,然后將整數(shù)寄存器rs1中的值寫入fcsr來實(shí)現(xiàn)寫操作。
fcsr寄存器包含浮點(diǎn)異常標(biāo)志位域(fflags),不同的異常標(biāo)志位所表示的異常類型如表3 所示。如果浮點(diǎn)運(yùn)算單元在運(yùn)算中出現(xiàn)了相應(yīng)的異常,則會(huì)將fcsr寄存器中對(duì)應(yīng)的異常標(biāo)志位設(shè)置為高,且一直會(huì)保持累積。軟件可以通過寫0的方式單獨(dú)清除某個(gè)異常標(biāo)志位。
表3 異常標(biāo)志位
執(zhí)行模塊包含定點(diǎn)寄存器堆(Integer Regfile)、浮點(diǎn)寄存器堆(Floating Point Regfile)、操作數(shù)選擇模塊(Opcode Sel)、定點(diǎn)運(yùn)算單元(Alu)、浮點(diǎn)運(yùn)算單元(FPU)以及一個(gè)訪存單元(Mem Unit)。譯碼模塊對(duì)指令譯碼之后得到對(duì)應(yīng)的OP 等操作信息以及源操作數(shù)地址,執(zhí)行模塊根據(jù)源操作數(shù)地址首先從定點(diǎn)和浮點(diǎn)寄存器堆中取出對(duì)應(yīng)的操作數(shù),然后操作數(shù)選擇模塊從寄存器堆輸出結(jié)果以及旁路數(shù)據(jù)中選擇正確的操作數(shù),最后運(yùn)算單元根據(jù)相應(yīng)操作信息及其操作數(shù)就可以計(jì)算出結(jié)果。每個(gè)端口對(duì)應(yīng)的計(jì)算單元中只有一個(gè)有效,而其他運(yùn)算單元輸出結(jié)果為0,因此將所有單元的輸出進(jìn)行按位或運(yùn)算就可以得到最終結(jié)果。
對(duì)于定點(diǎn)指令來說,最多需要從定點(diǎn)寄存器堆中取出兩個(gè)源操作數(shù),而對(duì)于浮點(diǎn)指令來說,最多需要從浮點(diǎn)寄存器堆中取出三個(gè)源操作數(shù),為了確保執(zhí)行階段指令能夠執(zhí)行,定點(diǎn)寄存器堆必須具有2 個(gè)讀端口,而浮點(diǎn)寄存器堆必須具有3個(gè)讀端口,同樣為了確保寫回階段每次能夠?qū)懟夭僮鲾?shù),2個(gè)寄存器堆都必須具有一個(gè)寫端口。這樣設(shè)計(jì)的好處在于定點(diǎn)指令和浮點(diǎn)指令可以分開執(zhí)行,不會(huì)產(chǎn)生沖突,能夠?qū)崿F(xiàn)有效的資源利用。執(zhí)行模塊架構(gòu)如圖6所示。
圖6 執(zhí)行模塊架構(gòu)圖
圖7 浮點(diǎn)運(yùn)算單元微架構(gòu)
浮點(diǎn)處理器運(yùn)算單元的微體系架構(gòu)如圖7所示,有六條獨(dú)立的流水線。這些流水線分別為浮點(diǎn)加/減法器、除法器、乘法器、平方根、乘累加和比較器。各運(yùn)算單元的輸入為三個(gè)操作數(shù)(OP1、OP2、OP3)和舍入模式(Roud_mode),各單元運(yùn)算完成后,將輸出運(yùn)算結(jié)果以及五種異常。操作碼譯碼器譯碼指令并啟用所需的模塊,執(zhí)行模塊對(duì)輸入數(shù)據(jù)執(zhí)行相應(yīng)操作。本文將詳細(xì)介紹浮點(diǎn)加法/減法以及乘法模塊。
浮點(diǎn)加法器和減法器單元架構(gòu)如圖8 所示。該加法器接收三個(gè)輸入:兩個(gè)操作數(shù)(OP1、OP2),三位舍入模式,輸出的結(jié)果符合IEEE 754-2008 標(biāo)準(zhǔn)。除此之外,該單元還將輸出四個(gè)異常信號(hào),即上溢、下溢、無效和不精確。主要功能單元分為預(yù)處理單元、二進(jìn)制加減單元和后處理單元三部分。預(yù)處理階段將輸入操作數(shù)分解為符號(hào)位、尾數(shù)位和指數(shù)位。
圖8 加法器/減法器架構(gòu)
在進(jìn)行浮點(diǎn)加減法時(shí),首先需要對(duì)階操作,即通過比較操作數(shù)OP1 和操作數(shù)OP2 的指數(shù)(E1、E2)可以得到較大的指數(shù)值。如果E1 大于E2,將執(zhí)行E1 減去E2運(yùn)算,可計(jì)算出將尾數(shù)M2移至右側(cè)的位置數(shù),目的是使尾數(shù)M1 和尾數(shù)M2 在下一階段的加法和減法之前對(duì)齊。如果符號(hào)位S1等于S2,則將尾數(shù)M1加到尾數(shù)M2,否則從尾數(shù)M2 減去尾數(shù)M1,取決于操作數(shù)OP1 和操作數(shù)OP2 的絕對(duì)值。根據(jù)操作數(shù)OP1 和操作數(shù)OP2 的符號(hào)位和絕對(duì)值,將上述操作中獲得的三個(gè)結(jié)果送到后處理單元。將上述操作獲得的結(jié)果向左移動(dòng),直到最高位為1,即進(jìn)行前導(dǎo)零檢測(cè)。
在浮點(diǎn)數(shù)中,為了在尾數(shù)中表示最多的有效數(shù)據(jù)位,同時(shí)使浮點(diǎn)數(shù)具有唯一的表示方法,規(guī)定尾數(shù)部分用純小數(shù)給出,而且尾數(shù)的絕對(duì)值應(yīng)大于或等于1/R,并小于或等于1,即小數(shù)點(diǎn)后的第一位不為零。這種表示的規(guī)范稱為浮點(diǎn)數(shù)的規(guī)格化的表示方法。不符合這種規(guī)定的數(shù)據(jù)可通過修改階碼并同時(shí)移動(dòng)尾數(shù)的方法使其滿足這種規(guī)范。
將上述結(jié)果進(jìn)行歸一化以符合浮點(diǎn)數(shù)的規(guī)格化表示。規(guī)格化結(jié)果將按照提供的舍入模式進(jìn)行舍入。根據(jù)操作數(shù)OP1 和操作數(shù)OP2 的符號(hào)和絕對(duì)值可以得到新的符號(hào)。最終將舍入后的結(jié)果、更新的指數(shù)和結(jié)果符號(hào)位將被送入合成單元,該合成單元將輸出轉(zhuǎn)換為IEEE 754-2008標(biāo)準(zhǔn)格式的數(shù)據(jù)結(jié)果和所有異常信號(hào)。
與浮點(diǎn)加法相比,浮點(diǎn)乘法要相對(duì)簡(jiǎn)單,并且與整數(shù)乘法類似。在執(zhí)行浮點(diǎn)乘法運(yùn)算時(shí),首先需要對(duì)兩個(gè)操作數(shù)的符號(hào)位進(jìn)行異或操作,以確定最終結(jié)果的符號(hào)位。其次將指數(shù)位相加得到新的指數(shù)位,然后將尾數(shù)位相乘得到新的尾數(shù)部分,最后根據(jù)浮點(diǎn)數(shù)格式對(duì)得到的指數(shù)位和尾數(shù)位進(jìn)行調(diào)整,并進(jìn)行舍入處理,從而得到最終浮點(diǎn)數(shù)的乘法結(jié)果。例如給定兩個(gè)浮點(diǎn)操作數(shù)X1={S1,E1,M1} 和X2={S2,E2,M2} ,其中S、E、M分別代表操作數(shù)的符號(hào)位、指數(shù)位、尾數(shù)位。則可以使用公式(1)~(3)進(jìn)行運(yùn)算:
浮點(diǎn)乘法器的結(jié)構(gòu)如圖9 所示。乘法符號(hào)可以通過對(duì)操作數(shù)OP1 和操作數(shù)OP2 的符號(hào)位S1 和S2 執(zhí)行異或運(yùn)算來計(jì)算。8位加法器用于指數(shù)加法,從相加的指數(shù)結(jié)果中減去相應(yīng)的偏差bias(單精度為127),24×24位乘法器用于尾數(shù)乘法,乘數(shù)結(jié)果按照提供的舍入模式進(jìn)行舍入。由于尾數(shù)在舍入過程中可能溢出,舍入后還需要對(duì)結(jié)果進(jìn)行規(guī)格化。
自測(cè)試用例(Self-Check Testcase)是一種能夠自我檢測(cè)運(yùn)行成功還是失敗的測(cè)試程序。risc-v-tests 是由RISC-V 架構(gòu)開發(fā)者維護(hù)的開源項(xiàng)目,包含一些測(cè)試處理器是否符合指令集架構(gòu)定義的測(cè)試程序,這些測(cè)試程序均由匯編語言編寫。
圖9 浮點(diǎn)乘法器架構(gòu)
此類匯編程序里用某些宏定義組織成程序點(diǎn),測(cè)試指令集架構(gòu)中定義的指令。例如若測(cè)試fadd.s指令,則通過讓fadd.s指令執(zhí)行兩個(gè)數(shù)據(jù)的相加,設(shè)定它期望的結(jié)果。然后使用比較指令加以判斷,假設(shè)fadd.s指令的執(zhí)行結(jié)果與期望結(jié)果相等,則程序繼續(xù)執(zhí)行;假設(shè)與期望結(jié)果不相等,則程序直接使用jump 指令調(diào)到TEST_FAIL地址;假設(shè)所有的測(cè)試點(diǎn)都通過,則程序?qū)?zhí)行到TEST_PASS地址。
按照此方法,測(cè)試了RISC-V的浮點(diǎn)指令集,結(jié)果均符合預(yù)期。浮點(diǎn)運(yùn)算指令執(zhí)行周期數(shù)如表4 所示。文獻(xiàn)[15]中作者實(shí)現(xiàn)了基于ARMv7浮點(diǎn)指令集的浮點(diǎn)處理器,其浮點(diǎn)運(yùn)算指令執(zhí)行周期如表5所示。
表4 設(shè)計(jì)中浮點(diǎn)運(yùn)算指令執(zhí)行周期數(shù)
表5 文獻(xiàn)[15]中浮點(diǎn)運(yùn)算指令執(zhí)行周期數(shù)
從表4 和表5 可見,與文獻(xiàn)[15]中浮點(diǎn)加法、減法、乘法執(zhí)行4個(gè)周期相比,本設(shè)計(jì)浮點(diǎn)加法、減法、乘法執(zhí)行2 個(gè)周期,減少了2 個(gè)周期。在執(zhí)行浮點(diǎn)除法運(yùn)算時(shí),文獻(xiàn)[15]最多需要16 個(gè)周期,而本設(shè)計(jì)最多僅需8個(gè)周期。
文獻(xiàn)[7]FPVC 的浮點(diǎn)性能為25 MFLOPS,文獻(xiàn)[10]CalmRISC32 的系統(tǒng)頻率為70 MHz。本設(shè)計(jì)采用連續(xù)流水線結(jié)構(gòu),在FPGA 上實(shí)現(xiàn)了100 MHz 的單精度頻率。因此,如果在每個(gè)時(shí)鐘周期連續(xù)提供輸入,則本設(shè)計(jì)在FPGA 上將提供高達(dá)150 MFLOPS 的吞吐量。設(shè)計(jì)對(duì)比如表6所示。
表6 設(shè)計(jì)對(duì)比
為了與本設(shè)計(jì)的性能進(jìn)行對(duì)比,本文查閱文獻(xiàn)資料,列出了基于RISC-V的處理器核Rocket Chip、Boom 2-w、Shakti 的性能與本文進(jìn)行比較。BOOM 2-w 是伯克利開發(fā)的一款開源處理器核,面向更高的性能目標(biāo),是一款超標(biāo)量亂序發(fā)射、亂序執(zhí)行的處理器核。Shakti是印度理工學(xué)院的一個(gè)項(xiàng)目,由Verilog編寫,其使用了大量第三方IP,根據(jù)需要分成了不同的類。不同基于RISC-V處理器核的性能對(duì)比如表7所示。
表7 基于RISC-V處理器核性能對(duì)比
從表7 中可以看出,基于RISC-V 的處理器Rocket chip、Boom 2-w、Shakti 為64 位處理器,本設(shè)計(jì)為32 位處理器,理論上64 位架構(gòu)處理器面積和功耗應(yīng)該遠(yuǎn)遠(yuǎn)高于32 位架構(gòu)的處理器。處理器Rocket chip、Boom 2-w、Shakti 實(shí)現(xiàn)了單精度和雙精度浮點(diǎn)指令集,流水線深度較深,處理器性能高,本設(shè)計(jì)實(shí)現(xiàn)單精度浮點(diǎn)指令集,兩級(jí)流水線,應(yīng)用于嵌入式場(chǎng)景,要求小面積低功耗。因此,本設(shè)計(jì)在處理器架構(gòu)、實(shí)現(xiàn)的指令集、流水線深度等方面符合嵌入式場(chǎng)景中小面積、低功耗的需求。
本文使用Synopsys 公司的VCS(Verilog Compile Simulator)對(duì)設(shè)計(jì)進(jìn)行仿真驗(yàn)證,使用Synopsys 公司的DC(Design Compile)對(duì)設(shè)計(jì)進(jìn)行綜合。
本文在進(jìn)行邏輯綜合時(shí),所采用的工藝庫為SMIC 0.18 μm工藝庫。作為參考,首先對(duì)開源處理器核Rocket Chip以及PULPino[18]進(jìn)行了綜合。PULPino是由蘇黎世瑞士聯(lián)邦理工學(xué)院(ETH Zurich)開發(fā)的一款開源的單核MCU SoC平臺(tái),同時(shí)ETH Zurich還開發(fā)了配套的多款32位RISC-V處理器核,其中RI5CY是一款四級(jí)流水線,按序單發(fā)射的處理器,包含一個(gè)FPU模塊,支持標(biāo)準(zhǔn)的RV32I/M/C/F指令集。
表8 為Rocket Chip 中FPU 各模塊的面積占比報(bào)告,表9 為PULPino 中FPU 各模塊的面積占比報(bào)告,本設(shè)計(jì)中FPU的面積占比報(bào)告如表10所示。
表8 Rocket Chip FPU各模塊綜合
表9 PULPino FPU各模塊綜合
表10 本設(shè)計(jì)中FPU各模塊綜合
由表8~表10可得到,Rocket chip、PULPino以及本設(shè)計(jì)中FPU各模塊的面積以及所占面積比例,其中該設(shè)計(jì)FPU總體面積較Rocket chip中FPU面積減少7%,較PULPino面積減少1.5%。就浮點(diǎn)乘累加模塊而言,本設(shè)計(jì)較Rocket chip乘累加模塊面積增加7.8%,較PULPino乘累加模塊面積減少11.9%。浮點(diǎn)乘法模塊面積較PULPino中乘法模塊減少14.7%。
本文針對(duì)目前浮點(diǎn)運(yùn)算軟件實(shí)現(xiàn)速度慢,不能滿足嵌入式處理器實(shí)時(shí)性要求以及運(yùn)算種類有限等問題,設(shè)計(jì)了一種基于開源RISC-V 指令集的浮點(diǎn)處理器,能夠執(zhí)行加法、減法、乘法、除法、平方根、乘累加以及比較運(yùn)算,完全符合IEEE 754-2008標(biāo)準(zhǔn)。本文對(duì)設(shè)計(jì)進(jìn)行了仿真驗(yàn)證以及邏輯綜合。結(jié)果表明,該設(shè)計(jì)FPU總體面積較Rocket chip中FPU面積減少7%,較PULPino面積減少1.5%,吞吐量可達(dá)到150 MFLOPS,可應(yīng)用于嵌入式領(lǐng)域。未來的工作包括探索提高靈活性的其他方法,例如自適應(yīng)多模式的浮點(diǎn)單元或重新配置浮點(diǎn)單元內(nèi)的計(jì)算組件以執(zhí)行其他功能。此外,還將考慮增強(qiáng)當(dāng)前的設(shè)計(jì)算法以實(shí)現(xiàn)更多吞吐量。