国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式RISC-V亂序執(zhí)行處理器的研究與設計

2021-02-05 03:03李雨倩焦繼業(yè)劉有耀郝振和
計算機工程 2021年2期
關鍵詞:指令集流水線寄存器

李雨倩,焦繼業(yè),劉有耀,郝振和

(1.西安郵電大學電子工程學院,西安 710121;2.西安郵電大學計算機學院,西安 710121)

0 概述

嵌入式處理器目前已用于低功耗應用的各個領域,隨著小型嵌入式設備(如物聯(lián)網(wǎng)邊緣設備)的廣泛使用,對嵌入式系統(tǒng)功能、速度、資源等要求越來越高[1-3]。同時,增長較快的物聯(lián)網(wǎng)市場具有長尾化特性,擁有眾多細分市場,對于功耗有較高的要求[4-6]。處理器是物聯(lián)網(wǎng)設備的核心部件,特別是嵌入式物聯(lián)網(wǎng)設備對處理器有實時性的要求,對軟件生態(tài)的依賴相對較低,應用需求也不盡相同,因此,迫切需要一種能夠根據(jù)自身需求可定制的RISC指令集架構[7]。

在嵌入式領域中,ARM架構的處理器占據(jù)著主導地位,當前多數(shù)嵌入式處理器都基于ARM架構。ARM系列處理器通常只能做標準化設計,很難實現(xiàn)差異化處理。例如最常用的Cortex-M3和Cortex-M4處理器,Cortex-M3相比于Cortex-M0增加了除法,Cortex-M4相比于Cortex-M3增加了分支預測和浮點單元。ARM在提升處理器性能的同時,面積大幅增加。

現(xiàn)有的嵌入式微處理器多采用順序單發(fā)射、順序執(zhí)行和順序寫回的方式,在保證處理器性能情況下勢必會犧牲面積,制約了處理器性能面積比[8]。本文通過分析當前嵌入式處理器領域存在的問題,根據(jù)RISC-V指令集的特點,設計一款32位高性能低功耗的亂序執(zhí)行處理器支持RV32ICM指令集架構。使用亂序執(zhí)行方式降低處理器的面積,在保證處理器性能的情況下提高性能面積比。針對處理器運行速度的需求,系統(tǒng)采用并發(fā)方式執(zhí)行指令,支持不同類型指令并行執(zhí)行。為降低并行化開銷,使用小面積低功耗的乘除法模塊,并采用面積較小的緩存結構以平衡性能、硬件資源與代碼大小。

1 RISC-V指令集

RISC-V(Reduced Instruction Set Computer-Five)作為一種開放自由的指令集體系結構,可以針對不同的應用靈活組合指令集進行芯片設計,滿足從嵌入式設備到服務器等不同領域的處理器設計需求[9-10]。

RISC-V是一種新興的開源指令集,沒有專利限制,具有簡潔的指令格式、模塊化的指令集、可定制擴展、無條件碼和分支延遲槽等優(yōu)點,簡化了RISCV處理器的設計[11]。國內外已有眾多高校和企業(yè)對RISC-V指令集進行研發(fā),阿里平頭哥在2019年7月發(fā)布了高性能RISC-V架構處理器玄鐵910;兆易創(chuàng)新也在2019年8月發(fā)布了一款基于RISC-V的32位通用MCU芯片GD32VF103系列。

RISC-V ISA由一個基本的整數(shù)指令集“I”和豐富的可選擴展組成,擴展用單個字母表示,例如“M”(整數(shù)乘法和除法)、“A”(原子指令)、“C”(壓縮指令)等。其中整數(shù)集有3種不同的配置,分別具有32位、64位和128位數(shù)據(jù)寬度:RV32I,RV64I和RV128I,RV32E配置本質上是輕量級RV32I,其寄存器數(shù)量更少[12]。設計者可以選擇實現(xiàn)具有定制擴展的指令子集,通過這些指令集的組合或者擴展以滿足應用需求,同時可以降低資源開銷和功耗。文獻[13]較全面地描述了RISCV指令集。RISC-V指令集在嵌入式設計領域具有較大的優(yōu)勢和廣泛的應用前景,隨著高性能處理器的不斷開發(fā)和應用,RISC-V指令集被更廣泛地應用于高性能低功耗等領域。

