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

?

基于Chipyard的RISC-V處理器設(shè)計與實現(xiàn)

2023-11-14 08:05譚飛鴻蘇成悅
現(xiàn)代計算機 2023年17期
關(guān)鍵詞:指令集流水線寄存器

譚飛鴻,蘇成悅

(廣東工業(yè)大學(xué)物理與光電工程學(xué)院,廣州 510000)

0 引言

在計算機領(lǐng)域,軟硬件之間的接口規(guī)范就是指令集[1]。RISC-V 是一個自由開放的指令集,具有良好的模塊化結(jié)構(gòu),可用于多種應(yīng)用場景的芯片定制[2]。國內(nèi)已涌現(xiàn)大量的基于RISC-V指令集架構(gòu)的芯片,如平頭哥半導(dǎo)體公司研發(fā)的應(yīng)用于物聯(lián)網(wǎng)的處理器CK902[3]、中國科學(xué)院計算機技術(shù)所研發(fā)的RISC-V 處理器“香山”[4]以及芯來科技研發(fā)的廣泛應(yīng)用于嵌入式領(lǐng)域的處理器蜂鳥E203[5]等。Chipyard 是一個基于Chisel開發(fā)的處理器生成器框架,它集成芯片從設(shè)計到驗證的全流程工具鏈,降低了芯片開發(fā)難度,基于Chipyard 框架開發(fā)的多款處理器芯片已流片[6]。

本文將在Chipyard 框架下實現(xiàn)基于RISC-V指令集架構(gòu)的五級流水線處理器設(shè)計,并在FPGA 上完成板級驗證,Dhrystone測試性能達(dá)到1.27 DMIPS/MHz。

1 RISC-V指令集架構(gòu)及流水線設(shè)計

采用增量指令集架構(gòu)(instruction set architecture,ISA)的計算機體系結(jié)構(gòu),處理器迭代過程中為保持向后的二進制兼容,ISA 的體量逐漸增大,而RISC-V 采用模塊化的方式規(guī)避體量問題[7]。RISC-V 基于基本軟件棧,提供多個標(biāo)準(zhǔn)擴展,而無需為冗余的指令分?jǐn)偝杀尽?/p>

1.1 RIISSCC--VV指令集

RISC-V 開發(fā)團隊于2017 年正式發(fā)布第一版規(guī)范,規(guī)定指令的格式、操作方式、數(shù)據(jù)類型和內(nèi)存管理機制等內(nèi)容[8]。規(guī)范凸顯RISC-V 的可裁剪性和定制性,實現(xiàn)不同應(yīng)用場景下的處理器設(shè)計需求。RISC-V 指令集由一個基礎(chǔ)指令集和多個擴展指令集構(gòu)成,工作在特定的工作模式下[9]。

最新一版規(guī)范規(guī)定了五種基礎(chǔ)指令集[10],分別是弱內(nèi)存次序指令集RVWMO、32 為整數(shù)指令集RV32I、64 位整數(shù)指令集RV64I、128 位整數(shù)指令集RV128I 和32 位嵌入式整數(shù)指令集RV32E。RVWMO內(nèi)存一致性模型由內(nèi)存模型原語、指令依存句法和程序次序組成,并滿足加載值公理、原子性公理和進度公理[11]。RV32I、RV64I 和RV128I 都屬于整數(shù)指令集,區(qū)別在于寄存器的位寬大小。RV32E是用于嵌入式設(shè)計的指令集,它僅有16個整數(shù)寄存器[12]?;A(chǔ)指令集格式一共有六種,以RV32I為例,如圖1所示。

圖1 RV32I的六種基礎(chǔ)指令格式

擴展指令集是RISC-V 靈活性的體現(xiàn),可與基礎(chǔ)指令集組合應(yīng)對各種應(yīng)用場景。截至2022年6月,規(guī)范共發(fā)布40多種擴展指令[10]。

1.2 RIISSCC--VV編譯鏈

