999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于RISC-V浮點指令集FPU的研究與設計

2021-02-04 14:15:36潘樹朋劉有耀焦繼業
計算機工程與應用 2021年3期
關鍵詞:指令設計

潘樹朋,劉有耀,焦繼業,李 昭

1.西安郵電大學 電子工程學院,西安710121

2.西安郵電大學 計算機學院,西安710121

隨著嵌入式系統中浮點運算的需求日益增多,應用范圍從氣候建模、電磁散射理論到圖像處理、FFT 計算[1]、特征值計算等。為了支持和加速這些應用,需要能夠產生高吞吐量的高性能計算設備。浮點處理器(Floating Point Unit,FPU)極大地提高了這些高計算應用的性能。在大多數現代通用計算機體系結構中,浮點處理器集成在處理器芯片內,比如ARM、MIPS等[2]。浮點處理器作為一種加速器,與整數流水線并行工作,并從主處理器分擔大型計算、高延遲浮點指令。如果這些指令是由主處理器執行,由于浮點除法、平方根和乘累加等運算需要大量的計算和較長的等待時間,會降低主處理器的速度,運算精度也會有所損失,因此浮點處理器有助于加速整個芯片[3]。

許多嵌入式處理器,尤其是一些傳統的設計,不支持浮點運算。許多浮點處理器的功能可以通過軟件庫來仿真[4],雖然節省了浮點處理器的附加硬件成本,但是速度明顯較慢,不足以滿足嵌入式處理器的實時性要求。為了提高系統的性能,需要對浮點處理器進行硬件實現。

到目前為止,浮點處理器的設計已經做了很多工作。文獻[5-6]介紹了一種64 位、5 級流水線、單發射順序執行的開源RISC-V處理器核Rocket-Chip,由伯克利大學設計,具有兼容IEEE754-2008 標準的FPU,但采用Chisel語言編寫,可讀性較差。文獻[7]介紹了浮點向量協處理器FPVC,支持標量計算,實現了浮點加法、乘法、除法和平方根運算,僅支持單精度操作數。文獻[8]為了提高基于定點DSP的數字平臺的計算能力,設計了一種基于FPGA的可配置浮點協處理器,僅支持單精度操作數。此外,一些設計具有有限的算術運算,文獻[8]的設計僅支持加、減、除運算。文獻[9]實現了采用SPARC架構設計的浮點協處理器,支持加法、乘法和除法運算。文獻[10]提出了采用RISC 架構設計的浮點協處理器,僅實現了單精度浮點運算,缺少乘累加等主要運算。

針對上述公開文獻設計方案的不足:(1)支持的浮點精度單一;(2)運算種類有限,不能滿足多種運算需求。因此,本文基于RISC-V 指令集實現了一種支持單精度的浮點處理器,具有廣泛的算術運算,如加法、減法、乘法、除法、平方根、乘累加和比較,與IEEE-754 2008標準完全兼容。

1 RISC-V指令集分析

1.1 規整的指令編碼

RISC-V 的指令集編碼非常規整,指令所需的通用寄存器的索引(Index)都被放在固定的位置。因此指令譯碼器可以非常便捷地譯碼出寄存器索引,然后讀取通用寄存器組。RISC-V基本指令類型如圖1所示,分別為R類、I類、S類、U類。

圖1 RISC-V指令格式

RISC-V是一個新的指令集體系結構(ISA),完全開放,適合直接在硬件上實現,不僅僅是適用于模擬或者二進制翻譯,還支持豐富的用戶級ISA 擴展,具有可選的變長指令,以支持擴展可用的指令編碼空間和一個可選的密集指令編碼,以提高性能、靜態代碼大小和能耗效率。

1.2 優雅的壓縮指令子集

為了滿足某些對于代碼體積要求較高的場景(例如嵌入式領域),RISC-V 定義了一種可選的壓縮(Compressed)指令子集,用字母C 表示,也可以用RVC 表示。RISC-V具有后發優勢,從一開始便規劃了壓縮指令,預留了足夠的編碼空間,16 位長指令與普通的32 位長指令可以無縫自由地交織在一起,處理器也沒有定義額外的狀態。

RISC-V 架構的研究者進行了詳細的代碼體積分析,如圖2所示,通過分析結果可以看出,RV32C的代碼體積相比RV32 的代碼體積減少了40%,并且與ARM,MIPS和x86等架構相比都有不錯的表現。

