下冰雹 · 2020年04月25日

RISC-V 自定义指令如何保持软件的兼容性?

RISC-V ISA(指令集架构)是以模块化方式设计的。这意味着ISA有几组指令(ISA扩展),可以根据需要启用或禁用。这允许精确地实现应用程序所需的指令组,而无需为没有使用到的区域提供额外的功耗。其中有一点相当重要,设计人员可以为他们想要加速的应用程序添加所需的任何指令。这是一个强大的功能,因为它不会破坏任何软件兼容性,同时为新的发明和差异化留出空间。

RISC-V指令集架构被设计为在基本指令集的基础上扩展出更多的指令。你可以随意混合搭配。例如,可能有一个实现最小值的RISC-V处理器,或者一个实现所有ISA扩展的RISC-V处理器,这取决于设计需求。下表列出了已被RISC-V基金会批准的主要ISA扩展,以及目前正在开发的ISA扩展。

2.jpg

随着更多ISA扩展的添加,上表的内容将会逐步被扩展到更多。但是如果这些基本扩展依然不能满足客户需求时,就需要采用RISC-V规范允许添加自定义指令扩展。这可能是公司的“秘密武器”和一个关键的区别。
大家一定会有疑问,为什么采用了自定义指令依然可以保持软件的兼容性?

由于RISC-V生态系统的特性,定制ISA扩展需要不会破坏与主要规范的一致性;即使有额外的指令,您的处理器仍然完全符合RISC-V,并且可以运行来自生态系统的通用软件堆栈。这就需要通过软件架构来协同实现。

图1显示了自定义ISA扩展如何适合于软件堆栈。

3.jpg

在最底层上,有一个与RISC-V兼容的处理器和一个定制的ISA扩展。中间一层它运行一个操作系统,它可以用任何与标准RISC-V处理器兼容的编译器编译(没有特殊的ISA扩展)。除了操作系统之外,还有三个应用程序。App1是一个不需要任何加速的通用应用程序。您可以使用公开可用的现成编译器(例如GCC)来编译它,甚至可以使用预编译的应用程序;RISC-V处理器将能够直接运行它。App2和App3是需要尽可能快地运行的重要应用程序。这些必须由专门配置了定制ISA扩展的编译器来编译。编译器可以利用新的自定义指令来加速App2和App3

图2显示了另一个具有定制ISA扩展的RISC-V兼容处理器示例。App1使用基本指令集,没有使用定制的ISA扩展。App2和App3使用通用API。这个API是由一个支持定制ISA扩展的库来实现的,它同样可以加速App2和App3。App2和App3都可以在现成的RISC-V处理器中重用。所需要的只是实现所需API的库。在这个系统中,将带有自定义ISA扩展的App2和App3从RISC-V迁移到没有扩展的RISC-V是很容易的,并且不需要做任何应用程序移植的工作。
4.jpg

转自eetop

推荐阅读
关注数
19637
内容数
1303
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息