1.1 从封闭到开放:RISC-V 的起源与设计理念


1.1 从封闭到开放:RISC-V 的起源与设计理念

本节摘要:RISC-V 并非凭空出现的"颠覆者",而是伯克利团队针对旧指令集三大痼疾——授权成本、演进黑箱、教学失真——做的一次系统性减法。本节沿历史脉络梳理它如何从一门课程项目成长为国际开放标准,并拆解"极简基线加模块化扩展"这一核心理念的因果链。

从一段历史说起

要看清 RISC-V 的来路,得先把时钟拨回四十多年前。1980 年前后,伯克利的 David Patterson 团队与斯坦福的 John Hennessy 团队几乎同时提出精简指令集思想:真实程序里绝大多数动态执行的指令只是简单的取数、存数与加减,与其让硬件去伺候那些一年用不上几次的复杂寻址模式,不如把晶体管预算省下来给寄存器和流水线。伯克利的 RISC-I 与 RISC-II 芯片、斯坦福催生 MIPS 商业化的项目,共同奠定了"RISC"这个流派。有趣的是,Patterson 后来公开承认,RISC 这个名字是研究生们想出来抢经费的营销词,但词背后的测量数据是真的。

接下来三十年的商业史却与学术理想渐行渐远。x86 为了保住二进制兼容,在解码层前面垫了一层微码翻译,把"精简核"包装成"复杂指令集"继续卖;ARM 精简得彻底,却把指令集本身做成了授权生意——想造一颗 ARM 核,先签许可协议,再按片付版税;MIPS 几经转手,授权条款与架构演进方向随东家反复摇摆。对学术界与中小设计团队来说,局面变得尴尬:体系结构课程想让学生流片一颗真核,要么忍受数月规模的法律谈判,要么基于一套十年没演进的旧规范闭门造车。

旧契约的三重成本

把上面这段历史翻译成工程语言,封闭 ISA 的成本有三层。第一层是授权成本:架构许可的报价以百万美元计,对初创公司和高校几乎不可触达;第二层是演进黑箱:指令集往哪个方向加指令、加给谁优先用,由单一商业实体决定,使用者只能被动跟进——你可能为一颗永远用不上的扩展付了兼容税;第三层最隐蔽,是教学失真:x86 带着四十年的兼容包袱,用十几种变长格式和数百条指令把"指令集为何如此设计"这个问题掩埋在历史地层里,学生学到的是考古,不是设计。

2010 年,伯克利的 Krste Asanović 与 Patterson 团队面对的正是这三重成本:他们需要一个干净的指令集,用于教学处理器和领域专用加速器的研究原型。评估完手头选项后结论令人沮丧——x86 太复杂且有专利墙,ARM 要钱且不允许学术自由改动,MIPS 授权状态不明朗,开源的 OpenRISC 规范老旧且工具链薄弱。团队于是决定:自己定一套,规格书用宽松许可开放出去,谁都可以实现、修改、商用。这个"为教学做个够用的东西"的项目,就是 RISC-V 的起点——名字里的 V 是罗马数字五,接续伯克利 RISC-I 到 RISC-IV 的谱系。

减法怎么做:RV32I 的设计决策

RISC-V 第一版规范 RV32I 的核心数字是:四十七条指令、三十二个通用寄存器、全部指令定长三十二位。每个数字背后都是一次明确的取舍。定长编码牺牲了代码密度,换来取指与译码逻辑的极大简化——取指器永远知道下一条指令在哪儿,译码器不需要先判断指令边界;这为后来的压缩扩展 C 留出了干净的扩展位,短指令可以无损嵌入长指令流。三十二个寄存器、没有专用标志位(条件判断直接比较寄存器内容),则让编译器的寄存器分配和指令调度少掉一堆特例。