2 處理器架構

亂序執(zhí)行結構可加快處理器執(zhí)行速度,提高系統(tǒng)運行速度[14]。本文設計了適用于微控制器的三級流水線結構,即“取指”“執(zhí)行”和“寫回”,具有順序單發(fā)射、亂序執(zhí)行和亂序寫回的特點。圖1所示為三級流水線架構。

圖1 三級流水線架構Fig.1 Three-stage assembly line architecture

2.1 取指階段

2.1.1 取指及生成PC

如圖1所示,取指位于流水線的第1階段。取指階段從指令存儲器中順序取出指令存入IR寄存器,執(zhí)行階段從IR中取指令繼續(xù)執(zhí)行。在本文設計中,取指模塊使用一個32位寄存器保存當前的PC值,順序取指時下一個PC通過當前指令的位寬判斷,若當前指令為16位指令時PC+2,當前指令為32位時PC+4。分支指令采用分支預測模塊得到的跳轉地址作為新的PC值,分支預測失敗時使用執(zhí)行階段返回的正確的PC值。分支預測采用靜態(tài)分支預測技術,根據(jù)當前指令的跳轉方向預測指令是否發(fā)生跳轉。對取得的指令在同一周期進行部分譯碼,判斷指令是分支指令還是非分支指令,若是分支指令則需要得到分支指令的具體信息,通過得到的分支指令跳轉地址偏移量和分支預測的結果生成PC值。

2.1.2 指令訪問及AHB總線通道

取指模塊作為總線系統(tǒng)中的主設備單元負責產生取指地址和相關控制信號。本文設計取指以及訪存模塊采用AHB總線接口協(xié)議,可方便集成ARM系列處理器中已經(jīng)成熟的各種IP核[15]。

目前大多數(shù)RISC-V處理器所使用大面積緊耦合數(shù)據(jù)和指令存儲器占用了較大的芯片面積,嵌入式設備中將增加處理器的成本[16-17]。因此,為實現(xiàn)快速取指掛載了指令Cache等高速存儲器,指令可以通過總線系統(tǒng)從外部存儲器(Icache)進行讀取。

2.2 執(zhí)行階段

2.2.1 譯碼與指令派遣

譯碼與執(zhí)行位于流水線的第2階段。執(zhí)行階段將取指階段存儲在IR寄存器的指令進行譯碼和執(zhí)行;譯碼模塊可得到指令的操作類型、寄存器索引和立即數(shù)等信息。執(zhí)行模塊主要完成簡單算術運算(ALU)、乘/除法(MulDiv)、訪存指令的地址生成(AGU)、分支預測解析等任務。

譯碼模塊主要由組合邏輯組成,在指令格式中,通過opcode將指令分組,指令的最低兩位作為判斷32位和16位指令的依據(jù),funct部分可以判斷指令的具體功能,立即數(shù)進行符號擴展為32位。根據(jù)指令的編碼規(guī)則對指令進行譯碼,按照指令功能可生成3組指令信息,將指令信息派遣到ALU、Muldiv或AGU模塊完成運算。RISC-V指令都是單操作數(shù)或兩操作數(shù)指令并且寫回策略每次只寫回一條指令,因此,相關寄存器文件支持兩個讀端口和一個寫端口操作。指令派遣流程如圖2所示。

圖2 指令派遣流程Fig.2 Command dispatch procedure

生成乘除法單元所需的信息總線(Info Bus)代碼如下:

2.2.2 亂序并行執(zhí)行單元

執(zhí)行模塊主要由3個功能子單元組成,可實現(xiàn)普通運算、乘除法運算、長指令訪存等功能。不同通道的邏輯操作和內存訪問相互獨立,可實現(xiàn)指令集并行執(zhí)行以獲得更好的性能。普通ALU運算模塊完成邏輯運算、加減法、移位等指令;訪存地址生成模塊完成Load、Store指令的地址生成;乘除法單元完成整數(shù)的乘除法運算。

