RISC-V是一個(gè)基于精簡(jiǎn)指令集(RISC)原則的開(kāi)源指令集架構(gòu)(ISA)。
這里要明確兩個(gè)概念:指令集規(guī)范(Specification)和處理器實(shí)現(xiàn)(Implementation)是兩個(gè)不同層次的概念,要區(qū)分開(kāi)。指令集(ISA)是規(guī)范標(biāo)準(zhǔn),往往用一本書(shū)或幾張紙來(lái)記錄描述,而處理器實(shí)現(xiàn)是基于指令集規(guī)范完成的源代碼。RISC-V是一個(gè)指令集規(guī)范。
我們可以基于x86/ARM/ RISC-V指令集,進(jìn)行處理器微架構(gòu)設(shè)計(jì)和實(shí)現(xiàn)形成源代碼,并通過(guò)流片最終形成芯片產(chǎn)品。其中指令集規(guī)范與處理器實(shí)現(xiàn)的知識(shí)產(chǎn)權(quán)是獨(dú)立的,不能混為一談。
"RISC-V是開(kāi)源的"表示指令集規(guī)范是開(kāi)源、開(kāi)放和免費(fèi)的(open and free),這與x86與ARM指令集有本質(zhì)不同,但并不是指具體的處理器實(shí)現(xiàn)也都是開(kāi)源免費(fèi)的。
基于RISC-V指令集規(guī)范,既可以由開(kāi)源社區(qū)來(lái)開(kāi)發(fā)開(kāi)源免費(fèi)版的處理器實(shí)現(xiàn)(如Berkeley開(kāi)發(fā)的Rocket核等),也可以有商業(yè)公司開(kāi)發(fā)收費(fèi)授權(quán)版的處理器實(shí)現(xiàn)(如國(guó)內(nèi)平頭哥玄鐵910、芯來(lái)N200核與優(yōu)矽渭河WH-32核等)。
下面按照實(shí)現(xiàn)難度大致排序
新增1、tinyriscv
tinyriscv
實(shí)現(xiàn)的是一個(gè)單核32位的小型RISC-V處理器核(tinyriscv),采用verilog語(yǔ)言編寫。設(shè)計(jì)目標(biāo)是對(duì)標(biāo)ARM Cortex-M3系列處理器。tinyriscv有以下特點(diǎn):
支持RV32IM指令集,通過(guò)RISC-V指令兼容性測(cè)試;
采用三級(jí)流水線,即取指,譯碼,執(zhí)行;
可以運(yùn)行C語(yǔ)言程序;
支持JTAG,可以通過(guò)openocd讀寫內(nèi)存(在線更新程序);
支持中斷;
支持總線;
支持FreeRTOS;
支持通過(guò)串口更新程序;
容易移植到任何FPGA平臺(tái)(如果資源足夠的話);
整體架構(gòu)
RIDECORE (RISc-v Dynamic Execution CORE) 是一個(gè)用 Verilog HDL 編寫的亂序 RISC-V 處理器。
RIDECORE 的微架構(gòu)基于“現(xiàn)代處理器設(shè)計(jì):超標(biāo)量處理器的基礎(chǔ)”。因此,我們建議用戶在使用 RIDECORE 之前閱讀本書(shū)和我們的文檔 。
到目前為止,我們的 FPGA 原型設(shè)計(jì)已經(jīng)在 Xilinx VC707 板進(jìn)行了原型驗(yàn)證。該原型可以在 50MHz 的時(shí)鐘頻率下運(yùn)行。
ridecode的架構(gòu)如下:
新增3、nanoFOX
可以“觸摸”的RISC-V。
使用SystemVerilog實(shí)現(xiàn)的一個(gè)小型RISC-V CPU內(nèi)核。這是一個(gè)帶有AHB和緩存(完整命令列表RV32I(沒(méi)有fence、fence.i、ecall、ebreak))的RV-CPU版本。
nanoFOX 目前可以在這些 FPGA 板上工作:
Storm_IV_E6_V2(Altera Cyclone IV FPGA)
rz_easyFPGA_A2_1(Altera Cyclone IV FPGA)
Terasic DE10-Lite(Altera MAX10 FPGA)
Terasic DE0-Nano(Altera Cyclone IV FPGA)
整個(gè)項(xiàng)目文件夾整理的非常清晰,每個(gè)板卡有單獨(dú)的文件夾,同時(shí)仿真文件齊全,構(gòu)建項(xiàng)目也簡(jiǎn)單,值得一試。
1、darkriscv
一晚從頭開(kāi)始實(shí)現(xiàn)開(kāi)源RISC-V!
盡管與其他 RISC-V 實(shí)現(xiàn)相比,代碼小而粗糙,但是作為初學(xué)或者初識(shí)RISC-V很友善(簡(jiǎn)易)。雖然很簡(jiǎn)易,但DarkRISCV具有許多令人印象深刻的功能:
實(shí)現(xiàn)大部分 RISC-V RV32E 指令集
實(shí)現(xiàn)大部分RISC-V RV32I指令集(缺少csr*、e和fence)
在超大規(guī)模 ku040 中工作頻率高達(dá) 250MHz(400MHz 帶超頻!)
便宜的 spartan-6 高達(dá) 100MHz,適合小型 spartan-3E,例如 XC3S100E!
大多數(shù)時(shí)間(通常是 71% 的時(shí)間)可以維持每條指令 1 個(gè)時(shí)鐘
靈活的哈佛架構(gòu)(易于集成緩存控制器、總線橋等)
在 xilinx(spartan-3、spartan-6、spartan-7、artix-7、kintex-7 和 kintex ultrascale)中運(yùn)行良好
與一些altera和lattice FPGA一起工作得很好
適用于 RISC-V 的 gcc 9.0.0(無(wú)需補(bǔ)?。。?/p>
使用 850-1500LUT(核心僅使用 LUT6 技術(shù),取決于啟用的功能和優(yōu)化)
可選的 RV32E 支持(與 LUT4 FPGA 配合使用效果更好)
可選的 16x16 位 MAC 指令(用于數(shù)字信號(hào)處理)
可選的粗粒度多線程 (MT)
流水線階段之間沒(méi)有互鎖!
BSD 許可證:可以在任何地方使用,沒(méi)有限制!
是不是迫不及待去試一試了!
2、picoRiscV
這個(gè)其實(shí)不需要過(guò)多介紹了,小巧且完善的RISC-V。
PicoRV32 是實(shí)現(xiàn)RISC-V RV32IMC 指令集的 CPU 內(nèi)核。它可以配置為 RV32E、RV32I、RV32IC、RV32IM 或 RV32IMC 內(nèi)核,并可選擇包含內(nèi)置中斷控制器。
特點(diǎn):
小型(7 系列 Xilinx 架構(gòu)中的 750-2000 個(gè) LUT)
高 fmax(7 系列 Xilinx FPGA 上為 250-450 MHz)
可選擇的本機(jī)內(nèi)存接口或 AXI4-Lite 主控
可選的 IRQ 支持(使用簡(jiǎn)單的自定義 ISA)
可選的協(xié)處理器接口
該 CPU 旨在用作 FPGA 設(shè)計(jì)和 ASIC 中的輔助處理器。由于其高fmax,它可以集成到大多數(shù)現(xiàn)有設(shè)計(jì)中,而無(wú)需跨越時(shí)鐘域。當(dāng)在較低頻率下運(yùn)行時(shí),它會(huì)有很多時(shí)序裕量,因此可以添加到設(shè)計(jì)中而不會(huì)影響時(shí)序收斂。
3、cva6
CVA6 是一個(gè) 6 級(jí)、有序 CPU,它實(shí)現(xiàn)了 64 位 RISC-V 指令集。它完全實(shí)現(xiàn)了 I、M、A 和 C 擴(kuò)展,如第 I 卷:用戶級(jí) ISA V 2.3 以及特權(quán)擴(kuò)展草案 1.10 中所述。它實(shí)現(xiàn)了三個(gè)權(quán)限級(jí)別 M、S、U 以完全支持類 Unix 操作系統(tǒng)。公眾號(hào):OpenFPGA
它具有可配置的大小、單獨(dú)的 TLB、硬件 PTW 和分支預(yù)測(cè)(分支目標(biāo)緩沖區(qū)和分支歷史表)。主要設(shè)計(jì)目標(biāo)是減少關(guān)鍵路徑長(zhǎng)度。
4、VexRiscv
用 SpinalHDL 編寫的 RISC-V 實(shí)現(xiàn)。以下是一些規(guī)格:
RV32I[M][A][F[D]][C] 指令集
流水線從 2 到 5+ 個(gè)階段([Fetch*X]、Decode、Execute、[Memory]、[WriteBack])
1.44 DMIPS/Mhz --no-inline 當(dāng)幾乎所有功能都啟用時(shí)(1.57 DMIPS/Mhz 當(dāng)分頻器查找表啟用時(shí))
針對(duì) FPGA 進(jìn)行了優(yōu)化,不使用任何供應(yīng)商特定的 IP /原語(yǔ)
AXI4、Avalon、wishbone
可選的 MUL/DIV 擴(kuò)展
可選 F32/F64 FPU(目前需要數(shù)據(jù)緩存)
可選的指令和數(shù)據(jù)緩存,公眾號(hào):OpenFPGA
可選硬件重新填充 MMU
可選的調(diào)試擴(kuò)展允許通過(guò) GDB >> openOCD >> JTAG 連接進(jìn)行 Eclipse 調(diào)試
RISC-V 特權(quán) ISA 規(guī)范 v1.10 中定義的機(jī)器、[Supervisor] 和 [User] 模式的可選中斷和異常處理。
移位指令的兩種實(shí)現(xiàn):?jiǎn)沃芷冢ㄈ笆揭莆黄鳎┖蛃hiftNumber周期
每個(gè)階段可以有可選的旁路或互鎖危險(xiǎn)邏輯
Linux 兼容
Zephyr兼容
FreeRTOS 端口
下面是運(yùn)行的最高主頻及消耗的資源:
?
VexRiscv?small?(RV32I,?0.52?DMIPS/Mhz,?no?datapath?bypass,?no?interrupt)?-> ????Artix?7?????->?243?Mhz?504?LUT?505?FF? ????Cyclone?V???->?174?Mhz?352?ALMs ????Cyclone?IV??->?179?Mhz?731?LUT?494?FF? ????iCE40???????->?92?Mhz?1130?LC VexRiscv?small?(RV32I,?0.52?DMIPS/Mhz,?no?datapath?bypass)?-> ????Artix?7?????->?240?Mhz?556?LUT?566?FF? ????Cyclone?V???->?194?Mhz?394?ALMs ????Cyclone?IV??->?174?Mhz?831?LUT?555?FF? ????iCE40???????->?85?Mhz?1292?LC VexRiscv?small?and?productive?(RV32I,?0.82?DMIPS/Mhz)??-> ????Artix?7?????->?232?Mhz?816?LUT?534?FF? ????Cyclone?V???->?155?Mhz?492?ALMs ????Cyclone?IV??->?155?Mhz?1,111?LUT?530?FF? ????iCE40???????->?63?Mhz?1596?LC VexRiscv?small?and?productive?with?I$?(RV32I,?0.70?DMIPS/Mhz,?4KB-I$)??-> ????Artix?7?????->?220?Mhz?730?LUT?570?FF? ????Cyclone?V???->?142?Mhz?501?ALMs ????Cyclone?IV??->?150?Mhz?1,139?LUT?536?FF? ????iCE40???????->?66?Mhz?1680?LC VexRiscv?full?no?cache?(RV32IM,?1.21?DMIPS/Mhz?2.30?Coremark/Mhz,?single?cycle?barrel?shifter,?debug?module,?catch?exceptions,?static?branch)?-> ????Artix?7?????->?216?Mhz?1418?LUT?949?FF? ????Cyclone?V???->?133?Mhz?933?ALMs ????Cyclone?IV??->?143?Mhz?2,076?LUT?972?FF? VexRiscv?full?(RV32IM,?1.21?DMIPS/Mhz?2.30?Coremark/Mhz?with?cache?trashing,?4KB-I$,4KB-D$,?single?cycle?barrel?shifter,?debug?module,?catch?exceptions,?static?branch)?-> ????Artix?7?????->?199?Mhz?1840?LUT?1158?FF? ????Cyclone?V???->?141?Mhz?1,166?ALMs ????Cyclone?IV??->?131?Mhz?2,407?LUT?1,067?FF? VexRiscv?full?max?perf?(HZ*IPC)?->?(RV32IM,?1.38?DMIPS/Mhz?2.57?Coremark/Mhz,?8KB-I$,8KB-D$,?single?cycle?barrel?shifter,?debug?module,?catch?exceptions,?dynamic?branch?prediction?in?the?fetch?stage,?branch?and?shift?operations?done?in?the?Execute?stage)?-> ????Artix?7?????->?200?Mhz?1935?LUT?1216?FF? ????Cyclone?V???->?130?Mhz?1,166?ALMs ????Cyclone?IV??->?126?Mhz?2,484?LUT?1,120?FF? VexRiscv?full?with?MMU?(RV32IM,?1.24?DMIPS/Mhz?2.35?Coremark/Mhz,?with?cache?trashing,?4KB-I$,?4KB-D$,?single?cycle?barrel?shifter,?debug?module,?catch?exceptions,?dynamic?branch,?MMU)?-> ????Artix?7?????->?151?Mhz?2021?LUT?1541?FF? ????Cyclone?V???->?124?Mhz?1,368?ALMs ????Cyclone?IV?->?128?Mhz?2,826?LUT?1,474?FF? VexRiscv?linux?balanced?(RV32IMA,?1.21?DMIPS/Mhz?2.27?Coremark/Mhz,?with?cache?trashing,?4KB-I$,?4KB-D$,?single?cycle?barrel?shifter,?catch?exceptions,?static?branch,?MMU,?Supervisor,?Compatible?with?mainstream?linux)?-> ????Artix?7?????->?180?Mhz?2883?LUT?2130?FF? ????Cyclone?V???->?131?Mhz?1,764?ALMs ????Cyclone?IV??->?121?Mhz?3,608?LUT?2,082?FF?
?
VexRiscv有個(gè)官方的SoC:Briey,使用AXI接口。和Rocket Chip一樣,支持Verilator+OpenOCD+GDB仿真。和Rocketchip一樣都是使用scala解釋器sbt工具.
關(guān)于Spinal,可以查看《從Verilog到SpinalHDL》。
以上幾個(gè)小項(xiàng)目都適合了解和入門RISC-V,簡(jiǎn)易是最大的特點(diǎn),最主要的是都可以在FPGA開(kāi)發(fā)板上運(yùn)行,而且對(duì)FPGA要求也不高。
接下來(lái)就是幾個(gè)成熟點(diǎn)的項(xiàng)目了。
5、平頭哥無(wú)劍100
平頭哥無(wú)劍100
文檔目錄如下:
?
|--Project????????????????//open?source?project?work?directory?? ??|--riscv_toolchain??????//tool?chain?install?directory?download?from?t-head.cn ??|--wujian100_open???????//wujian100_open?project?get?from?github ????|--case???????????????//test?case?example?for?simulation ????|--doc????????????????//wujian100_open?user?guide ????|--fpga???????????????//FPGA?script ????|--lib????????????????//compile?script?for?simulation ????|--regress????????????//regression?result ????|--sdk????????????????//software?design?kit ????|--soc????????????????//Soc?RTL?source?code ????|--tb?????????????????//test?bench ????|--tools??????????????//simulation?script?and?setup?file ????|--workdir????????????//simulation?directory ????|--LICENSE ????|--README.md
?
6、Hummingbirdv2 E203 Core and SoC
芯來(lái)科技研發(fā)的一款RISC-V core&SOC,是SI-RISCV/e200_opensource (https://github.com/SI-RISCV/e200_opensource)的進(jìn)階版。
該存儲(chǔ)庫(kù)托管開(kāi)源 Hummingbirdv2 E203 RISC-V 處理器內(nèi)核和 SoC 的項(xiàng)目,它由基于中國(guó)大陸的領(lǐng)先 RISC-V IP 和解決方案公司Nuclei System Technology開(kāi)發(fā)和開(kāi)源。公眾號(hào):OpenFPGA
這是SI-RISCV/e200_opensource中維護(hù)的Hummingbird E203項(xiàng)目的升級(jí)版,所以我們稱之為Hummingbirdv2 E203.
在這個(gè)新版本中,我們有以下更新。
為 E203 內(nèi)核添加 NICE(Nuclei Instruction Co-unit Extension),因此用戶可以輕松創(chuàng)建帶有 E203 內(nèi)核的定制硬件協(xié)同單元。
將PULP Platform的APB接口外設(shè)(GPIO、I2C、UART、SPI、PWM)集成到Hummingbirdv2 SoC中,這些外設(shè)采用Verilog語(yǔ)言實(shí)現(xiàn),便于用戶理解。
為 Hummingbirdv2 SoC 添加新的開(kāi)發(fā)板(Nuclei ddr200t 和 mcu200t)支持。
7、香山開(kāi)源高性能處理器
“香山”基于Chisel語(yǔ)言開(kāi)發(fā),支持多核,采用亂序執(zhí)行、11級(jí)流水、6發(fā)射。采用28nm臺(tái)積電工藝預(yù)計(jì)達(dá)到1.3Ghz主頻,采用中芯國(guó)際14nm工藝預(yù)計(jì)達(dá)到2Ghz主頻。性能評(píng)估為7/Ghz(SEPC2006),換言之,第一版的雁棲湖架構(gòu)對(duì)標(biāo)的是ARM A72/A73。
“香山”第二代南湖架構(gòu)的目標(biāo)是10/G,在采用中芯國(guó)際14nm工藝的情況下主頻達(dá)到2Ghz。從參數(shù)上看,南湖架構(gòu)對(duì)標(biāo)的是A76,2G主頻下SPEC06達(dá)到20分。如果能夠?qū)崿F(xiàn)這一設(shè)計(jì)目標(biāo),裸CPU性能在RISC-V處理器中是首屈一指的。
架構(gòu)如下:
8、木心處理器
木心處理器是一系列易于學(xué)習(xí)的 RISC-V 處理器和相關(guān)的基于 VSCode 的 IDE 稱為 TreeCore,具有豐富、詳細(xì)和交互式的在線教程,對(duì)初學(xué)者很友好。基于 VSCode 的 IDE 集成了代碼分析、波形模擬功能,可以自動(dòng)從云服務(wù)器中查找和組裝特定的工具鏈、IP 核和庫(kù)依賴項(xiàng),以開(kāi)發(fā)處理器或應(yīng)用程序。
特征:
對(duì)verilog、vhdl、chisel 和spinalHDL 的完整語(yǔ)言支持。
現(xiàn)代用戶界面
輕便、開(kāi)箱即用的功能
GPU 加速以實(shí)現(xiàn)快速實(shí)時(shí)渲染
9、Rocket
(UCB)標(biāo)量處理器:64位、5級(jí)流水線、但發(fā)射順序執(zhí)行處理器,特征:
支持MMU,支持分頁(yè)虛擬內(nèi)存??梢砸浦驳絃inux操作系統(tǒng)
具有兼容的的IEEE 754-2008標(biāo)準(zhǔn)的FPU
具有分支預(yù)測(cè)功能,具有BPB(Branch Prediction Buff)、BHT(Branch History Table)、RAS(Return Address Stack)
Rocket同樣采用Chisel語(yǔ)言編寫;
10、BOOM
(UCB)超標(biāo)量亂序執(zhí)行處理器;
BOOM也是采用Chisel編寫,全部代碼大約9000行;指令為RV64G
6級(jí)流水線:取指、譯碼/重命名/指令分配、發(fā)射/讀寄存器、執(zhí)行、內(nèi)存訪問(wèn)、回寫
11、Sodor
(UCB)針對(duì)教學(xué)的32位開(kāi)源處理器。Chisel編寫,支持5種處理器:?jiǎn)沃芷谔幚砥鳌?級(jí)流水線處理器、3級(jí)流水線處理器、5級(jí)流水線處理器、可執(zhí)行微碼的處理器。公眾號(hào):OpenFPGA
早期出于教學(xué)目的處理器,使用Chisel編寫,沒(méi)有什么實(shí)際商用價(jià)值。已經(jīng)很長(zhǎng)時(shí)間沒(méi)有更新了。
結(jié)構(gòu)相對(duì)清晰一些,如對(duì)不同深度PipeLine都有描述(分別有1階、2階、3階和5階);可以作為很好的示范代碼
12、YARVI
VARVI是RISC-V愛(ài)好者Tommy Thorn設(shè)計(jì)發(fā)布的簡(jiǎn)單的、32位開(kāi)源處理器,實(shí)現(xiàn)了RV32I,使用Verilog,目標(biāo)是為了能夠清晰準(zhǔn)確的實(shí)現(xiàn)RV32I
13、Pulpino
由蘇黎世聯(lián)邦理工大學(xué)與意大利博洛尼亞大學(xué)聯(lián)合開(kāi)發(fā)。32位,指令集:RV32I/RV32C/RV32M,擴(kuò)展了RISC-V指令;多核
14、GRVI Phalanx
大規(guī)模并行RISC-V(最多到千核),2~3級(jí)流水線,32位,其中在Artix-7 35T開(kāi)發(fā)板上已經(jīng)實(shí)現(xiàn)32 RISC-V處理器;在PYNQ-Z1上實(shí)現(xiàn)了80核;在UltraScale上實(shí)現(xiàn)了1680核的RISC-V;不開(kāi)源
15、Ibex
提到開(kāi)源RISC-V就不能不提Riscy系列了,尤其是zero-riscy,使用很廣泛。Ibex是脫胎于zero-riscy的core,支持RV32IMC及一些Z系列指令,由LowRISC維護(hù)。Ibex小巧精悍,文檔詳實(shí),學(xué)習(xí)資料豐富,支持verilator, 可以使用verilator+openOCD+GDB 仿真時(shí)debug。對(duì)于我這樣的重度Verilator依賴者來(lái)說(shuō)非常友好。
Ibex支持machine mode和user mode兩種privilege mode,可以實(shí)現(xiàn)比單machine mode更加豐富的功能。Ibex采用system verilog開(kāi)發(fā),對(duì)于傳統(tǒng)的IC工程師是個(gè)好消息。Ibex現(xiàn)在也支持了指令cache了,提高了performance,但裝了cache會(huì)讓core變得臃腫很多,對(duì)于學(xué)習(xí)cache controller的設(shè)計(jì)是個(gè)好事情。
Ibex使用類TLUL的自定義接口,官方的SoC是PULP。Google的OpenTitan項(xiàng)目也是基于Ibex。相關(guān)的設(shè)計(jì)學(xué)習(xí)資料算是相當(dāng)多了。
16、SweRV EH1
SweRV EH1是WD開(kāi)發(fā)的其中一款RISC-V core,支持RV32IMC,雙發(fā)射,單線程,9級(jí)流水,性能應(yīng)該說(shuō)是相當(dāng)不錯(cuò),28nm可以跑到1GHz。而且還有份詳細(xì)的文檔,不愧是大廠出品。
SweRV是使用Verilog/System Verilog開(kāi)發(fā),使用AXI接口,對(duì)熟悉AMBA且不想去學(xué)Chisel及Scala的同學(xué)來(lái)說(shuō)是相當(dāng)友好了。而且支持verilator,必須點(diǎn)贊。值得一提的是SweRV帶指令cache,且實(shí)現(xiàn)了豐富的cache maintenance自定義指令,非常值得學(xué)習(xí)。
審核編輯:劉清
評(píng)論