1.认识RISC-V
RISC-V(发音为“risk-five”)是一种基于精简指令集(RISC)原则的开源指令集架构(ISA),由加州大学伯克利分校的研究团队于2010年发起并开发。其名称中的“V”既代表这是伯克利设计的第五代RISC架构,也象征其灵活性(Variation)和向量(Vectors)处理能力。与x86、ARM等专有架构不同,RISC-V完全开放且免费使用,允许任何人设计、制造和销售基于RISC-V的芯片和软件,无需支付授权费用或受专利限制。
2.与其他架构的不同
RISC是Reduced Instruction Set Computer(精简指令集计算机)的缩写,与CISC对应。RISC 侧重于简化硬件以提高效率,而CISC 则侧重于增加指令复杂性来简化软件设计。
RISC-V和ARM虽然都源自精简指令集(RISC)的设计哲学,但在技术实现、开放性、商业模式和应用生态上存在显著差异。两者都继承了RISC的核心原则,如指令格式规整、种类精简、采用加载/存储(Load/Store)架构、大量使用寄存器操作以减少内存访问,从而提升执行效率和能效比。 从技术的角度来看,以RISC为架构体系的ARM指令集的指令格式统一、种类少、寻址方式少,简单的指令意味着相应硬件线路可以尽量做到最佳化,从而提高执行速率。而RISC-V指令集也是基于RISC原理建立的开放指令集架构(ISA)。两者区别可能在于,ARM标准授权方式只能根据自身需求,调整产品频率和功耗,不可以更改原有设计,以至于ARM架构文档冗长,指令数目复杂;RISC-V规避了这个缺点,架构文档页数仅有200多页,指令数目少,自由定制,操作方便。
以下为三种常见的架构的多方面对比
| 三种架构 | RISC-V | x86 | ARM |
|---|---|---|---|
| 指令集类型 | RISC (精简指令集) | CISC (复杂指令集) | RISC (精简指令集) |
| 核心设计哲学 | 极简、模块化、开源。基础指令集(如RV32I/RV64I)非常精简(约40条指令),可通过标准或自定义扩展(如 M, A, F, D, C, V)灵活组合,无历史兼容包袱 。 | 复杂、高性能、强兼容性。指令集庞大且复杂,单条指令可执行复杂操作,但需严格向后兼容,导致架构相对臃肿 。 | 高效、低功耗、生态统一。指令集相对精简固定,提供标准化扩展(如NEON, TrustZone),在移动端生态成熟,但定制灵活性受限 。 |
| 商业模式 | 完全开源免费 (如BSD许可证)。无授权费用,可自由使用、修改和商业化,由RISC-V国际基金会社区驱动 。 | 闭源私有。由Intel和AMD严格控制,需支付高额授权费,无法自由定制指令集 。 | 闭源授权。需向ARM支付架构授权费或内核版税(通常为芯片售价的1%-3%),定制需ARM批准 。 |
| 性能与功耗 | 低功耗优势突出,模块化设计可裁剪无用模块,适合IoT、嵌入式。高性能领域(如服务器)正快速发展,但依赖设计实现 。 | 高性能领先(尤其单核),擅长计算密集型任务(如服务器、PC),但功耗较高,不适合移动设备 。 | 能效比优异,在移动端(手机、平板)近乎垄断。高性能版本(如苹果M系列、服务器芯片)正渗透PC和数据中心 。 |
| 应用场景 | 嵌入式/IoT(主导)、边缘计算、AI加速、汽车电子、新兴服务器(如阿里平头哥C930)。 | 服务器/数据中心(主导)、桌面PC、工作站、高性能计算(传统优势领域)。 | 移动设备(智能手机、平板,垄断)、嵌入式系统、服务器(增长中,如AWS Graviton)。 |
| 生态成熟度 | 快速成长中。Linux支持完善,工具链快速发展,但Windows/Android全面支持仍较弱,软件生态相比x86/ARM仍有差距 。 | 极成熟。拥有完整的Windows/Linux软件生态,几乎所有的桌面和服务器应用都兼容x86 。 | 极成熟。移动端生态(Android/iOS)强大,工具链、IP核、开发者社区都非常完善 。 |
| 主要挑战 | 软件生态碎片化风险;高性能处理器设计复杂度高;与x86/ARM成熟生态竞争需时间 。 | 功耗高;架构复杂;创新成本高;受限于Intel和AMD 。 | 授权费用可能高昂;定制灵活性受限;地缘政治可能影响授权获取(如最新v9架构)。 |
| 未来趋势 | 在AIoT、边缘计算、汽车电子等领域快速渗透;中国厂商推动自主可控;谷歌Android支持将助推发展 。 | 通过先进封装(如3D Foveros)等技术维持性能优势;但在能效和成本上持续面临ARM和RISC-V挑战 。 | 巩固移动端地位并向服务器、PC扩展;但授权模式和高成本可能推动部分厂商转向RISC-V 。 |
3.在FPGA上应用RISC-V
步骤大概如下
-
创建工程:在 Vivado 中新建项目,选择正确的 FPGA 型号(如 xc7a35tftg256-1)。
-
添加源文件:将设计源文件添加到工程。
-
添加约束:提供引脚分配和时序约束文件 ,用户需根据自己开发板的引脚定义进行修改。
-
生成与下载比特流:综合、实现并生成
.bit文件,然后通过 Hardware Manager 将其下载到 FPGA。 -
固化到 Flash:教程还介绍了如何将设计固化到 FPGA 的配置 Flash 中,实现上电自动加载。
-
下载程序:加载到处理器内存中:
- 通过 JTAG:使用
openocd和telnet连接,执行load_image和resume等命令。 - 通过 UART:使用项目提供的 Python 脚本
tinyriscv_fw_downloader.py,通过串口进行下载(需使能内置的 UART debug 模块)。
- 通过 JTAG:使用
下载比特流就是“烧录电路”,当比特流下载到FPGA时,FPGA内部的SRAM配置存储器会根据这个文件的内容被重新写入,从而重塑整个芯片的硬件连接和逻辑功能。那么烧入RISC-V架构后,它还需要运行软件。比特流(.bit)搭建了舞台(硬件系统),软件(.bin)才是舞台上表演的剧目(UI和功能)。