嵌入式處理器的主要挑戰(zhàn)就是功能單元利用率低和分段訪問的問題,例如乘法和除法單元。圖3所示為RISC-V各類型指令使用頻率,數(shù)據(jù)來源于coremark與dhrystone 2個標準測試程序。由圖3可知,使用頻率最高的是基本整數(shù)運算指令,乘除法相關指令mul與div使用頻率較低。乘除法單元在執(zhí)行過程中短時間內偶爾被訪問,并在相當長時間內保持空閑,長時間的空閑會導致顯著的靜態(tài)功耗。隨著晶體管尺寸技術節(jié)點和閾值電壓的縮小,靜態(tài)功率的作用變得更加明顯[18]。此外,這些利用率低的單元具有更大的面積(即晶體管數(shù)量),表明嵌入式系統(tǒng)中靜態(tài)功耗不斷增加。

圖3 RISC-V指令的使用頻率Fig.3 Usage frequency of RISC-V instruction

降低并行化開銷是提高依賴數(shù)據(jù)并行計算模型的計算系統(tǒng)能效關鍵因素之一,尤其是在處理工作負載不平衡和并行區(qū)域小的應用時?;谝陨戏治觯疚脑O計了低功耗、小面積的多周期乘除法模塊,該模塊僅使用狀態(tài)機進行控制和選擇,節(jié)省了硬件開銷。乘法器選用Booth設計,除法器使用加減交替法設計。乘法操作按照MULH(返回乘法結果高位)、MUL(返回乘法結果低位)的順序執(zhí)行,除法操作按照DIV(返回除法的商)、REM(返回除法的余數(shù))的順序執(zhí)行,并將兩條指令融合為單一的乘除法操作,僅執(zhí)行一次乘除法操作。乘除法操作共用一個加法器進行資源復用可減少面積開銷,使用加法器進行多次迭代運算可實現(xiàn)乘除法功能。結合單周期和多周期并行執(zhí)行的設計,可以在減少對流水線運行影響的情況下實現(xiàn)降低并行化開銷的目的,減小處理器的面積和降低功耗。

2.3 寫回階段

2.3.1 寫回仲裁策略

寫回階段主要由訪存模塊和寫回模塊組成。如圖1所示,寫回階段提交來自流水線的指令,將指令的運算結果寫回到通用寄存器組中,并更新寄存器文件。因為在執(zhí)行過程中多周期指令和單周期指令可以并行執(zhí)行,所以在寫回時可能會出現(xiàn)以下3種情況:

1)單周期指令順序發(fā)射執(zhí)行,在一個時鐘周期內完成計算。多周期指令如果和正在執(zhí)行的單周期指令沒有發(fā)生數(shù)據(jù)沖突,則不影響單周期指令的執(zhí)行,流水線不會產生斷流的危害,單周期指令可以順序寫回。

2)多周期指令中乘除法指令和load指令的執(zhí)行周期有所不同,所以在寫回階段可能發(fā)生同時寫回到同一寄存器的情況,寫回階段將從長指令FIFO中讀出第一條長指令信息,按順序將第一條指令優(yōu)先寫回。因此,多周期指令屬于順序發(fā)射和順序寫回。

3)單周期和多周期指令在同一時期寫回時,多周期指令寫回的優(yōu)先級更高,因為多周期指令一定在單周期指令之前發(fā)射。因此,如果將單周期與多周期指令統(tǒng)一考慮,則流水線屬于順序發(fā)射和亂序寫回。

2.3.2 長指令數(shù)據(jù)訪存