編譯器將高級編程語言編譯成可執(zhí)行文件,RISC-V 編譯鏈有其獨特的函數(shù)調(diào)用規(guī)范(calling convention)[13]。函數(shù)調(diào)用時規(guī)定是否保留寄存器數(shù)據(jù),若過程和方法不產(chǎn)生其它調(diào)用,將由程序二進制接口(application binary interface,ABI)自由分配寄存器,無需保存和恢復(fù)[14]。鏈接器將目標(biāo)代碼和機器語言模塊進行鏈接,使編譯和匯編相互獨立進行,節(jié)約時間開銷。加載器將可執(zhí)行文件加載到內(nèi)存中,并跳轉(zhuǎn)至程序執(zhí)行的開始地址,常用的編譯工具有riscv-gnu-toolchain[15]。

1.3 五級流水線設(shè)計

流水線技術(shù)能使多條指令重疊執(zhí)行,它將有效提高指令整體執(zhí)行速度[16]。流水線級數(shù)與寄存器的電路延時和硬件面積有關(guān)[17]。圖2 所示為流水線整體設(shè)計圖,包括取指(IF)、譯碼(ID)、執(zhí)行(EX)、訪存(MEM)、寫回(WE)。

圖2 五級流水線總體結(jié)構(gòu)

取指階段程序計數(shù)器(PC)從指令寄存器(IMEM)取出指令,分支預(yù)測模塊會預(yù)測下一條指令;譯碼階段將提取指令操作碼、功能碼、立即數(shù)、目的寄存器和源寄存器等信息;執(zhí)行階段由ALU 和ALU 控制器執(zhí)行運算。當(dāng)指令涉及對內(nèi)存的讀寫操作,將進入訪存和寫回階段。

2 Chipyard框架

Chipyard 為敏捷的SoC 開發(fā)提供統(tǒng)一的框架和工作流程,通過配置和互連多個獨立IP 以確保SoC 的完整性[18]。生成的SoC 可以通過FPGA加速和電子設(shè)計自動化軟件(EDA)進行驗證,最后通過可移植的超大規(guī)模集成電路(VLSI)設(shè)計流程獲取GDSⅡ數(shù)據(jù)庫。GDSⅡ是一個二進制文件,用于重構(gòu)版圖信息,以此制作掩模版[19]。

截至2021 年,基于Chipyard 框架開發(fā)的已實現(xiàn)流片(Tape Out)的SoC 復(fù)雜度呈現(xiàn)出逐年增加的趨勢[18],如圖3所示。

圖3 基于Chipyard框架構(gòu)建的RISC-V SoC測試芯片的復(fù)雜度變化趨勢

2.1 Chhiisseell敏捷開發(fā)

Chisel(constructing hardware in a scala embedded language)采用Scala 作為宿主語言[20],Scala 基于JVM(java virtual machine)開發(fā)。傳統(tǒng)處理器開發(fā)主要基于Verilog 和VHDL 語言,但二者功能復(fù)用性差,同等電路設(shè)計較Chisel代碼更繁瑣。Chisel具有面向?qū)ο蟆⒑瘮?shù)式編程、參數(shù)化編程和類型推理的特性[21]。Chisel可進行復(fù)雜電路設(shè)計,并創(chuàng)建可復(fù)用的電路模塊,編譯成Verilog代碼在EDA中進行仿真。

Chisel并不是高層次綜合(high-level synthesis,HLS),而是屬于寄存器轉(zhuǎn)換級(register transfer level,RTL)語言,而HLS是將行為級描述的高級語言編譯成RTL,例如C/C++編寫程序,并直接將其轉(zhuǎn)化為Verilog代碼[22],這將降低硬件開發(fā)的靈活性和顆粒度。處理器開發(fā)和迭代過程中涉及大量參數(shù),許多模塊可以通過派生、繼承和重載來實現(xiàn),使得基于Chisel開發(fā)的優(yōu)勢得以凸顯。

2.2 Chippyyaarrdd框架構(gòu)成

Chipyard 包括可配置、模塊化和開源的IP,涵蓋SoC 設(shè)計階段全流程。Chipyard 繼承于Rocket Chip 框架[23],Rocket Chip 同為伯克利團隊基于Chisel 開發(fā)的SoC 生成器。Chipyard 在Rocket Chip 基礎(chǔ)庫上增加大量的IP,比如伯克利亂序機(BOOM)[24]、Hwacha 矢量單元[25]、數(shù)字信號處理模塊(DSP)、內(nèi)存系統(tǒng)和外設(shè)等。

