行业新闻 (News) 芯片封装主页/ 行业新闻 / 使用自定义指令集扩展扩展RISC-V ISA
< 返回列表

使用自定义指令集扩展扩展RISC-V ISA

介绍

RISC-V ISA(指令集架构)以模块化方式设计。 这意味着ISA有几组指令(ISA扩展),可以根据需要启用或禁用。 这允许精确地实现应用程序所需的指令组,而无需支付将不使用的区域或功率。 其中一个团体很特别; 它没有预定义的指令。 设计人员可以为他们想要加速的应用程序添加所需的任何指令。 这是一个强大的功能,因为它不会破坏任何软件兼容性,同时为发明和差异化留出空间。 本白皮书介绍了如何添加特定于应用程序的指令(自定义ISA扩展)以及如何在SDK中构建所有需要的工具,以及在HDL中实现自定义ISA扩展(例如Verilog)。

RISC-V指令集架构

RISC-V ISA被组织成指令组(ISA扩展)。 您可以根据需要混合搭配。 例如,您可能拥有一个实现最低限度的RISC-V处理器,或者一个实现所有ISA扩展的RISC-V处理器,具体取决于设计需求。

下表列出了RISC-V Foundation已批准的主要ISA扩展以及当前正在开发的ISA扩展。

ISA扩展批准笔记
I / E基本整数运算的说明。 这是唯一必须的扩展。 我需要32个寄存器,E只需要16个寄存器。
中号乘法和除法的说明
C紧凑型指令,只有16位编码。 此扩展对于需要低内存占用的应用程序非常重要。
F单精度浮点指令
d双精度浮点指令
一个原子记忆指令
没有位操作指令。 扩展包含用于位操作的指令,例如旋转或位设置/清除指令。
V没有可用于HPC的矢量指令。
P没有嵌入式DSP处理器所需的DSP和压缩SIMD指令。

随着更多ISA扩展的添加,将来会扩展上表。

尽管该列表已经很广泛,但是当没有适合设计需求的合适的现成ISA扩展时,可能会出现这种情况。 在这种情况下,RISC-V规范允许添加自定义ISA扩展。 这可能是公司的“秘密酱”和关键的差异化因素。 由于RISC-V生态系统的性质,自定义ISA扩展不会违反主要规范; 即使有其他说明,您的处理器仍然完全符合RISC-V标准,并且可以运行从生态系统中获取的通用软件堆栈。

下面的图1显示了自定义ISA扩展如何适合软件堆栈。 在最低级别,有一个符合RISC-V标准的处理器,带有自定义ISA扩展。 它运行操作系统,无论是裸机还是富操作系统。 它可以使用与标准RISC-V处理器兼容的任何编译器进行编译(没有特殊的ISA扩展)。 在操作系统之上,有三个应用程序。 App1是一个不需要任何加速的通用应用程序。 您可以使用公开的现成编译器(例如GCC)进行编译,甚至可以使用预编译的应用程序; RISC-V处理器将能够运行它。 App2和App3是需要尽可能快地运行的重要部分。 这些必须使用专门知道自定义ISA扩展的编译器进行编译。 编译器可以利用将加速App2和App3的新指令。 

显示了具有自定义ISA扩展的符合RISC-V标准的处理器的另一个示例。 App1不使用自定义ISA扩展。 App2和App3使用通用API。 API由知道自定义ISA扩展的库实现,该扩展又可以加速App2和App3。 App2和App3都可以在现成的RISC-V处理器中重复使用。 所需的只是一个实现所需API的库。 在此系统中,将带有自定义ISA扩展的RIS2-V的App2和App3移动到没有扩展的RISC-V非常简单,并且不需要任何应用程序移植。

在接下来的章节中,我们将更详细地介绍自定义ISA扩展以及Codasip如何帮助他们进行设计和验证。

自定义指令集扩展

自定义指令集架构或自定义ISA扩展并不是新的,并且已经存在了一段时间。 但是,它们通常需要付出很多努力。 首先,您需要确定说明。 然后,您需要将它们添加到C编译器,模拟器,调试器和其他工具中,并验证更改是否为所有这些不同的工具添加了相同的内容。 添加自定义指令通常也需要一些手动操作。 通常,您需要一个团队将新指令添加到SDK中,以便编程工具可以传递和编译指令。 您还需要向指令集模拟器添加新代码。 最后,必须扩展RTL,并且必须验证对RTL的任何更改。 根据手动工作量,ISA扩展在时间和资源方面可能相当昂贵。

为了降低ISA扩展的成本,我们需要尽可能自动化,从识别合适的指令到RTL验证。 这正是Codasip可以做得非常好的事情。 Codasip提供了一个名为Studio的EDA工具,使您可以自定义Codasip提供的现成处理器。 您可以使用完整的RISC-V兼容处理器开始工作,并根据需要添加自定义ISA扩展,或者您可以从头开始编写自己的RISC-V处理器。

自定义指令可以很简单,例如多重累加指令的变体,或者它们可以是自定义控制指令,例如零开销循环(硬件循环)。 您还可以使用一些特殊的加载/存储指令,包括后增量或预增量。 如您所见,自定义指令的复杂程度不同。 除其他外,这会影响C编译器的功能和生成的处理器的性能。 C编译器可以使用简单指令而无需更改原始C代码。 换句话说,您可以拥有一个应用程序,并且可以为x86或RISC-V编译它。 如果指令太复杂,使用它的唯一方法是内联汇编或C内在。 限制约为25次操作和~3次输出。 另一方面,更复杂的指令通常会提高性能,因此结果值得付出努力。