為滿足CPU并行訪問的需求,本文采用哈佛體系結構,即使用分離的指令和數(shù)據(jù)存儲通過獨立的總線系統(tǒng)分別訪問。數(shù)據(jù)和指令的訪問可以同時進行,可實現(xiàn)快速、無阻塞訪問數(shù)據(jù)。分離的總線使得處理器可以在同一個周期內獲得指令字(來自Icache)和操作數(shù)(來自Dcache),從而提高了執(zhí)行速度和數(shù)據(jù)的吞吐率,減少訪存沖突。當CPU訪問數(shù)據(jù)時,需要經(jīng)過總線控制單元BIU對信號進行譯碼,如圖4所示,BIU對地址總線lsu2biu_haddr[31∶0]進行譯碼,根據(jù)不同的地址選擇訪問不同的外部模塊或數(shù)據(jù)存儲器。

圖4 總線地址譯碼邏輯結構Fig.4 Logic structure of bus address decoding

3 主要問題處理

3.1 分支預測處理

RISC-V具有簡潔的分支跳轉指令,包括無條件直接跳轉(jal)、無條件間接跳轉(jalr)和帶條件直接跳轉指令3種類型。其中帶條件跳轉指令將“比較”和“跳轉”作為一條指令執(zhí)行,減少了指令數(shù)目,從而簡化了硬件設計。

在實際應用程序中,“while”“for”等循環(huán)語句使用頻繁,循環(huán)語句需要用到條件分支指令,因此正確預測分支指令跳轉方向和地址將減少流水線斷流的危害。本文設計中使用簡單的靜態(tài)分支預測結構,在取指階段對指令進行部分譯碼,得到分支指令信息。在條件分支指令中如果向后跳轉則預測為跳轉,向前跳轉預測為不跳轉,對于無條件跳轉指令jal不需要進行預測直接跳轉,在無條件間接跳轉指令jalr中,如果rs1為寄存器0,則直接生成PC值;rs1若不是寄存器0,為防止RAW沖突,將暫停取指,等待執(zhí)行完成后進行跳轉。如果在執(zhí)行階段的分支預測解析模塊通過ALU計算得到的跳轉地址與預測結果不符,則會將正確的地址送入取指模塊,更新PC值,并產生一個周期的流水線斷流。分支預測狀態(tài)示意圖如圖5所示。

圖5 分支預測狀態(tài)示意圖Fig.5 State schematic diagram of branch prediction state

3.2 非對齊指令處理

本文設計支持RISC-V架構擴展壓縮子集“C”,當處理器取指遇到地址非對齊的指令時,通常需要兩個時鐘周期取出一條指令。針對以上問題,使用剩余緩存技術,保存上一次取指沒有用完的比特位供下一次使用。對于RV32非對齊情況,取出的32位指令為低16位與上一次取指的高16位,對于壓縮指令只使用低16位,高16位暫存于剩余緩存中。

圖6展示了4條待執(zhí)行指令,其中前3條為16位壓縮指令,第4條為32位指令。4條指令均存儲在32位指令存儲器0x0c-0x14的地址空間,其中第4條指令分開存儲在0x10和0x14兩個地址。

圖6 指令編碼及對應的數(shù)據(jù)存儲地址Fig.6 Instruction coding and corresponding data storage address

表1為不加剩余緩存的情況,共需要對指令存儲器進行5次讀取操作。表2為添加剩余緩存的情況,第1次讀取0x0c地址的指令,讀出0xc606_c422,將0xc422送入IR寄存器,將0xc606送入剩余緩存寄存器中。第2次不需要讀取指令存儲器,使用剩余緩存的指令,第4條指令為32位指令,根據(jù)PC生成模塊PC值會從0x10加2變成0x12,使用剩余緩存數(shù)據(jù),剩余緩存為0x1623,判斷不是16位指令后PC加2,讀取0x14地址的指令,與剩余緩存里的數(shù)據(jù)組合成32位指令。由上述步驟可知,相同的4條指令不加剩余緩存需要5次讀取操作,增加剩余緩存技術只需要讀取3次存儲器,可加快執(zhí)行速度。

表1 不加剩余緩存的情況Table 1 Situation of without residual cache

表2 添加剩余緩存的情況Table 2 Situation of adding remaining cache