圖2 各指令集的代碼密度比較

1.3 RISC-V浮點指令集

當今主流的指令集架構有MIPS 和ARM 等,MIPS架構主要用于計算機,ARM 架構相對于MIPS 更精簡、能耗更低,主要用于移動設備端,而RISC-V作為新興起的指令集架構[11],不僅能實現低功耗且更加適合嵌入式領域[12]。在選擇用RISC-V 指令集實現浮點處理器之前,對MIPS、ARM和RISC-V中的浮點指令集從幾個方面進行了分析,如表1所示。

表1 RISC-V、ARM、MIPS浮點指令集分析

RISC-V 指令集使用模塊化的方式進行組織,每一個模塊使用一個英文字母來表示。RISC-V最基本也是唯一強制要求實現的指令集部分是由I字母表示的基本整數指令子集。使用該整數指令子集,便能夠實現完整的軟件編譯器。其他的指令子集部分均為可選的模塊,具有代表性的模塊包括M/A/F/D/C,其中“F”代表的是RISC-V 單精度浮點指令集。由表1 可知,RISC-V 指令集共有26條單精度浮點指令,部分指令編碼格式如表2所示。

表2 RISC-V部分浮點指令編碼格式

2 RISC-V流水線結構

本設計將浮點處理器與開源處理器核蜂鳥E203進行集成。蜂鳥E200 是一個處理器系列,主要面向極低功耗與極小面積的場景而設計,非常適合于替代傳統的8051 內核或者Cortex-M 系列內核應用于IoT 或其他低功耗場景[13],其包含了多款不同的具體處理器型號,目前開源的具體型號為蜂鳥E203處理器核。

圖3 為浮點處理器與開源處理器核E203 的集成結構圖。取指單元基于程序計數器值從程序存儲器提取指令,在取指之后,將進行指令譯碼操作[14]。由于指令所包含的信息編碼在有限長度的指令字中,因此需要譯碼將指令所需要讀取的操作數寄存器索引、指令需要寫回的寄存器索引、指令的其他信息,譬如指令類型、指令的操作信息等從指令字中翻譯出來,在本設計中對E203的譯碼模塊進行了修改,根據浮點指令編碼格式,增加了浮點指令譯碼相關內容。

圖3 浮點處理器與開源處理器核E203的集成

譯碼完成之后,將寄存器索引傳遞到寄存器選擇單元。RISC-V 架構規定,如果支持單精度浮點指令或雙精度浮點指令,則需要增加一組獨立的通用浮點寄存器組(Floating Point Regfile),如圖3所示。如果當前指令是整數相關指令,則傳遞到整數流水線,最終結果通過寫回單元寫回通用整數寄存器組。如果該指令與浮點相關,則傳遞到浮點處理器流水線,最終結果通過寫回單元寫回通用浮點寄存器組。

2.1 浮點通用寄存器組

浮點通用寄存器組包含了32 個通用浮點寄存器,標號為f0至f31。浮點通用寄存器組如圖4所示。其中FLEN表示浮點寄存器的寬度,為32位。

圖4 浮點通用寄存器組

2.2 浮點控制和狀態寄存器

浮點控制和狀態寄存器fcsr是一個RISC-V控制和狀態寄存器(CSR)。它是一個32 位的讀/寫寄存器,用于為浮點算術操作選擇動態舍入模式,并保存產生的異常標志,如圖5所示。

圖5 浮點控制和狀態寄存器

fcsr 寄存器可被FRCSR 和FSCSR 指令進行讀寫,它們是由底層的CSR訪問指令實現的。FRCSR指令通過將fcsr 寄存器復制到整數寄存器rd 實現讀操作。FSCSR通過將fcsr原來的值復制到rd,然后將整數寄存器rs1中的值寫入fcsr來實現寫操作。

fcsr寄存器包含浮點異常標志位域(fflags),不同的異常標志位所表示的異常類型如表3 所示。如果浮點運算單元在運算中出現了相應的異常,則會將fcsr寄存器中對應的異常標志位設置為高,且一直會保持累積。軟件可以通過寫0的方式單獨清除某個異常標志位。

表3 異常標志位

2.3 執行模塊的設計