有一种简单的方法可以将内联汇编或内部函数集成到库中。 该库也具有通用实现。 这样一个库的好处是你可以有一个最终应用程序的实现,你可以为几个目标编译它。 每个目标可以使用不同的实现。 应用程序无需了解最终实现。

以下示例显示了此类库的代码段。 它代表一个简单的字节交换功能。 如果指定的宏存在,则C编译器具有执行交换的特殊指令。 否则,使用标准方法。

为第一部分生成的代码非常简单; 只需一条指令。

第二部分是在RV32IMC的十二条指令中完成的(见下文),X10保持字的值,它最后也保留了返回值。

因此,不仅增加了应用程序的性能; 代码大小也明显更小。 您可以有更多类似的指令,包括弹出计数,各种位操作指令,控制指令等。

下一节将介绍Studio如何处理自定义ISA扩展。

Codasip工作室

Studio是处理器设计的EDA工具。 它可以在SDK中生成所有需要的工具,以及在Verilog,SystemVerilog或VHDL以及基于UVM的验证环境中处理器的实现。 所有这些输出都是从CodAL中的处理器描述生成的。 CodAL是一种基于C语言的混合架构描述语言。 因此,CodAL不仅捕获ISA本身,还捕获处理器的资源和处理器微体系结构的其他细节。

每个处理器描述由两部分组成:处理器的功能模型和实现模型。 这两个模型共享公共部分,例如操作码或指令编码。 更重要的是,这些模型使Studio能够生成基于UVM的验证环境。

在ISA扩展方面,设计人员通常首先使用由Codasip提供的CodAL编写的完全符合RISC-V标准的处理器。 所有需要做的就是添加自定义ISA扩展。 请注意,我们也在内部使用Studio - 构建我们自己的RISC-V兼容处理器。

该过程从识别合适的指令开始。 有很多方法可以做到这一点。 Studio使用分析器。 设计人员使用现成的处理器运行关键应用程序,然后分析器提供可能感兴趣的特定指令序列,以及需要大量计算时间的函数列表。 此信息有助于设计人员添加新指令。

第一步是更改处理器的功能模型。 设计者需要定义指令的汇编和二进制形式。 然后,更重要的是,指令的语义。 语义也是用CodAL编写的。

在byteswap示例中,假设32位RISC-V,代码如下所示:

下一步是定义实现。 让我们假设直接实现并在一个时钟周期内完成整个指令。 这里唯一的任务是更新ALU。

获得CodAL描述后,Studio可以生成SDK,实现和基于UVM的验证环境中的所有工具。

SDK中最重要的工具之一是C编译器。 Codasip使用LLVM编译器,因此为LLVM生成新指令。 在这种情况下,我们可以看到LLVM识别byteswap的模式,并且在指令语义的中间表示中使用bswap函数。 生成的表示如下:

所有其他工具都知道新指令,因此汇编器和反汇编器,调试器和分析器也可以识别byteswap指令。

我们来看看HDL中的实现。 Studio支持三种主要的HDL语言。 它们是SystemVerilog,Verilog和VHDL。 生成的byteswap示例的Verilog代码如下:

如您所见,Studio根据CodAL代码生成所有必要的输出。 我们自动化了SDK生成和RTL。

最后一步是验证。 Studio包括功能视图和实现视图。 功能视图用于参考模型,实现视图用作DUT。 换句话说,针对参考模型检查生成的实现。 Studio生成基于UVM的环境,需要一些刺激。 Studio提供了大量预定义测试,还支持生成随机指令流,包括自定义指令。 设计师也可以添加自己的直接测试。 三个来源 - 预定义测试,生成测试和直接测试 - 确保完全覆盖,包括非典型角落情况。

结论

RISC-V ISA提供多种ISA组可供选择。 只有基本组(I / E)是必需的,其余的是可选的。 该概念允许设计人员精确选择他们想要或需要的东西。 如果这仍然不足以获得所需的结果,RISC-V规范允许在保持RISC-V兼容的同时添加额外的指令。 这是一个重要的优势,使您能够重用社区软件堆栈并仅加速关键部分。 添加自定义指令可以手动完成,但这是一个容易出错的任务,也需要大量资源。 Codasip以其EDA工具Studio为目标。 RISC-V处理器和任何添加的自定义指令都以高级架构描述语言CodAL描述。 Studio使用该描述生成SDK和处理器的实现。 高水平的自动化允许在几小时,几天或几周内添加新指令。

· 2019-06-07 09:45  本新闻来源自:design-reuse,版权归原创方所有

阅读:995
  • 联系长芯

    重庆总部:重庆市长寿区新市街道新富大道5号佳禾工业园8栋2层
    电话:023 40819981 (前台)

    深圳办事处:深圳市南山区留仙大道 1213 号众冠红花岭工业南区 2 区 1 栋 1 楼
    电话:0755-26975877 (前台)

    电子邮件:sales@longcore.com

    网址:http://www.longcore.com