RISC-V是一個基于精簡指令集(RISC)原則的開源指令集架構(gòu)(ISA)。
這里要明確兩個概念:指令集規(guī)范(Specification)和處理器實現(xiàn)(Implementation)是兩個不同層次的概念,要區(qū)分開。指令集(ISA)是規(guī)范標(biāo)準(zhǔn),往往用一本書或幾張紙來記錄描述,而處理器實現(xiàn)是基于指令集規(guī)范完成的源代碼。RISC-V是一個指令集規(guī)范。
我們可以基于x86/ARM/ RISC-V指令集,進行處理器微架構(gòu)設(shè)計和實現(xiàn)形成源代碼,并通過流片最終形成芯片產(chǎn)品。其中指令集規(guī)范與處理器實現(xiàn)的知識產(chǎn)權(quán)是獨立的,不能混為一談。
"RISC-V是開源的"表示指令集規(guī)范是開源、開放和免費的(open and free),這與x86與ARM指令集有本質(zhì)不同,但并不是指具體的處理器實現(xiàn)也都是開源免費的。
基于RISC-V指令集規(guī)范,既可以由開源社區(qū)來開發(fā)開源免費版的處理器實現(xiàn)(如Berkeley開發(fā)的Rocket核等),也可以有商業(yè)公司開發(fā)收費授權(quán)版的處理器實現(xiàn)(如國內(nèi)平頭哥玄鐵910、芯來N200核與優(yōu)矽渭河WH-32核等)。
下面按照實現(xiàn)難度大致排序
新增1、tinyriscv
tinyriscv
實現(xiàn)的是一個單核32位的小型RISC-V處理器核(tinyriscv),采用verilog語言編寫。設(shè)計目標(biāo)是對標(biāo)ARM Cortex-M3系列處理器。tinyriscv有以下特點:
支持RV32IM指令集,通過RISC-V指令兼容性測試;
采用三級流水線,即取指,譯碼,執(zhí)行;
可以運行C語言程序;
支持JTAG,可以通過openocd讀寫內(nèi)存(在線更新程序);
支持中斷;
支持總線;
支持FreeRTOS;
支持通過串口更新程序;
容易移植到任何FPGA平臺(如果資源足夠的話);
整體架構(gòu)
RIDECORE (RISc-v Dynamic Execution CORE) 是一個用 Verilog HDL 編寫的亂序 RISC-V 處理器。
RIDECORE 的微架構(gòu)基于“現(xiàn)代處理器設(shè)計:超標(biāo)量處理器的基礎(chǔ)”。因此,我們建議用戶在使用 RIDECORE 之前閱讀本書和我們的文檔 。
到目前為止,我們的 FPGA 原型設(shè)計已經(jīng)在 Xilinx VC707 板進行了原型驗證。該原型可以在 50MHz 的時鐘頻率下運行。
ridecode的架構(gòu)如下:
新增3、nanoFOX
可以“觸摸”的RISC-V。
使用SystemVerilog實現(xiàn)的一個小型RISC-V CPU內(nèi)核。這是一個帶有AHB和緩存(完整命令列表RV32I(沒有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òu)建項目也簡單,值得一試。
1、darkriscv
一晚從頭開始實現(xiàn)開源RISC-V!
盡管與其他 RISC-V 實現(xiàn)相比,代碼小而粗糙,但是作為初學(xué)或者初識RISC-V很友善(簡易)。雖然很簡易,但DarkRISCV具有許多令人印象深刻的功能:
實現(xiàn)大部分 RISC-V RV32E 指令集
實現(xiàn)大部分RISC-V RV32I指令集(缺少csr*、e和fence)
在超大規(guī)模 ku040 中工作頻率高達 250MHz(400MHz 帶超頻?。?/p>
便宜的 spartan-6 高達 100MHz,適合小型 spartan-3E,例如 XC3S100E!
大多數(shù)時間(通常是 71% 的時間)可以維持每條指令 1 個時鐘
靈活的哈佛架構(gòu)(易于集成緩存控制器、總線橋等)
在 xilinx(spartan-3、spartan-6、spartan-7、artix-7、kintex-7 和 kintex ultrascale)中運行良好
與一些altera和lattice FPGA一起工作得很好
適用于 RISC-V 的 gcc 9.0.0(無需補丁?。?/p>
使用 850-1500LUT(核心僅使用 LUT6 技術(shù),取決于啟用的功能和優(yōu)化)
可選的 RV32E 支持(與 LUT4 FPGA 配合使用效果更好)
可選的 16x16 位 MAC 指令(用于數(shù)字信號處理)
可選的粗粒度多線程 (MT)
流水線階段之間沒有互鎖!
BSD 許可證:可以在任何地方使用,沒有限制!
是不是迫不及待去試一試了!
2、picoRiscV
這個其實不需要過多介紹了,小巧且完善的RISC-V。
PicoRV32 是實現(xiàn)RISC-V RV32IMC 指令集的 CPU 內(nèi)核。它可以配置為 RV32E、RV32I、RV32IC、RV32IM 或 RV32IMC 內(nèi)核,并可選擇包含內(nèi)置中斷控制器。
特點:
小型(7 系列 Xilinx 架構(gòu)中的 750-2000 個 LUT)
高 fmax(7 系列 Xilinx FPGA 上為 250-450 MHz)
可選擇的本機內(nèi)存接口或 AXI4-Lite 主控
可選的 IRQ 支持(使用簡單的自定義 ISA)
可選的協(xié)處理器接口
該 CPU 旨在用作 FPGA 設(shè)計和 ASIC 中的輔助處理器。由于其高fmax,它可以集成到大多數(shù)現(xiàn)有設(shè)計中,而無需跨越時鐘域。當(dāng)在較低頻率下運行時,它會有很多時序裕量,因此可以添加到設(shè)計中而不會影響時序收斂。
3、cva6
CVA6 是一個 6 級、有序 CPU,它實現(xiàn)了 64 位 RISC-V 指令集。它完全實現(xiàn)了 I、M、A 和 C 擴展,如第 I 卷:用戶級 ISA V 2.3 以及特權(quán)擴展草案 1.10 中所述。它實現(xiàn)了三個權(quán)限級別 M、S、U 以完全支持類 Unix 操作系統(tǒng)。公眾號:OpenFPGA
它具有可配置的大小、單獨的 TLB、硬件 PTW 和分支預(yù)測(分支目標(biāo)緩沖區(qū)和分支歷史表)。主要設(shè)計目標(biāo)是減少關(guān)鍵路徑長度。
4、VexRiscv
用 SpinalHDL 編寫的 RISC-V 實現(xiàn)。以下是一些規(guī)格:
RV32I[M][A][F[D]][C] 指令集
流水線從 2 到 5+ 個階段([Fetch*X]、Decode、Execute、[Memory]、[WriteBack])
1.44 DMIPS/Mhz --no-inline 當(dāng)幾乎所有功能都啟用時(1.57 DMIPS/Mhz 當(dāng)分頻器查找表啟用時)
針對 FPGA 進行了優(yōu)化,不使用任何供應(yīng)商特定的 IP /原語
AXI4、Avalon、wishbone
可選的 MUL/DIV 擴展
可選 F32/F64 FPU(目前需要數(shù)據(jù)緩存)
可選的指令和數(shù)據(jù)緩存,公眾號:OpenFPGA
可選硬件重新填充 MMU
可選的調(diào)試擴展允許通過 GDB >> openOCD >> JTAG 連接進行 Eclipse 調(diào)試
RISC-V 特權(quán) ISA 規(guī)范 v1.10 中定義的機器、[Supervisor] 和 [User] 模式的可選中斷和異常處理。
移位指令的兩種實現(xiàn):單周期(全桶式移位器)和shiftNumber周期
每個階段可以有可選的旁路或互鎖危險邏輯
Linux 兼容
Zephyr兼容
FreeRTOS 端口
下面是運行的最高主頻及消耗的資源:
?
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有個官方的SoC:Briey,使用AXI接口。和Rocket Chip一樣,支持Verilator+OpenOCD+GDB仿真。和Rocketchip一樣都是使用scala解釋器sbt工具.
關(guān)于Spinal,可以查看《從Verilog到SpinalHDL》。
以上幾個小項目都適合了解和入門RISC-V,簡易是最大的特點,最主要的是都可以在FPGA開發(fā)板上運行,而且對FPGA要求也不高。
接下來就是幾個成熟點的項目了。
5、平頭哥無劍100
平頭哥無劍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
芯來科技研發(fā)的一款RISC-V core&SOC,是SI-RISCV/e200_opensource (https://github.com/SI-RISCV/e200_opensource)的進階版。
該存儲庫托管開源 Hummingbirdv2 E203 RISC-V 處理器內(nèi)核和 SoC 的項目,它由基于中國大陸的領(lǐng)先 RISC-V IP 和解決方案公司Nuclei System Technology開發(fā)和開源。公眾號:OpenFPGA
這是SI-RISCV/e200_opensource中維護的Hummingbird E203項目的升級版,所以我們稱之為Hummingbirdv2 E203.
在這個新版本中,我們有以下更新。
為 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語言實現(xiàn),便于用戶理解。
為 Hummingbirdv2 SoC 添加新的開發(fā)板(Nuclei ddr200t 和 mcu200t)支持。
7、香山開源高性能處理器
“香山”基于Chisel語言開發(fā),支持多核,采用亂序執(zhí)行、11級流水、6發(fā)射。采用28nm臺積電工藝預(yù)計達到1.3Ghz主頻,采用中芯國際14nm工藝預(yù)計達到2Ghz主頻。性能評估為7/Ghz(SEPC2006),換言之,第一版的雁棲湖架構(gòu)對標(biāo)的是ARM A72/A73。
“香山”第二代南湖架構(gòu)的目標(biāo)是10/G,在采用中芯國際14nm工藝的情況下主頻達到2Ghz。從參數(shù)上看,南湖架構(gòu)對標(biāo)的是A76,2G主頻下SPEC06達到20分。如果能夠?qū)崿F(xiàn)這一設(shè)計目標(biāo),裸CPU性能在RISC-V處理器中是首屈一指的。
架構(gòu)如下:
8、木心處理器
木心處理器是一系列易于學(xué)習(xí)的 RISC-V 處理器和相關(guān)的基于 VSCode 的 IDE 稱為 TreeCore,具有豐富、詳細和交互式的在線教程,對初學(xué)者很友好?;?VSCode 的 IDE 集成了代碼分析、波形模擬功能,可以自動從云服務(wù)器中查找和組裝特定的工具鏈、IP 核和庫依賴項,以開發(fā)處理器或應(yīng)用程序。
特征:
對verilog、vhdl、chisel 和spinalHDL 的完整語言支持。
現(xiàn)代用戶界面
輕便、開箱即用的功能
GPU 加速以實現(xiàn)快速實時渲染
9、Rocket
(UCB)標(biāo)量處理器:64位、5級流水線、但發(fā)射順序執(zhí)行處理器,特征:
支持MMU,支持分頁虛擬內(nèi)存??梢砸浦驳絃inux操作系統(tǒng)
具有兼容的的IEEE 754-2008標(biāo)準(zhǔn)的FPU
具有分支預(yù)測功能,具有BPB(Branch Prediction Buff)、BHT(Branch History Table)、RAS(Return Address Stack)
Rocket同樣采用Chisel語言編寫;
10、BOOM
(UCB)超標(biāo)量亂序執(zhí)行處理器;
BOOM也是采用Chisel編寫,全部代碼大約9000行;指令為RV64G
6級流水線:取指、譯碼/重命名/指令分配、發(fā)射/讀寄存器、執(zhí)行、內(nèi)存訪問、回寫
11、Sodor
(UCB)針對教學(xué)的32位開源處理器。Chisel編寫,支持5種處理器:單周期處理器、2級流水線處理器、3級流水線處理器、5級流水線處理器、可執(zhí)行微碼的處理器。公眾號:OpenFPGA
早期出于教學(xué)目的處理器,使用Chisel編寫,沒有什么實際商用價值。已經(jīng)很長時間沒有更新了。
結(jié)構(gòu)相對清晰一些,如對不同深度PipeLine都有描述(分別有1階、2階、3階和5階);可以作為很好的示范代碼
12、YARVI
VARVI是RISC-V愛好者Tommy Thorn設(shè)計發(fā)布的簡單的、32位開源處理器,實現(xiàn)了RV32I,使用Verilog,目標(biāo)是為了能夠清晰準(zhǔn)確的實現(xiàn)RV32I
13、Pulpino
由蘇黎世聯(lián)邦理工大學(xué)與意大利博洛尼亞大學(xué)聯(lián)合開發(fā)。32位,指令集:RV32I/RV32C/RV32M,擴展了RISC-V指令;多核
14、GRVI Phalanx
大規(guī)模并行RISC-V(最多到千核),2~3級流水線,32位,其中在Artix-7 35T開發(fā)板上已經(jīng)實現(xiàn)32 RISC-V處理器;在PYNQ-Z1上實現(xiàn)了80核;在UltraScale上實現(xiàn)了1680核的RISC-V;不開源
15、Ibex
提到開源RISC-V就不能不提Riscy系列了,尤其是zero-riscy,使用很廣泛。Ibex是脫胎于zero-riscy的core,支持RV32IMC及一些Z系列指令,由LowRISC維護。Ibex小巧精悍,文檔詳實,學(xué)習(xí)資料豐富,支持verilator, 可以使用verilator+openOCD+GDB 仿真時debug。對于我這樣的重度Verilator依賴者來說非常友好。
Ibex支持machine mode和user mode兩種privilege mode,可以實現(xiàn)比單machine mode更加豐富的功能。Ibex采用system verilog開發(fā),對于傳統(tǒng)的IC工程師是個好消息。Ibex現(xiàn)在也支持了指令cache了,提高了performance,但裝了cache會讓core變得臃腫很多,對于學(xué)習(xí)cache controller的設(shè)計是個好事情。
Ibex使用類TLUL的自定義接口,官方的SoC是PULP。Google的OpenTitan項目也是基于Ibex。相關(guān)的設(shè)計學(xué)習(xí)資料算是相當(dāng)多了。
16、SweRV EH1
SweRV EH1是WD開發(fā)的其中一款RISC-V core,支持RV32IMC,雙發(fā)射,單線程,9級流水,性能應(yīng)該說是相當(dāng)不錯,28nm可以跑到1GHz。而且還有份詳細的文檔,不愧是大廠出品。
SweRV是使用Verilog/System Verilog開發(fā),使用AXI接口,對熟悉AMBA且不想去學(xué)Chisel及Scala的同學(xué)來說是相當(dāng)友好了。而且支持verilator,必須點贊。值得一提的是SweRV帶指令cache,且實現(xiàn)了豐富的cache maintenance自定義指令,非常值得學(xué)習(xí)。
審核編輯:劉清
評論
查看更多