基于RISC-V的 Verilog/FPGA開源項目介紹
掃描二維碼
隨時隨地手機看文章
risc-v官網(wǎng)
?https://riscv.org/
RISC-V(跟我讀:“risk----------------five”)是一個基于精簡指令集(RISC)原則的開源指令集架構(ISA)。
這里要明確兩個概念:指令集規(guī)范(Specification)和處理器實現(xiàn)(Implementation)是兩個不同層次的概念,要區(qū)分開。指令集(ISA)是規(guī)范標準,往往用一本書或幾張紙來記錄描述,而處理器實現(xiàn)是基于指令集規(guī)范完成的源代碼。RISC-V是一個指令集規(guī)范。
我們可以基于x86/ARM/ RISC-V指令集,進行處理器微架構設計和實現(xiàn)形成源代碼,并通過流片最終形成芯片產(chǎn)品。其中指令集規(guī)范與處理器實現(xiàn)的知識產(chǎn)權是獨立的,不能混為一談。
"RISC-V是開源的"表示指令集規(guī)范是開源、開放和免費的(open and free),這與x86與ARM指令集有本質(zhì)不同,但并不是指具體的處理器實現(xiàn)也都是開源免費的。
基于RISC-V指令集規(guī)范,既可以由開源社區(qū)來開發(fā)開源免費版的處理器實現(xiàn)(如Berkeley開發(fā)的Rocket核等),也可以有商業(yè)公司開發(fā)收費授權版的處理器實現(xiàn)(如國內(nèi)平頭哥玄鐵910、芯來N200核與優(yōu)矽渭河WH-32核等)。
(以上來源:https://mp.weixin.qq.com/s/9PX5n_ZPjWM1OyqnijlIPw,版權歸文章作者所有)
國內(nèi)廠商在做的工作
RISC-V架構目前國內(nèi)有不少院所和公司在做相關的工作,芯來,平頭哥在做IP,兆易創(chuàng)新已經(jīng)推出了基于芯來的N200定制的GD32VF103產(chǎn)品線,一些公司在基于平頭哥的IP做SoC,嘉楠科技在去年推出了音視頻AI專用的K210,中科藍訊推出了一系列基于RISC-V架構的藍牙芯片,出貨量極大,其宣稱是全球首家RISC-V應用量過億(顆)的公司,而且全部搭載國產(chǎn)開源RT-Thread物聯(lián)網(wǎng)操作系統(tǒng)。
(以上來源 鏈接:https://www.zhihu.com/question/274106611/answer/975894883,版權歸作者所有)
下面按照實現(xiàn)難度大致排序
1、darkriscv
一晚從頭開始實現(xiàn)開源RISC-V!
盡管與其他 RISC-V 實現(xiàn)相比,代碼小而粗糙,但是作為初學或者初識RISC-V很友善(簡易)。雖然很簡易,但DarkRISCV具有許多令人印象深刻的功能:
- 實現(xiàn)大部分 RISC-V RV32E 指令集
- 實現(xiàn)大部分RISC-V RV32I指令集(缺少csr*、e和fence)
- 在超大規(guī)模 ku040 中工作頻率高達 250MHz(400MHz 帶超頻?。?
- 便宜的 spartan-6 高達 100MHz,適合小型 spartan-3E,例如 XC3S100E!
- 大多數(shù)時間(通常是 71% 的時間)可以維持每條指令 1 個時鐘
- 靈活的哈佛架構(易于集成緩存控制器、總線橋等)
- 在 xilinx(spartan-3、spartan-6、spartan-7、artix-7、kintex-7 和 kintex ultrascale)中運行良好
- 與一些altera和lattice FPGA一起工作得很好
- 適用于 RISC-V 的 gcc 9.0.0(無需補丁?。?
- 使用 850-1500LUT(核心僅使用 LUT6 技術,取決于啟用的功能和優(yōu)化)
- 可選的 RV32E 支持(與 LUT4 FPGA 配合使用效果更好)
- 可選的 16x16 位 MAC 指令(用于數(shù)字信號處理)
- 可選的粗粒度多線程 (MT)
- 流水線階段之間沒有互鎖!
- BSD 許可證:可以在任何地方使用,沒有限制!
是不是迫不及待去試一試了!
?https://github.com/darklife/darkriscv
2、picoRiscV
這個其實不需要過多介紹了,小巧且完善的RISC-V。
PicoRV32 是實現(xiàn)RISC-V RV32IMC 指令集的 CPU 內(nèi)核。它可以配置為 RV32E、RV32I、RV32IC、RV32IM 或 RV32IMC 內(nèi)核,并可選擇包含內(nèi)置中斷控制器。
特點:
- 小型(7 系列 Xilinx 架構中的 750-2000 個 LUT)
- 高 fmax(7 系列 Xilinx FPGA 上為 250-450 MHz)
- 可選擇的本機內(nèi)存接口或 AXI4-Lite 主控
- 可選的 IRQ 支持(使用簡單的自定義 ISA)
- 可選的協(xié)處理器接口
- 該 CPU 旨在用作 FPGA 設計和 ASIC 中的輔助處理器。由于其高fmax,它可以集成到大多數(shù)現(xiàn)有設計中,而無需跨越時鐘域。當在較低頻率下運行時,它會有很多時序裕量,因此可以添加到設計中而不會影響時序收斂。
?官方地址:https://bitbucket.org/casl/shakti_public
?https://github.com/cliffordwolf/picorv32
3、cva6
CVA6 是一個 6 級、有序 CPU,它實現(xiàn)了 64 位 RISC-V 指令集。它完全實現(xiàn)了 I、M、A 和 C 擴展,如第 I 卷:用戶級 ISA V 2.3 以及特權擴展草案 1.10 中所述。它實現(xiàn)了三個權限級別 M、S、U 以完全支持類 Unix 操作系統(tǒng)。
它具有可配置的大小、單獨的 TLB、硬件 PTW 和分支預測(分支目標緩沖區(qū)和分支歷史表)。主要設計目標是減少關鍵路徑長度。
?https://github.com/openhwgroup/cva6
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 當幾乎所有功能都啟用時(1.57 DMIPS/Mhz 當分頻器查找表啟用時)
- 針對 FPGA 進行了優(yōu)化,不使用任何供應商特定的 IP /原語
- AXI4、Avalon、wishbone
- 可選的 MUL/DIV 擴展
- 可選 F32/F64 FPU(目前需要數(shù)據(jù)緩存)
- 可選的指令和數(shù)據(jù)緩存
- 可選硬件重新填充 MMU
- 可選的調(diào)試擴展允許通過 GDB >> openOCD >> JTAG 連接進行 Eclipse 調(diào)試
- RISC-V 特權 ISA 規(guī)范 v1.10 中定義的機器、[Supervisor] 和 [User] 模式的可選中斷和異常處理。
- 移位指令的兩種實現(xiàn):單周期(全桶式移位器)和shiftNumber周期
- 每個階段可以有可選的旁路或互鎖危險邏輯
- Linux 兼容(SoC:https : //github.com/enjoy-digital/linux-on-litex-vexriscv)
- 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工具.
?https://github.com/SpinalHDL/VexRiscv
以上幾個小項目都適合了解和入門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
?https://github.com/T-head-Semi/wujian100_open
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 的項目,它由基于中國大陸的領先 RISC-V IP 和解決方案公司Nuclei System Technology開發(fā)和開源。
這是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接口外設(GPIO、I2C、UART、SPI、PWM)集成到Hummingbirdv2 SoC中,這些外設采用Verilog語言實現(xiàn),便于用戶理解。
- 為 Hummingbirdv2 SoC 添加新的開發(fā)板(Nuclei ddr200t 和 mcu200t)支持。
歡迎訪問https://github.com/riscv-mcu/hbird-sdk/使用蜂鳥 E203 軟件開發(fā)包。
歡迎訪問https://www.rvmcu.com/community.html參與蜂鳥E203的討論。

?https://github.com/SI-RISCV/e200_opensource
?https://github.com/riscv-mcu/e203_hbirdv2
7、香山開源高性能處理器
“香山”基于Chisel語言開發(fā),支持多核,采用亂序執(zhí)行、11級流水、6發(fā)射。采用28nm臺積電工藝預計達到1.3Ghz主頻,采用中芯國際14nm工藝預計達到2Ghz主頻。性能評估為7/Ghz(SEPC2006),換言之,第一版的雁棲湖架構對標的是ARM A72/A73。
“香山”第二代南湖架構的目標是10/G,在采用中芯國際14nm工藝的情況下主頻達到2Ghz。從參數(shù)上看,南湖架構對標的是A76,2G主頻下SPEC06達到20分。如果能夠實現(xiàn)這一設計目標,裸CPU性能在RISC-V處理器中是首屈一指的。
架構如下:
知乎首頁:https://www.zhihu.com/people/openxiangshan
關于Chisel和Spinal介紹《https://zhuanlan.zhihu.com/p/89249985》。
?https://github.com/OpenXiangShan/XiangShan
8、木心處理器
木心處理器是一系列易于學習的 RISC-V 處理器和相關的基于 VSCode 的 IDE 稱為 TreeCore,具有豐富、詳細和交互式的在線教程,對初學者很友好?;?VSCode 的 IDE 集成了代碼分析、波形模擬功能,可以自動從云服務器中查找和組裝特定的工具鏈、IP 核和庫依賴項,以開發(fā)處理器或應用程序。
特征:
- 對verilog、vhdl、chisel 和spinalHDL 的完整語言支持。
- 現(xiàn)代用戶界面
- 輕便、開箱即用的功能
- GPU 加速以實現(xiàn)快速實時渲染
?https://github.com/microdynamics-cpu/tree-core-ide
9、Rocket
(UCB)標量處理器:64位、5級流水線、但發(fā)射順序執(zhí)行處理器,特征:
- 支持MMU,支持分頁虛擬內(nèi)存。可以移植到Linux操作系統(tǒng)
- 具有兼容的的IEEE 754-2008標準的FPU
- 具有分支預測功能,具有BPB(Branch Prediction Buff)、BHT(Branch History Table)、RAS(Return Address Stack)
Rocket同樣采用Chisel語言編寫;

?https://github.com/freechipsproject/rocket-chip
10、BOOM
(UCB)超標量亂序執(zhí)行處理器;
-
BOOM也是采用Chisel編寫,全部代碼大約9000行;指令為RV64G
-
6級流水線:取指、譯碼/重命名/指令分配、發(fā)射/讀寄存器、執(zhí)行、內(nèi)存訪問、回寫

?https://github.com/riscv-boom/riscv-boom
11、Sodor
(UCB)針對教學的32位開源處理器。Chisel編寫,支持5種處理器:單周期處理器、2級流水線處理器、3級流水線處理器、5級流水線處理器、可執(zhí)行微碼的處理器。
早期出于教學目的處理器,使用Chisel編寫,沒有什么實際商用價值。已經(jīng)很長時間沒有更新了。
結構相對清晰一些,如對不同深度PipeLine都有描述(分別有1階、2階、3階和5階);可以作為很好的示范代碼
?https://github.com/ucb-bar/riscv-sodor
12、YARVI
VARVI是RISC-V愛好者Tommy Thorn設計發(fā)布的簡單的、32位開源處理器,實現(xiàn)了RV32I,使用Verilog,目標是為了能夠清晰準確的實現(xiàn)RV32I
?https://github.com/tommythorn/yarvi
13、Pulpino
由蘇黎世聯(lián)邦理工大學與意大利博洛尼亞大學聯(lián)合開發(fā)。32位,指令集:RV32I/RV32C/RV32M,擴展了RISC-V指令;多核
?網(wǎng)址:https://www.pulp-platform.org/
?https://github.com/pulp-platform/pulpino
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小巧精悍,文檔詳實,學習資料豐富,支持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變得臃腫很多,對于學習cache controller的設計是個好事情。
Ibex使用類TLUL的自定義接口,官方的SoC是PULP。Google的OpenTitan項目也是基于Ibex。相關的設計學習資料算是相當多了。
?https://github.com/lowRISC/ibex
?文檔:https://ibex-core.readthedocs.io/en/latest/introduction.html
16、SweRV EH1
SweRV EH1是WD開發(fā)的其中一款RISC-V core,支持RV32IMC,雙發(fā)射,單線程,9級流水,性能應該說是相當不錯,28nm可以跑到1GHz。而且還有份詳細的文檔,不愧是大廠出品。
SweRV是使用Verilog/System Verilog開發(fā),使用AXI接口,對熟悉AMBA且不想去學Chisel及Scala的同學來說是相當友好了。而且支持verilator,必須點贊。值得一提的是SweRV帶指令cache,且實現(xiàn)了豐富的cache maintenance自定義指令,非常值得學習。
?https://github.com/chipsalliance/Cores-SweRV
大廠出品,進階學習佳作。
17、picorio
官方出品。
2017年圖靈獎得主大衛(wèi)·帕特森教授(David Patterson)領銜的RISC-V國際開源實驗室(RIOS:RISC-V International Open Source Lab)發(fā)布了全球首個可運行Linux的全開源RISC-V微型電腦系統(tǒng)PicoRio項目,用于構建更透明、低功耗、定制能力強的高效能邊緣計算平臺。PicoRio最大的特點是從CPU設計,到PCB電路板設計,再到操作系統(tǒng)核心軟件全部開源,核心架構使用最新的開源RISC-V指令集技術。除高質(zhì)量工業(yè)級的開源IP之外,PicoRio還將提供開源的參考SoC設計,以及詳盡的集成文檔。PicoRio基于開源的處理器,擁有許多IP的支持。在軟件方面,PicoRio設計了一個整體軟件架構,具有豐富的操作系統(tǒng)環(huán)境以及其他程序的支持,因此擁有一個強大的軟件生態(tài)。PicoRio的發(fā)布,標志著RIOS實驗室進入了實際產(chǎn)出的階段。之后,RIOS實驗室將致力于在RISC-V生態(tài)下打造更開源、更低功耗和更安全的軟硬件生態(tài),并負責維護整個PicoRio的硬件系統(tǒng)和軟件架構。
PicoRio項目涵擴了對Chromium OS內(nèi)核以及V8 JavaScript 引擎的RISC-V平臺移植和支持??蛇\行完整的Linux和FreeRTOS系統(tǒng)。PicoRio項目將于2021年完成ARM A75級別的芯片設計和驗證,將用于 RISC-V 的平板電腦/筆記本電腦,其中所有應用程序軟件和存儲都在云中運行(類似 Chromebook)。