Chipyard 依賴靜態(tài)接口用于集成IP 核,硬件生成階段動態(tài)生成編碼、內(nèi)存映射和總線,在內(nèi)存映射IO(MMIO)外圍作為加速器和控制器[26]。在本文的處理器設(shè)計中,處理器核由具備Linux 能力的Rocket 核組成,支持RV64GC,擁有浮點單元和虛擬內(nèi)存。相較其他直接替換內(nèi)核的SoC 開發(fā)框架,Chipyard 的通用內(nèi)核配置接口提高了開發(fā)效率。

2.2.1 Chippyyaarrdd開發(fā)流程

Chipyard 框架整合大量工具包,用于SoC 設(shè)計周期內(nèi)的三個主要環(huán)節(jié):前端RTL 設(shè)計、系統(tǒng)驗證和后端芯片物理設(shè)計。

由于Chisel 在SoC 設(shè)計到實現(xiàn)流程中會缺失原始信息,導(dǎo)致Chipyard 在前端RTL 設(shè)計中不能直接生成RTL 文件,所以要通過FIRRTL 作為中間態(tài)(IR),再由FIRRTL編譯器生成Verilog代碼[27]?;赩erilog 或SystemVerilog 的設(shè)計框架在仿真、模擬和物理設(shè)計之間轉(zhuǎn)換時必須依賴特定的設(shè)計腳本,而基于FIRRTL 編譯器的轉(zhuǎn)換方法更加靈活,可應(yīng)用在Chipyard 框架集成的Chisel設(shè)計中。

圖4展示Chipyard 的開發(fā)流程,根據(jù)設(shè)計需求進行SoC 參數(shù)配置,主要包括RISC-V 內(nèi)核、加速器、Caches、外部設(shè)備和自定義模塊,通過軟件建立RTL 文件工程,并將生成的處理器部署在FPGA 上。Chipyard 擁有開源的RTL 仿真器Verilator,框架中的Makefile 將根據(jù)SoC 的結(jié)構(gòu)完成仿真可執(zhí)行文件和頂層設(shè)計文件的生成和軟件匹配,并輸出測試結(jié)果。Chipyard對最終生成的處理器可直接進行FPGA部署,如由亞馬遜EC2 公共云推出的FireSim FPGA 加速仿真平臺[28],F(xiàn)ireSim 可以模擬時序行為、I/O 和外設(shè),配合Chipyard 框架的全系統(tǒng)性可以完成硅前驗證和性能評估。Chipyard后端物理設(shè)計中支持模塊化VLSI 流程,如Hammer VLSI 模塊[29],可通過抽象化軟件API 生成Tcl 腳本、時鐘約束和功率規(guī)格對特定供應(yīng)商的組件進行復(fù)用和模塊化。

圖4 Chipyard通過生成器支持多種轉(zhuǎn)換的設(shè)計流程

SoC開發(fā)作為計算機科學(xué)的重要領(lǐng)域也面臨著可重復(fù)性危機[30],當(dāng)一個低級電路需要升級為更高級的電路被應(yīng)用時,軟件棧需要跟蹤所有硬件接口并保持版本匹配,這使軟件工作負(fù)載管理復(fù)雜度增加。FireMarshal[31]是基于RISC-V 的全棧硬件開發(fā)的軟件工作負(fù)載管理工具,可實現(xiàn)自動化工作負(fù)載生成、開發(fā)和評估,通過允許用戶以可存儲、版本控制、共享無歧義可讀形式描述和共享工作負(fù)載來使得Chipyard避免重復(fù)性危機。如圖5所示,全棧式硬件開發(fā)組件在系統(tǒng)迭代中會保留大部分原先版本,F(xiàn)ireMarshal 使核心應(yīng)用邏輯和部分組件與新的SoC 設(shè)計一致,只改變內(nèi)核和驅(qū)動配置以適應(yīng)新的系統(tǒng),這將大大減少SoC設(shè)計中的重復(fù)性工作。