執行模塊包含定點寄存器堆(Integer Regfile)、浮點寄存器堆(Floating Point Regfile)、操作數選擇模塊(Opcode Sel)、定點運算單元(Alu)、浮點運算單元(FPU)以及一個訪存單元(Mem Unit)。譯碼模塊對指令譯碼之后得到對應的OP 等操作信息以及源操作數地址,執行模塊根據源操作數地址首先從定點和浮點寄存器堆中取出對應的操作數,然后操作數選擇模塊從寄存器堆輸出結果以及旁路數據中選擇正確的操作數,最后運算單元根據相應操作信息及其操作數就可以計算出結果。每個端口對應的計算單元中只有一個有效,而其他運算單元輸出結果為0,因此將所有單元的輸出進行按位或運算就可以得到最終結果。

對于定點指令來說,最多需要從定點寄存器堆中取出兩個源操作數,而對于浮點指令來說,最多需要從浮點寄存器堆中取出三個源操作數,為了確保執行階段指令能夠執行,定點寄存器堆必須具有2 個讀端口,而浮點寄存器堆必須具有3個讀端口,同樣為了確保寫回階段每次能夠寫回操作數,2個寄存器堆都必須具有一個寫端口。這樣設計的好處在于定點指令和浮點指令可以分開執行,不會產生沖突,能夠實現有效的資源利用。執行模塊架構如圖6所示。

圖6 執行模塊架構圖

3 浮點運算單元微架構

圖7 浮點運算單元微架構

浮點處理器運算單元的微體系架構如圖7所示,有六條獨立的流水線。這些流水線分別為浮點加/減法器、除法器、乘法器、平方根、乘累加和比較器。各運算單元的輸入為三個操作數(OP1、OP2、OP3)和舍入模式(Roud_mode),各單元運算完成后,將輸出運算結果以及五種異常。操作碼譯碼器譯碼指令并啟用所需的模塊,執行模塊對輸入數據執行相應操作。本文將詳細介紹浮點加法/減法以及乘法模塊。

3.1 浮點加法器/減法器

浮點加法器和減法器單元架構如圖8 所示。該加法器接收三個輸入:兩個操作數(OP1、OP2),三位舍入模式,輸出的結果符合IEEE 754-2008 標準。除此之外,該單元還將輸出四個異常信號,即上溢、下溢、無效和不精確。主要功能單元分為預處理單元、二進制加減單元和后處理單元三部分。預處理階段將輸入操作數分解為符號位、尾數位和指數位。

圖8 加法器/減法器架構

在進行浮點加減法時,首先需要對階操作,即通過比較操作數OP1 和操作數OP2 的指數(E1、E2)可以得到較大的指數值。如果E1 大于E2,將執行E1 減去E2運算,可計算出將尾數M2移至右側的位置數,目的是使尾數M1 和尾數M2 在下一階段的加法和減法之前對齊。如果符號位S1等于S2,則將尾數M1加到尾數M2,否則從尾數M2 減去尾數M1,取決于操作數OP1 和操作數OP2 的絕對值。根據操作數OP1 和操作數OP2 的符號位和絕對值,將上述操作中獲得的三個結果送到后處理單元。將上述操作獲得的結果向左移動,直到最高位為1,即進行前導零檢測。

在浮點數中,為了在尾數中表示最多的有效數據位,同時使浮點數具有唯一的表示方法,規定尾數部分用純小數給出,而且尾數的絕對值應大于或等于1/R,并小于或等于1,即小數點后的第一位不為零。這種表示的規范稱為浮點數的規格化的表示方法。不符合這種規定的數據可通過修改階碼并同時移動尾數的方法使其滿足這種規范。

將上述結果進行歸一化以符合浮點數的規格化表示。規格化結果將按照提供的舍入模式進行舍入。根據操作數OP1 和操作數OP2 的符號和絕對值可以得到新的符號。最終將舍入后的結果、更新的指數和結果符號位將被送入合成單元,該合成單元將輸出轉換為IEEE 754-2008標準格式的數據結果和所有異常信號。

3.2 浮點乘法器

與浮點加法相比,浮點乘法要相對簡單,并且與整數乘法類似。在執行浮點乘法運算時,首先需要對兩個操作數的符號位進行異或操作,以確定最終結果的符號位。其次將指數位相加得到新的指數位,然后將尾數位相乘得到新的尾數部分,最后根據浮點數格式對得到的指數位和尾數位進行調整,并進行舍入處理,從而得到最終浮點數的乘法結果。例如給定兩個浮點操作數X1={S1,E1,M1} 和X2={S2,E2,M2} ,其中S、E、M分別代表操作數的符號位、指數位、尾數位。則可以使用公式(1)~(3)進行運算:

