你确定你的RISC-V RTL没有任何惊喜吗?

RISC-V

考虑到RISC-V RTL设计的相对新颖性和复杂性,无论你是购买商业支持的核心,还是下载流行的开源产品,都有微小但非零的风险,让你的最终产品不被发现。按照概率由高到低的顺序,考虑:

  • 出现了一个奇怪但完全有可能的极端情况
  • “在”您或您的供应商为您的应用程序创建的自定义指令中的错误
  • 自定义指令的“边缘”错误——例如,指令正确执行,但不知为何会使机器处于损坏状态
  • 相关:未记录和/或未明确说明的新功能在不知不觉中打开了设计漏洞
  • 恶意木马逻辑通过供应链攻击偷偷插入

最近我发表了一篇长篇文章半导体工程您可以采取的所有缓解方法来降低这些风险,其中的重点是一个详尽的、基于形式的流程,以验证RISC-V ISA没有差距和不一致(以及任何特洛伊木马逻辑)。因此,这篇文章是“Cliff Notes版本”,让你决定是否应该阅读完整的文章带有详细的代码示例

通用缓解方法

  • 传入或正在开发的RTL代码的专家检查:显然,应该这样做。但就像他们在数学界说的那样——”是必要的,但不是充分的”。
  • 基于仿真的方法:指令集仿真(ISS)、DUT输出与成熟黄金模型的自动比较、用于DUT RTL仿真的约束随机UVM测试平台,甚至将真实世界的刺激导入到DUT的硬件辅助仿真中,这些都是有价值的,应该被采用。但它们都有一个相同的缺陷:由于它们依赖于非详尽的刺激产生,因此它们本质上是不完整的。(在供应链攻击中,木马逻辑开发人员故意创建了一个触发信号和数据的序列,即使是最有创意的白帽黑客也很可能无法发现。)

最重要的是,要完全确保RISC-V RTL不受任何自然或恶意意外的影响,唯一的方法是应用详尽的形式化方法来验证设计。

一个基于形式的三阶段过程

推荐的基于形式的流程如下:

步骤1 -创建一个正式的测试平台,为DUT规范“建模”

这种方法的基础是编写一组属性来表示RISC-V设计中每条指令的行为。任务是捕获给定指令对IP输出和内部架构状态的影响-在RISC-V世界中,这是程序计数器(PC)和寄存器文件(RF)),用于任何给定的任意长输入序列。这是用一个专门为IEEE SVA构建的扩展股东价值分析操作.简而言之,这是一个随基于形式的处理器验证工具一起发布的库;从验证工程师的角度来看,它看起来像是熟悉的SVA代码的直观子集。

步骤2 -定义针对DUT运行的输入约束和检查

为了补充每条指令的规范属性,下一步是定义输入约束和任何额外的输出检查。再次使用Operational SVA,用户现在指定一个“完整性计划”来定义DUT应该忽略的合法输入和非法信号。换句话说,在上面的步骤1中,您创建了一个有效的DUT周期精确模型,必须证明对所有时间和所有输入都是正确的;在这一步中,您将设置约束和任何需要注意的特殊行为。把这些加在一起,实际上您就有了一个正式的测试平台,可以运行了!

步骤3 -执行分析

所有形式化工具的目标都是穷尽地证明所有属性对于所有时间和所有输入都是正确的。在RISC-V处理器验证的情况下,该工具用于证明任何任意长的输入序列都可以匹配到指定Operational SVA的唯一序列,该序列预测输出和体系结构状态的值。通常,在团队使用过的RISC-V dut中,错误会出现在指令的RTL逻辑内部,或者在连接下一个合法分支/指令的“切换逻辑”中。

好消息是,当这些问题得到解决并且形式分析证明了所有的属性时,结果是真正的“完整”——也就是说,您可以在数学上确定没有RTL编码错误形式化分析已经证明了不存在任何错误和意外行为!

结果

为了测试这种方法,我的同事们使用流行的Rocket Chip开源内核做了一个案例研究。具体来说,我们检查了RV64IMAFDC - sv39虚拟机配置。这是一个64位处理器核心,带有39位虚拟内存系统[5]和扩展,例如压缩指令和原子指令。

虽然Rocket Chip的快照已经被广泛验证并多次删除,但该流程识别出了四个以前未知的、特殊情况的可疑行为,并将其报告给了Rocket Core RTL开发人员([2]、[3]、[4]和[5])。具体阐述[5]——在RTL中发现了一个非标准指令stop(操作码0x30500073):显然,Rocket Chip团队在文档方面落后了(他们在提交GitHub拉取请求时几乎立即修复了这个问题)。

更重要的一点是,这表明实现整个指令所需的逻辑(几十行代码和许多合成、放置和路由逻辑的门)逃脱了视觉检查、RTL模拟、门级模拟、整个后端实现过程和实验室中的硬件原型的检测。只有这种基于形式的方法才能发现这些问题!

总结

本文提出的完整的、基于形式的处理器验证方法使用了IEEE SVA的扩展,Operational SVA,以正式验证RISC-V ISA不存在缺口和不一致。与约束随机模拟测试、模拟或物理原型不同,完整的属性和约束集可以详尽地检测许多类型的RTL错误,以及未记录或未指定的代码和恶意木马。

如果您对这个流程感兴趣,请随时联系我进一步讨论。

乔·胡佩西三世
开云体育平台登录西门子EDA

参考链接

0 -开云体育平台登录基于西门子EDA正式的RISC-V解决方案

1 -《半导体工程:你确定你的RISC-V RTL不包含任何惊喜吗?》中的长篇文章(含代码示例)

2 -DIV指令结果未写入注册文件
https://github.com/freechipsproject/rocket-chip/issues/1752

3 -JAL和JALR指令存储不同的返回PC
https://github.com/freechipsproject/rocket-chip/issues/1757

4 -非法操作码重放并导致意外的副作用https://github.com/freechipsproject/rocket-chip/issues/1861

5 -RTL中发现非标准指令停止(操作码0x30500073):https://github.com/freechipsproject/rocket-chip/issues/1868

6 -验证视野博客,你怎么能说正式的验证是彻底的?,乔·胡佩西三世
https://blogs.sw.开云体育平台登录siemens.com/verificationhorizons/2021/09/16/how-can-you-say-that-formal-verification-is-exhaustive/

留下回复

本文最初发表于西门子数字工业软件博客https://blogs.sw.开云体育平台登录siemens.com/veri开云体育官方下载fic开云体育官网入口ationhorizons/2022/03/28/do-you-know-for-sure-your-risc-v-rtl-doesnt-contain-any-surprises/
Baidu
map