更关键的是结构性的减法:RV32I 里没有乘除法(拆给 M 扩展)、没有浮点(拆给 F 与 D 扩展)、没有原子操作(拆给 A 扩展)、没有用户级中断。基线只保留"任何一颗能跑 C 程序的处理器都绕不开"的部分,其余一切按需拼装。这就是 RISC-V 反复强调的模块化:基线足够小,小到一颗 MCU 也能全量实现;扩展足够正交,正交到组合后不会互相打架。 与之配套的理念还包括"避免过度设计"——规范明确预留了自定义编码空间,允许实现者在不动标准部分的前提下加私有指令,这条规则后来成为众多领域专用芯片选择 RISC-V 的直接原因。

图 1-2 RISC-V 演化时间线

图 1-2 RISC-V 演化时间线

从教案到公约:治理与冻结

2015 年 RISC-V 基金会成立,规范的所有权从伯克利实验室移交给成员共同治理;2019 年基金会迁至瑞士注册为 RISC-V International,进一步淡化单一国家的色彩。治理机制上有两条值得工程人注意的规则。其一,先共识后实现:任何标准扩展要成为"RISC-V"这个词的合法组成部分,必须经过技术委员会的公开评审与全体成员投票冻结(ratify),厂商可以私有扩展,但不能私下把私有指令包装成标准;其二,规范与实现分离:规格书只定义行为契约,不附带任何参考实现,避免"参考实现即事实标准"导致的隐性锁定。这两条让 RISC-V 在快速扩展的同时,避免了碎片化——同一个 Linux 内核能在所有标称 RV64GC 的芯片上启动,靠的就是这套冻结纪律。

工程现场:教学芯片选型复盘

理念讲完,回到一个具体案例,把本节知识用一遍。

背景:某高校集成电路课程要让学生分组流片一颗能跑 C 程序的 32 位核,预算覆盖一次流片,学期十六周,要求指令集足够简单但工具链现成。

操作:团队列出候选——基于 ARM Cortex-M0 授权改教学核、继续用往届遗留的旧 MIPS 教学核、改用 RV32I 自行实现。评估维度设四个:规格书可读性、工具链获取难度、学生实现工作量、课程内容的可迁移性。他们把 RV32I 规范打印出来让助教先通读,统计出基线部分真正需要学生实现的指令只有四十余条,其中大部分是不超过二十行 Verilog 就能写完的运算与访存指令;工具链方面,主流 GCC 与 LLVM 发行版均已内置 RISC-V 后端,敲一行目标三元组就能产出交叉编译结果,无需自行移植。

结果:课程最终选了 RV32IMC 组合,M 扩展交给学有余力的小组选做。十四周时全年级三分之二的小组跑通了在自研核上执行冒泡排序并打印结果的验收程序,流片一次成功。

解读:这个案例里起决定作用的不是性能——教学核的性能毫无意义——而是契约文本的可读性与工具链的零成本获取。RV32I 规范正文把每条指令的语义写成伪代码,学生照着写 RTL,写错了对着伪代码逐位排查即可;这正开放规范把"考古"变回"设计"的价值兑现。

变式:如果换成商业项目,评估维度就要加上授权总成本与长期演进风险,结论可能仍然指向 RISC-V,但理由会完全不同——这正是下一节三大架构对比要展开的内容。

本节要点回顾

  • RISC-I 到 RISC-V 的谱系:V 是罗马数字五,接续 1980 年代伯克利的精简指令实验,不是版本号;
  • 三重成本:授权成本、演进黑箱、教学失真,是开放指令集要解的三个原问题;
  • RV32I 的取舍:定长三十二位编码、无标志位、无乘除浮点,一切为译码简单和编译器友好让路;
  • 模块化不是口号:基线最小化加扩展正交化,加上规范预留的自定义编码空间,共同构成可裁剪的指令集;
  • 治理即技术:先冻结后实现、规范与实现分离,是 Linux 内核能通吃所有 RV64GC 芯片的原因。

下一节把 RISC-V 与 ARM、x86 放上同一张桌子,从编码、授权到生态逐项对照——那场架构评审会的正面交锋,就在下一节展开。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U