3.3 沖突解決

由于指令之間具有數(shù)據(jù)依賴性,RISC-V流水線可能會發(fā)生數(shù)據(jù)沖突等相關性問題,因此執(zhí)行過程中需要處理流水線沖突問題。

1)如圖7所示,第2條指令“div t5,ra,sp”需要用到第1條指令“l(fā)i sp,6”的數(shù)據(jù),這會引起RAW問題從而造成數(shù)據(jù)沖突。本文設計采用數(shù)據(jù)旁路技術,將第1條指令的計算結果直接送入下一條指令的譯碼模塊。當執(zhí)行除法指令時,在沒有發(fā)生數(shù)據(jù)沖突的情況下,單周期指令可以繼續(xù)發(fā)射、執(zhí)行,當發(fā)生RAW相關性時,在一條相關的指令執(zhí)行之前插入氣泡,暫停流水線的執(zhí)行。對于多周期指令和單周期指令寫回模塊發(fā)生的WAW相關性,多周期指令優(yōu)先寫回,避免此類沖突的發(fā)生。

圖7 流水線數(shù)據(jù)的沖突Fig.7 Conflict of assembly line data

2)對于除法指令這樣的長指令需要多個時鐘周期才能完成除法運算,執(zhí)行階段可能會出現(xiàn)資源相關,使用握手協(xié)議暫停流水線。此外,采用哈佛體系結構,避免取指模塊和訪存模塊發(fā)生爭用存儲器資源的相關沖突。

3)對于轉移指令所引發(fā)的控制相關,使用分支預測技術減少流水線的斷流。

3.4 處理器軟件接口

在本文設計中開發(fā)了處理器相應的軟件接口,包括外設寄存器名稱、地址的定義以及外設的驅動代碼、中斷處理和啟動代碼等,對嵌入式軟件開發(fā)人員透明,無需了解處理器內部結構,易于開發(fā),并且ARM系列的軟件移植方便。

4 驗證與結果分析

4.1 指令集驗證

本文使用硬件描述語言Verilog HDL將模塊功能以代碼來實現(xiàn),通過開源的RISC-V基準指令集自測試用例,測試處理器是否符合指令集架構。該測試程序是由RISC-V架構開發(fā)者為了檢測處理器是否符合指令集架構中的定義而編寫的測試程序,匯編指令使用宏定義組織成程序點,測試指令集架構中定義的指令。結果表明,RV32ICM指令集所有指令均滿足RISC-V指令集架構標準。

4.2 FPGA驗證

片上系統(tǒng)(SoC)圍繞處理器內核構建,具有一系列外部設備。本文FPGA實驗平臺為Xilinx Artix-7(XC7A35T-L1CSG324I)開發(fā)板,處理器核在50 MHz的時鐘頻率下進行測試。通過FPGA的軟硬件協(xié)同仿真,使用該處理器核對外設進行控制,仿真結果滿足嵌入式應用需求。此外,在同等環(huán)境下對RISC-V開源處理器蜂鳥E203和V-scale[19]處理器進行FPGA測試,表3為不同處理器的資源利用情況。

表3 基于FPGA的處理器資源利用情況Table 3 Resource utilization of processors based on FPGA

4.3 ASIC綜合分析

在SMIC 0.11 μm的ASIC(Application Specific Integrated Circuit)技術節(jié)點上進行綜合分析,進一步對比了Cortex-M3處理器以及開源RISC-V處理器蜂鳥E203、Zero-riscy[19]和V-scale等處理器,并從指令集、架構、性能等方面進行闡述。

