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 lcvexriscv 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 lcvexriscv 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 lcvexriscv 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 lcvexriscv 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)超标量乱序执行处理器;
boom也是采用chisel编写,全部代码大约9000行;指令为rv64g
6级流水线:取指、译码/重命名/指令分配、发射/读寄存器、执行、内存访问、回写
❝ 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
并联直流稳压电源怎么设计?
一种针对该文本检索任务的BERT算法方案DR-BERT
高精度人员定位管理系统
中兴通讯针对城轨行业数字化转型的需求推出了2231的城轨云解决方案
浅析PWM对单路并联电流检测的影响
关于RISC-V的二三事
币安先被入侵 后被碰瓷 又遭日本金融厅警告 将面临刑事指控
AI 和工业数字化时代,开发者对 OpenUSD 满怀期待
为什么Type-C耳机只能火热一段时间
构建一个基于通用密码的电子锁电路
【直播预告】6月9日电磁兼容与可靠性技术直播大讲坛(第三期)即将开始!
零序电流互感器的选型方法
波音公司正在准备为美国空军制造F-15EX战斗机
数字信号处理视频教程ppt
RTK、PPP与RTK-PPP?一文带您认识高精定位及如何进行高精定位GNSS测试!
关于无线充电/供电技术与方案介绍
芯片解密的技术特点介绍
交错式反相电荷泵——第一部分:用于低噪声负电压电源的新拓扑结构
汽车激光雷达软硬件制造商Luminar中国总部落户上海奉贤
大陆在建8座OLED面板厂产能全开亦不敌三星