【外评】如何改进 RISC-V 规范
内容提要
本文讨论了RISC-V规范的问题和改进方法,建议使用易于阅读和操作的格式来捕获架构,并将SAIL规范整合到文档中。作者还提到了将Spike模拟器与SAIL规范整合的可能性。总体而言,RISC-V规范需要改进以提高可读性和可重用性。
延伸解读
规范碎片化带来的实际成本
文章指出,RISC-V 规范分散在指令集手册、测试套件、Spike 模拟器和 SAIL 模型四个独立工件中,彼此缺乏关联。这意味着架构扩展需要以四种不同格式重复编写相同内容,并手动确保一致性。更广泛地,硬件设计、验证、编译器、操作系统等下游生态也必须各自转录信息,导致每次修订都需在多处更新,显著增加维护负担和出错风险。
机器可读格式作为整合起点
作者建议用 JSON/YAML/XML 等易读格式捕获指令编码、CSR 定义、配置约束等架构信息,并从中自动生成文档、测试、模拟器代码等工件。这需要重构现有手册、Spike、测试套件和 SAIL 规范,使其围绕机器可读数据生成。虽然只是第一步,但这是减少重复劳动、支持扩展自动化的关键,尤其对频繁演进的扩展设计至关重要。
SAIL 的可用性困境与改进方向
SAIL 作为形式化规范,因借鉴 OCaml、Liquid 类型等学术语言,对硬件和系统开发者而言语法晦涩、缺乏注释。文章建议改进语法、应用合理默认值以减少类型系统杂乱,并参考 ASL-1.0 的某些语法。但 SAIL 的成功反而阻碍彻底改变,因为人们担心语义变化。将 SAIL 片段与自然语言描述并排整合到手册中,是更易实现的改进,已有工具支持。
Spike 与 SAIL 整合的潜在收益
文章提出,Spike 模拟器未来可从 SAIL 规范生成对新扩展的支持,从而消除维护两个可执行规范的需要。这需要定义接口,让生成的代码能访问 Spike 中的状态表示。虽然工作量不小,但若能实现,将减少手动同步,使 Spike 更及时地支持新扩展,并增强其作为黄金参考模型的可靠性。
Q&A
RISC-V规范目前存在哪些主要问题?
RISC-V规范依赖自然语言,描述不精确且难以测试,测试套件可配置性差,四个工件之间缺乏关联。
如何改进RISC-V规范的可读性和可重用性?
建议使用易于阅读的机器可读格式(如JSON/YAML/XML)来捕获架构信息,并重构现有文档和工具。
SAIL模型在RISC-V规范中有什么作用?
SAIL模型是正式的架构规范,提供精确的可执行描述,但使用不广泛,缺乏注释。
RISC-V规范的测试套件存在哪些不足?
测试套件难以配置,无法检查所有允许的行为,限制了对不同配置的支持。
如何将SAIL规范与自然语言描述结合?
建议将SAIL规范的每一部分与同一特性的自然语言描述放在同一页上,以增强理解。
Spike模拟器如何与SAIL规范整合?
Spike模拟器应能从SAIL规范中生成对未来扩展的支持,这需要定义接口以访问Spike中的状态。