浮點乘法器的結構如圖9 所示。乘法符號可以通過對操作數OP1 和操作數OP2 的符號位S1 和S2 執行異或運算來計算。8位加法器用于指數加法,從相加的指數結果中減去相應的偏差bias(單精度為127),24×24位乘法器用于尾數乘法,乘數結果按照提供的舍入模式進行舍入。由于尾數在舍入過程中可能溢出,舍入后還需要對結果進行規格化。

4 實驗結果

4.1 RISC-V自測試用例

自測試用例(Self-Check Testcase)是一種能夠自我檢測運行成功還是失敗的測試程序。risc-v-tests 是由RISC-V 架構開發者維護的開源項目,包含一些測試處理器是否符合指令集架構定義的測試程序,這些測試程序均由匯編語言編寫。

圖9 浮點乘法器架構

此類匯編程序里用某些宏定義組織成程序點,測試指令集架構中定義的指令。例如若測試fadd.s指令,則通過讓fadd.s指令執行兩個數據的相加,設定它期望的結果。然后使用比較指令加以判斷,假設fadd.s指令的執行結果與期望結果相等,則程序繼續執行;假設與期望結果不相等,則程序直接使用jump 指令調到TEST_FAIL地址;假設所有的測試點都通過,則程序將執行到TEST_PASS地址。

按照此方法,測試了RISC-V的浮點指令集,結果均符合預期。浮點運算指令執行周期數如表4 所示。文獻[15]中作者實現了基于ARMv7浮點指令集的浮點處理器,其浮點運算指令執行周期如表5所示。

表4 設計中浮點運算指令執行周期數

表5 文獻[15]中浮點運算指令執行周期數

從表4 和表5 可見,與文獻[15]中浮點加法、減法、乘法執行4個周期相比,本設計浮點加法、減法、乘法執行2 個周期,減少了2 個周期。在執行浮點除法運算時,文獻[15]最多需要16 個周期,而本設計最多僅需8個周期。

4.2 性能分析

文獻[7]FPVC 的浮點性能為25 MFLOPS,文獻[10]CalmRISC32 的系統頻率為70 MHz。本設計采用連續流水線結構,在FPGA 上實現了100 MHz 的單精度頻率。因此,如果在每個時鐘周期連續提供輸入,則本設計在FPGA 上將提供高達150 MFLOPS 的吞吐量。設計對比如表6所示。

表6 設計對比

為了與本設計的性能進行對比,本文查閱文獻資料,列出了基于RISC-V的處理器核Rocket Chip、Boom 2-w、Shakti 的性能與本文進行比較。BOOM 2-w 是伯克利開發的一款開源處理器核,面向更高的性能目標,是一款超標量亂序發射、亂序執行的處理器核。Shakti是印度理工學院的一個項目,由Verilog編寫,其使用了大量第三方IP,根據需要分成了不同的類。不同基于RISC-V處理器核的性能對比如表7所示。

表7 基于RISC-V處理器核性能對比

從表7 中可以看出,基于RISC-V 的處理器Rocket chip、Boom 2-w、Shakti 為64 位處理器,本設計為32 位處理器,理論上64 位架構處理器面積和功耗應該遠遠高于32 位架構的處理器。處理器Rocket chip、Boom 2-w、Shakti 實現了單精度和雙精度浮點指令集,流水線深度較深,處理器性能高,本設計實現單精度浮點指令集,兩級流水線,應用于嵌入式場景,要求小面積低功耗。因此,本設計在處理器架構、實現的指令集、流水線深度等方面符合嵌入式場景中小面積、低功耗的需求。

4.3 驗證與綜合

本文使用Synopsys 公司的VCS(Verilog Compile Simulator)對設計進行仿真驗證,使用Synopsys 公司的DC(Design Compile)對設計進行綜合。

本文在進行邏輯綜合時,所采用的工藝庫為SMIC 0.18 μm工藝庫。作為參考,首先對開源處理器核Rocket Chip以及PULPino[18]進行了綜合。PULPino是由蘇黎世瑞士聯邦理工學院(ETH Zurich)開發的一款開源的單核MCU SoC平臺,同時ETH Zurich還開發了配套的多款32位RISC-V處理器核,其中RI5CY是一款四級流水線,按序單發射的處理器,包含一個FPU模塊,支持標準的RV32I/M/C/F指令集。