1)Cortex-M3為ARM推出的面向標準嵌入式市場的高性能低成本處理器,采用ARM商業(yè)指令集架構,并且包含Thumb和Thumb-2兩個子集。本文設計以及處理器蜂鳥E203、Zero-riscy和V-scale處理器均采用開源RISC-V指令集架構。RISC-V指令集相對于其他指令集架構更為簡潔,例如在帶條件分支跳轉指令方面,傳統(tǒng)處理器需要使用兩條獨立的指令,第1條指令先使用比較指令,比較的結果被保存到狀態(tài)寄存器中。第2條指令使用跳轉指令,判斷前一條指令保存在狀態(tài)寄存器中的比較結果為真時,則進行跳轉。相對而言,RISC-V架構將比較與跳轉兩個操作放到了一個指令的方式減少了指令的條數(shù),因此在硬件設計上更加簡單。在壓縮指令方面,ARM系列處理器使用的Thumb指令集,只有最基本指令的簡化版本,可以將某些代碼壓縮20%~30%左右,但是從標準模式到Thumb模式的切換需要增加代碼和時間消耗,代碼的運行速度降低了約15%[20]。Thumb-2指令集雖無須狀態(tài)切換,但是與標準的ARM代碼相比,需要更多的Thumb-2指令實現(xiàn)相同的功能,額外的指令會使處理速度降低大約15%~20%。在RISC-V中大約50%~60%的指令可以用RVC指令代替,代碼的大小可以減少約20%~30%,并且只需要在編譯階段完成,RISC-V的壓縮指令和標準指令可以混合使用,無須狀態(tài)的切換和額外代碼開銷[21]。因此,RISC-V壓縮指令硬件設計更簡單,執(zhí)行效率更高。

2)如表4所示,在結構方面,本文設計的流水線深度與Cortex-M3以及V-scale相同,分為取指、執(zhí)行、寫回三級流水階段。Cortex-M3和V-sclale處理器是順序執(zhí)行處理器,本文設計采用順序發(fā)射、亂序寫回的策略減少了流水線的斷流。此外,設計了多周期乘除法器,對比Cortex-M3的單周期乘法器和2-12周期除法器具有更小的硬件開銷。本文設計與Cortex-M3處理器均采用哈佛結構通過并行訪問指令和數(shù)據(jù)來提高系統(tǒng)運行速度,并且采用了更適用于嵌入式系統(tǒng)的小面積緩存結構。

表4 不同處理器結構對比Table 4 Comparison of different processor structure

3)表5所示為邏輯綜合結果對比。將本文設計與Cortex-M3處理器和蜂鳥E203處理器采用相同的工藝環(huán)境綜合,面積上更具優(yōu)勢,較Cortex-M3小64%,較蜂鳥E203處理器小8%。功耗低于Cortex-M3處理器,略高于蜂鳥E203處理器。在性能方面,通過Dhrystone(DMIPS/MHz)跑分結果可知,本文設計性能與Cortex-M3相近。

表5 不同處理器基于ASIC技術性能對比Table 5 Comparison of different processor performance based on ASIC technology

5 結束語

本文針對小面積低功耗的嵌入式應用,設計了一款基于RISC-V指令集的32位亂序處理器。從取指、執(zhí)行、寫回3個階段對流水線的設計進行分析,給出分支預測和數(shù)據(jù)沖突等問題的應對策略,且RV32ICM指令在測試平臺均可驗證通過,處理器核在Artix-7開發(fā)板實現(xiàn)邏輯功能。實驗結果表明,本文系統(tǒng)面積較Cortex-M3減少64%,功耗降低0.57 mW,可應用于小面積高性能的嵌入式領域。目前該處理器已應用到基于RISC-V與Cortex-M0的雙核異構系統(tǒng)中,面對嵌入式應用不斷多樣化和差異化的需求,下一步將面向特定的領域進行擴展,在RISC-V指令集預留的擴展指令空間中分配特定指令,設計協(xié)處理器的接口。

猜你喜歡
指令集流水線寄存器
基于Kubernetes的RISC-V異構集群云任務調度系統(tǒng)①
STM32和51單片機寄存器映射原理異同分析
3DNow指令集被Linux淘汰
Lite寄存器模型的設計與實現(xiàn)
流水線
實時微測量系統(tǒng)指令集及解析算法
報廢汽車拆解半自動流水線研究
流水線生產殺死藝術
什么是AMD64
SIMATIC IPC3000 SMART在汽車流水線領域的應用