圖5 Chipyard使用FireMarshal進行軟件工作負(fù)載管理

2.2.2 軟核配置

圖6 所示為RISC-V SoC 結(jié)構(gòu)設(shè)計圖,各部分對應(yīng)代碼如下。

圖6 RISC-V SoC結(jié)構(gòu)設(shè)計圖

Rocket核是順序執(zhí)行流水線內(nèi)核,指令集所需數(shù)據(jù)可從頁表控制器(page table walker,PTW)中獲取,PTW 包含虛擬地址和物理地址之間的映射表,虛擬地址在編譯時由鏈接器生成,由頁號和頁偏移組成,頁號用于檢索頁表得到物理塊號,并與頁偏移一起載入物理地址寄存器中。內(nèi)核總線用于一級高速緩存(cache)和系統(tǒng)總線上的設(shè)備之間的通信,系統(tǒng)總線(system bus)包括數(shù)據(jù)總線、地址總線和控制總線。二級高速緩存連接內(nèi)存總線,內(nèi)存總線通常是通過AXI 轉(zhuǎn)換器連接DRAM 控制器;外設(shè)總線則是連接各個外部設(shè)備,包括串口、GPIO 等。CPU 可通過前端總線和外部通信,如內(nèi)存系統(tǒng)可通過前端總線對DMA設(shè)備進行讀寫。

3 驗證測試

Chipyard框架生成的處理器并不以電路圖形式呈現(xiàn),Chisel 進行處理器設(shè)計和實現(xiàn)是解耦的,缺少集成環(huán)節(jié),故在轉(zhuǎn)換Verilog 代碼過程中會損失端口信息,而且在ECO(engineering change order)階段,Chisel 無法精確控制網(wǎng)表生成,使后端實現(xiàn)需要重新做布局規(guī)劃(floor plan),而在Firrtl 層面允許設(shè)計者自定義轉(zhuǎn)換(transform)[27],所以Chisel 在生成電路圖前會先編譯成Firrtl文件,進而生成Verilog文件。

圖7為Chipyard生成的RISC-V SoC的電路原理圖,利用EDA 生成比特流并固化在FPGA 上,部署Linux操作系統(tǒng),通過網(wǎng)絡(luò)實現(xiàn)人機交互。存儲器管理單元(memory management unit,MMU)是通過快表(translation lookaside buffer,TLB)來實現(xiàn)地址轉(zhuǎn)換[32],Linux 操作系統(tǒng)采用分頁式內(nèi)存管理機制。圖8為FPGA板級驗證的實物展示。

圖7 基于Chipyard生成的RISC-V SoC的電路原理圖

圖8 FPGA板級驗證實物

Dhrystone 是誕生于1984 年的綜合性測試程序,輸出結(jié)果代表每秒運行Dhrystone的次數(shù),因其簡潔、直觀,至今依舊被廣泛應(yīng)用于CPU性能測試。圖9為RISC-V SoC 的Dhrystone測試結(jié)果,結(jié)果顯示SoC每秒運行2236次Dhrystone程序。

圖9 Dhrystones運行結(jié)果

4 結(jié)語

本文驗證了一種高效的RISC-V SoC 開發(fā)方法,并在FPGA 上成功運行,Chipyard 支持日益復(fù)雜和差異化的定制SoC。從表1 中得出部分處理器對比結(jié)果,本文所設(shè)計的SoC 的跑分與STM32F407VET6相近,性能優(yōu)于基于ARM 的第二代樹莓派處理器。

表1 各架構(gòu)典型的處理器Dhrystone跑分比較

猜你喜歡
指令集流水線寄存器
Gen Z Migrant Workers Are Leaving the Assembly Line
3DNow指令集被Linux淘汰
Lite寄存器模型的設(shè)計與實現(xiàn)
流水線
分簇結(jié)構(gòu)向量寄存器分配策略研究*
實時微測量系統(tǒng)指令集及解析算法
報廢汽車拆解半自動流水線研究
什么是AMD64
SIMATIC IPC3000 SMART在汽車流水線領(lǐng)域的應(yīng)用
基于覆蓋率驅(qū)動的高性能DSP指令集驗證方法