表8 為Rocket Chip 中FPU 各模塊的面積占比報告,表9 為PULPino 中FPU 各模塊的面積占比報告,本設計中FPU的面積占比報告如表10所示。

表8 Rocket Chip FPU各模塊綜合

表9 PULPino FPU各模塊綜合

表10 本設計中FPU各模塊綜合

由表8~表10可得到,Rocket chip、PULPino以及本設計中FPU各模塊的面積以及所占面積比例,其中該設計FPU總體面積較Rocket chip中FPU面積減少7%,較PULPino面積減少1.5%。就浮點乘累加模塊而言,本設計較Rocket chip乘累加模塊面積增加7.8%,較PULPino乘累加模塊面積減少11.9%。浮點乘法模塊面積較PULPino中乘法模塊減少14.7%。

5 結束語

本文針對目前浮點運算軟件實現速度慢,不能滿足嵌入式處理器實時性要求以及運算種類有限等問題,設計了一種基于開源RISC-V 指令集的浮點處理器,能夠執行加法、減法、乘法、除法、平方根、乘累加以及比較運算,完全符合IEEE 754-2008標準。本文對設計進行了仿真驗證以及邏輯綜合。結果表明,該設計FPU總體面積較Rocket chip中FPU面積減少7%,較PULPino面積減少1.5%,吞吐量可達到150 MFLOPS,可應用于嵌入式領域。未來的工作包括探索提高靈活性的其他方法,例如自適應多模式的浮點單元或重新配置浮點單元內的計算組件以執行其他功能。此外,還將考慮增強當前的設計算法以實現更多吞吐量。

猜你喜歡
指令設計
聽我指令:大催眠術
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
殺毒軟件中指令虛擬機的脆弱性分析
電信科學(2016年10期)2016-11-23 05:11:56
一種基于滑窗的余度指令判別算法
主站蜘蛛池模板: 欧美一级爱操视频| 91在线视频福利| 国产农村妇女精品一二区| 99热这里只有精品国产99| 国产视频你懂得| 四虎永久免费网站| 成人在线观看一区| 久久综合色视频| 免费国产小视频在线观看| 性色一区| 国产sm重味一区二区三区| 国产成人av大片在线播放| 婷婷丁香色| 久久久久人妻一区精品| 国产一区二区人大臿蕉香蕉| 中文字幕亚洲无线码一区女同| 免费av一区二区三区在线| 日韩免费毛片| 91麻豆国产精品91久久久| 美女被操黄色视频网站| 亚洲人成亚洲精品| 亚洲国产精品无码AV| 亚洲自偷自拍另类小说| 亚洲成人播放| 青青久视频| 女人毛片a级大学毛片免费| 国产精品成人第一区| 99国产在线视频| 亚洲第一网站男人都懂| 三区在线视频| 欧洲av毛片| 2024av在线无码中文最新| 亚洲中文无码av永久伊人| 日本精品视频| 国产精品30p| 国产精品九九视频| 一级爱做片免费观看久久| 99er这里只有精品| 亚洲综合精品香蕉久久网| 热这里只有精品国产热门精品| 欧美在线综合视频| 国产色图在线观看| 另类欧美日韩| 国产欧美在线观看一区| 欧美日韩亚洲综合在线观看| 91九色国产porny| 永久在线播放| 亚洲va视频| 国产一区二区三区夜色| 国产福利在线观看精品| 99er精品视频| 国国产a国产片免费麻豆| 四虎精品免费久久| 夜夜操狠狠操| 精品少妇人妻一区二区| 午夜性爽视频男人的天堂| AV网站中文| 色窝窝免费一区二区三区| 亚洲国产精品人久久电影| 国产精品林美惠子在线播放| 无码人妻免费| 熟女日韩精品2区| 日韩av电影一区二区三区四区| 欧美亚洲中文精品三区| 好久久免费视频高清| 国产激情在线视频| 国产午夜小视频| 欧美专区日韩专区| 免费一级毛片在线观看| 国产人成在线视频| 亚洲天堂成人| 国产免费人成视频网| 第一区免费在线观看| 国产精品久久久久久久久| 国产精品自拍合集| 99久久精品国产综合婷婷| 国产精品美人久久久久久AV| 欧美在线网| 九九线精品视频在线观看| 九九久久精品国产av片囯产区| 欧美精品不卡| 亚洲大尺度在线|