RISC-V(跟我讀:“risk----------------five”)是一個基于精簡指令集(RISC)原則的開源指令集架構(ISA)。
這里要明確兩個概念:指令集規范(Specification)和處理器實現(Implementation)是兩個不同層次的概念,要區分開。指令集(ISA)是規范標準,往往用一本書或幾張紙來記錄描述,而處理器實現是基于指令集規范完成的源代碼。RISC-V是一個指令集規范。
我們可以基于x86/ARM/ RISC-V指令集,進行處理器微架構設計和實現形成源代碼,并通過流片最終形成芯片產品。其中指令集規范與處理器實現的知識產權是獨立的,不能混為一談。
"RISC-V是開源的"表示指令集規范是開源、開放和免費的(open and free),這與x86與ARM指令集有本質不同,但并不是指具體的處理器實現也都是開源免費的。
基于RISC-V指令集規范,既可以由開源社區來開發開源免費版的處理器實現(如Berkeley開發的Rocket核等),也可以有商業公司開發收費授權版的處理器實現(如國內平頭哥玄鐵910、芯來N200核與優矽渭河WH-32核等)。
(以上來源:https://mp.weixin.qq.com/s/9PX5n_ZPjWM1OyqnijlIPw,版權歸文章作者所有)
國內廠商在做的工作
RISC-V架構目前國內有不少院所和公司在做相關的工作,芯來,平頭哥在做IP,兆易創新已經推出了基于芯來的N200定制的GD32VF103產品線,一些公司在基于平頭哥的IP做SoC,嘉楠科技在去年推出了音視頻AI專用的K210,中科藍訊推出了一系列基于RISC-V架構的藍牙芯片,出貨量極大,其宣稱是全球首家RISC-V應用量過億(顆)的公司,而且全部搭載國產開源RT-Thread物聯網操作系統。公眾號:OpenFPGA
(以上來源 鏈接:https://www.zhihu.com/question/274106611/answer/975894883,版權歸作者所有)
更完整的總結查看《RISC-V指令集架構介紹及國內外廠商介紹》。
下面按照實現難度大致排序
新增1、tinyriscv
tinyriscv
完整的項目說明:
?https://liangkangnan.gitee.io/2020/04/29/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%86%99RISC-V%E5%A4%84%E7%90%86%E5%99%A8/
?
實現的是一個單核32位的小型RISC-V處理器核(tinyriscv),采用verilog語言編寫。設計目標是對標ARM Cortex-M3系列處理器。tinyriscv有以下特點:
- 支持RV32IM指令集,通過RISC-V指令兼容性測試;
- 采用三級流水線,即取指,譯碼,執行;
- 可以運行C語言程序;
- 支持JTAG,可以通過openocd讀寫內存(在線更新程序);
- 支持中斷;
- 支持總線;
- 支持FreeRTOS;
- 支持通過串口更新程序;
- 容易移植到任何FPGA平臺(如果資源足夠的話);
整體架構
?https://gitee.com/liangkangnan/tinyriscv
?
詳細的中文設計說明,非常適合入門!
新增2、ridecore
?
?https://github.com/ridecore/ridecore
RIDECORE (RISc-v Dynamic Execution CORE) 是一個用 Verilog HDL 編寫的亂序 RISC-V 處理器。
?
RIDECORE 的微架構基于“現代處理器設計:超標量處理器的基礎”(https://www.waveland.com/browse.php?t=624&r=d|259)。因此,我們建議用戶在使用 RIDECORE 之前閱讀本書和我們的文檔 (doc/ridecore_document.pdf)。
到目前為止,我們的 FPGA 原型設計已經在?Xilinx VC707 板進行了原型驗證。該原型可以在 50MHz 的時鐘頻率下運行。
ridecode的架構如下:
?
?
?
?
1、darkriscv
一晚從頭開始實現開源RISC-V!
盡管與其他 RISC-V 實現相比,代碼小而粗糙,但是作為初學或者初識RISC-V很友善(簡易)。雖然很簡易,但DarkRISCV具有許多令人印象深刻的功能:
- 實現大部分 RISC-V RV32E 指令集
- 實現大部分RISC-V RV32I指令集(缺少csr*、e和fence)
- 在超大規模 ku040 中工作頻率高達 250MHz(400MHz 帶超頻!)
- 便宜的 spartan-6 高達 100MHz,適合小型 spartan-3E,例如 XC3S100E!
- 大多數時間(通常是 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 技術,取決于啟用的功能和優化)
- 可選的 RV32E 支持(與 LUT4 FPGA 配合使用效果更好)
- 可選的 16x16 位 MAC 指令(用于數字信號處理)
- 可選的粗粒度多線程 (MT)
- 流水線階段之間沒有互鎖!
- BSD 許可證:可以在任何地方使用,沒有限制!
是不是迫不及待去試一試了!
?https://github.com/darklife/darkriscv
2、picoRiscV
這個其實不需要過多介紹了,小巧且完善的RISC-V。
PicoRV32 是實現RISC-V RV32IMC 指令集的 CPU 內核。它可以配置為 RV32E、RV32I、RV32IC、RV32IM 或 RV32IMC 內核,并可選擇包含內置中斷控制器。
特點:
- 小型(7 系列 Xilinx 架構中的 750-2000 個 LUT)
- 高 fmax(7 系列 Xilinx FPGA 上為 250-450 MHz)
- 可選擇的本機內存接口或 AXI4-Lite 主控
- 可選的 IRQ 支持(使用簡單的自定義 ISA)
- 可選的協處理器接口
- 該 CPU 旨在用作 FPGA 設計和 ASIC 中的輔助處理器。由于其高fmax,它可以集成到大多數現有設計中,而無需跨越時鐘域。當在較低頻率下運行時,它會有很多時序裕量,因此可以添加到設計中而不會影響時序收斂。
?官方地址:https://bitbucket.org/casl/shakti_public
?https://github.com/cliffordwolf/picorv32
3、cva6
CVA6 是一個 6 級、有序 CPU,它實現了 64 位 RISC-V 指令集。它完全實現了 I、M、A 和 C 擴展,如第 I 卷:用戶級 ISA V 2.3 以及特權擴展草案 1.10 中所述。它實現了三個權限級別 M、S、U 以完全支持類 Unix 操作系統。公眾號:OpenFPGA
它具有可配置的大小、單獨的 TLB、硬件 PTW 和分支預測(分支目標緩沖區和分支歷史表)。主要設計目標是減少關鍵路徑長度。
?https://github.com/openhwgroup/cva6
4、VexRiscv
用 SpinalHDL 編寫的 RISC-V 實現。以下是一些規格:
- 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 進行了優化,不使用任何供應商特定的 IP /原語
- AXI4、Avalon、wishbone
- 可選的 MUL/DIV 擴展
- 可選 F32/F64 FPU(目前需要數據緩存)
- 可選的指令和數據緩存,
- 可選硬件重新填充 MMU
- 可選的調試擴展允許通過 GDB >> openOCD >> JTAG 連接進行 Eclipse 調試
- RISC-V 特權 ISA 規范 v1.10 中定義的機器、[Supervisor] 和 [User] 模式的可選中斷和異常處理。
- 移位指令的兩種實現:單周期(全桶式移位器)和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工具.
關于Spinal,可以查看《從Verilog到SpinalHDL》。
?https://github.com/SpinalHDL/VexRiscv
以上幾個小項目都適合了解和入門RISC-V,簡易是最大的特點,最主要的是都可以在FPGA開發板上運行,而且對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
芯來科技研發的一款RISC-V core&SOC,是SI-RISCV/e200_opensource (https://github.com/SI-RISCV/e200_opensource)的進階版。
該存儲庫托管開源 Hummingbirdv2 E203 RISC-V 處理器內核和 SoC 的項目,它由基于中國大陸的領先 RISC-V IP 和解決方案公司Nuclei System Technology開發和開源。公眾號:OpenFPGA
這是SI-RISCV/e200_opensource中維護的Hummingbird E203項目的升級版,所以我們稱之為Hummingbirdv2 E203.
在這個新版本中,我們有以下更新。
- 為 E203 內核添加 NICE(Nuclei Instruction Co-unit Extension),因此用戶可以輕松創建帶有 E203 內核的定制硬件協同單元。
- 將PULP Platform的APB接口外設(GPIO、I2C、UART、SPI、PWM)集成到Hummingbirdv2 SoC中,這些外設采用Verilog語言實現,便于用戶理解。
- 為 Hummingbirdv2 SoC 添加新的開發板(Nuclei ddr200t 和 mcu200t)支持。
歡迎訪問https://github.com/riscv-mcu/hbird-sdk/使用蜂鳥 E203 軟件開發包。
歡迎訪問https://www.rvmcu.com/community.html參與蜂鳥E203的討論。
??https://github.com/SI-RISCV/e200_opensource
?https://github.com/riscv-mcu/e203_hbirdv2
7、香山開源高性能處理器
“香山”基于Chisel語言開發,支持多核,采用亂序執行、11級流水、6發射。采用28nm臺積電工藝預計達到1.3Ghz主頻,采用中芯國際14nm工藝預計達到2Ghz主頻。性能評估為7/Ghz(SEPC2006),換言之,第一版的雁棲湖架構對標的是ARM A72/A73。
“香山”第二代南湖架構的目標是10/G,在采用中芯國際14nm工藝的情況下主頻達到2Ghz。從參數上看,南湖架構對標的是A76,2G主頻下SPEC06達到20分。如果能夠實現這一設計目標,裸CPU性能在RISC-V處理器中是首屈一指的。
?
更詳細介紹《不采用Verilog,RTL開源!國產香山RISC-V高性能處理器問世!亂序執行、11級流水、6發射!性能堪比A76》。
架構如下:
知乎首頁: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 核和庫依賴項,以開發處理器或應用程序。
特征:
- 對verilog、vhdl、chisel 和spinalHDL 的完整語言支持。
- 現代用戶界面
- 輕便、開箱即用的功能
- GPU 加速以實現快速實時渲染
?https://github.com/microdynamics-cpu/tree-core-ide
9、Rocket
(UCB)標量處理器:64位、5級流水線、但發射順序執行處理器,特征:
- 支持MMU,支持分頁虛擬內存。可以移植到Linux操作系統
- 具有兼容的的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)超標量亂序執行處理器;
?https://github.com/riscv-boom/riscv-boom
11、Sodor
(UCB)針對教學的32位開源處理器。Chisel編寫,支持5種處理器:單周期處理器、2級流水線處理器、3級流水線處理器、5級流水線處理器、可執行微碼的處理器。公眾號:OpenFPGA
早期出于教學目的處理器,使用Chisel編寫,沒有什么實際商用價值。已經很長時間沒有更新了。
結構相對清晰一些,如對不同深度PipeLine都有描述(分別有1階、2階、3階和5階);可以作為很好的示范代碼
?https://github.com/ucb-bar/riscv-sodor
12、YARVI
VARVI是RISC-V愛好者Tommy Thorn設計發布的簡單的、32位開源處理器,實現了RV32I,使用Verilog,目標是為了能夠清晰準確的實現RV32I
?https://github.com/tommythorn/yarvi
13、Pulpino
由蘇黎世聯邦理工大學與意大利博洛尼亞大學聯合開發。32位,指令集:RV32I/RV32C/RV32M,擴展了RISC-V指令;多核
??網址:https://www.pulp-platform.org/
?https://github.com/pulp-platform/pulpino
14、GRVI Phalanx
大規模并行RISC-V(最多到千核),2~3級流水線,32位,其中在Artix-7 35T開發板上已經實現32 RISC-V處理器;在PYNQ-Z1上實現了80核;在UltraScale上實現了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,可以實現比單machine mode更加豐富的功能。Ibex采用system verilog開發,對于傳統的IC工程師是個好消息。Ibex現在也支持了指令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開發的其中一款RISC-V core,支持RV32IMC,雙發射,單線程,9級流水,性能應該說是相當不錯,28nm可以跑到1GHz。而且還有份詳細的文檔,不愧是大廠出品。
SweRV是使用Verilog/System Verilog開發,使用AXI接口,對熟悉AMBA且不想去學Chisel及Scala的同學來說是相當友好了。而且支持verilator,必須點贊。值得一提的是SweRV帶指令cache,且實現了豐富的cache maintenance自定義指令,非常值得學習。
?https://github.com/chipsalliance/Cores-SweRV
大廠出品,進階學習佳作。
17、picorio
官方出品。
?2017年圖靈獎得主大衛·帕特森教授(David Patterson)領銜的RISC-V國際開源實驗室(RIOS:RISC-V International Open Source Lab)發布了全球首個可運行Linux的全開源RISC-V微型電腦系統PicoRio項目,用于構建更透明、低功耗、定制能力強的高效能邊緣計算平臺。PicoRio最大的特點是從CPU設計,到PCB電路板設計,再到操作系統核心軟件全部開源,核心架構使用最新的開源RISC-V指令集技術。除高質量工業級的開源IP之外,PicoRio還將提供開源的參考SoC設計,以及詳盡的集成文檔。PicoRio基于開源的處理器,擁有許多IP的支持。在軟件方面,PicoRio設計了一個整體軟件架構,具有豐富的操作系統環境以及其他程序的支持,因此擁有一個強大的軟件生態。PicoRio的發布,標志著RIOS實驗室進入了實際產出的階段。之后,RIOS實驗室將致力于在RISC-V生態下打造更開源、更低功耗和更安全的軟硬件生態,并負責維護整個PicoRio的硬件系統和軟件架構。
PicoRio項目涵擴了對Chromium OS內核以及V8 JavaScript 引擎的RISC-V平臺移植和支持。可運行完整的Linux和FreeRTOS系統。PicoRio項目將于2021年完成ARM A75級別的芯片設計和驗證,將用于 RISC-V 的平板電腦/筆記本電腦,其中所有應用程序軟件和存儲都在云中運行(類似 Chromebook)。
參考資料:
- PicoRio Specification:https://gitlab.com/picorio/picorio-doc
- RISC-V Specification: https://riscv.org/technical/specifications/
- RISC-V Tools https://github.com/riscv/riscv-tools
- RISC-V GNU Toolchain//github.com/riscv/riscv-gnu-toolchain
項目地址
?? 審核編輯 :李倩https://rioslab.org
評論
查看更多