基于RISC-V的SweRV核心到底是什么?能扛起RISC-V的大旗吗?
发布时间:2019-05-22
分享到:
基于RISC-V的SweRV核心到底是什么?能扛起RISC-V的大旗吗?
发布时间:2019-05-22
分享到:

本文介绍基于RISC-V的SweRV内核,该内核基于经典的五级RISC-V流水线,每个时钟周期最多允许两条指令。

自RISC-V指令集架构(2015)和RISC-V基金会建立(2016)以来,我们看到了一系列活动:许多开源硬件项目,许多企业采用架构,快速增长的RISC-V成员和快速增长的开源RISC-V软件活动。

所有这些项目的“核心”是RISC-V CPU(中央处理单元)核心 - 执行RISC-V编译器二进制文件的硬件引擎。所有社区利益相关者都可以从开源软件中受益,包括可以在这些核心上执行的通用编译器,工具链和操作系统。

开发的一些RISC-V内核是专有的(或可用于IP许可),但在开源域中可用的更多。开源RISC-V内核的可用性支持大量完全开源的硬件项目,包括教育目的和前所未有的硬件级协作和创新,否则将无法实现。

开源RISC-V核心

开源RISC-V核心是什么意思?“开放”在ASIC的IP核环境中意味着什么?

ASIC代表专用集成电路。它是一种具有特定用途的“芯片”,例如冰箱,微波炉或硬盘驱动器中的微控制器。IP核指的是知识产权核心并且表示通常是可用于许可的黑盒子的电路,但是该IP的接口是已知的并且被描述。

过去,CPU核心通常要么用于许可,要么用于开源。如果用于开源,那些开源的应用程序基本来自各种大学和研究机构,从未有过标准化的指令集。这意味着编译器和其他软件工具要么不可用,要么质量低,因为从来没有共享软件项目。

RISC-V的标准化不仅可以共享软件工具链,还可以实现内核的共享,并改进可用的开源设计。核心通常使用硬件描述语言(如Verilog,System Verilog或VHDL)设计,或者从高级综合语言(如Chisel)合成。在任何情况下,这个代码都可以作为开源获得,通常在BSD或Apache v2许可下。

SweRV核心

SweRV™内核填补了开源RISC-V内核的重要空白(参见下图)。对于嵌入式应用程序,单线程代码执行非常重要,因为有许多传统固件实现作为单个线程实现,在某些情况下,RTOS和多线程可能不实用,或者太昂贵。在这些情况下,可以以尽可能高的性能运行单个线程的核心变得非常重要。

开源RISC-V内核。请注意,此图表并非详尽无遗,并且未显示许多开源核心

那么,SweRV核心有何不同?它每个时钟周期发出最多两条指令,一条带有四个执行单元的九级流水线,一个加载/存储单元,一个双周期乘法器和一个34周期外循环分频器单元。

下图显示了经典的五级RISC流水线(下图左所示)和SweRV核心(下图右所示)的架构方框图。

经典5级RISC-V流水线和SweRV核心的方框图比较

大多数开源RISC-V设计都是作为单一流水线实现的(具有两个到六个之间的多个阶段)。单一流水线意味着在每个时钟周期中处理一条指令。原则上,每个指令都需要从存储器中取出(取指令),解码以确定它是否是算术指令,例如用于加法的ADD,或用于从存储器加载寄存器的LD,然后它需要被执行。

执行时,可以访问存储器以保存结果或加载寄存器(存储器访问),最后,必须将结果写回寄存器(Writeback)。这种五阶段设计是高效的,并且已经成为一些商业处理器的基础,例如早期的MIPS,SPARC和摩托罗拉88000设计。它现在仍然非常重要,许多针对机器学习工作负载的多核系统正在使用这种设计(增加了宽矢量算术逻辑单元)。如果您的工作负载可以是多线程的,那么这种类型的核心可以在功耗,面积和性能之间提供良好的平衡。但是,如果您想运行旧版固件应用程序,并且只是想更快地运行它,会发生什么?单个程序无法在两个核心上运行 - 只有一个核心。因此,解决方案是尝试更快地运行此核心。

加速流水线运行

关于如何加速流水线的方法有两种。

首先,在流水线中引入更多阶段可以在每个阶段的持续时间之间实现更好的平衡。这允许每个阶段的时间增量更小,这意味着设计可以在更高的频率上运行。强大的英特尔或IBM处理器中的高端CPU核心可能有很多阶段,有时在20到30之间。上图右的快速检查表明我们有两个Fetch阶段,两个Align / Decode阶段和4个执行阶段。

其次,SweRV设计是超标量 - 我们已经实现了两个流水线,I0和I1,每个时钟周期最多可以执行两条指令。我们不仅可以更快地运行(由于大量的阶段),而且我们还可以(取决于工作负载)在每个时钟周期中执行2条指令。最后,每个流水线都有EX1和EX4阶段的算术逻辑单元,初看起来似乎很不寻常。

经典流水线(上图左)遇到了一个称为“负载到使用延迟”的问题。也就是说,如果需要从内存中加载寄存器值(让我们想一下指令ld x11,8(x10),对于所有RISC-V组件极客),延迟可能很长,具体取决于内存层次结构。流水线可能会长时间停滞。在SweRV的情况下,我们在阶段EX4获得第二次机会 - 因此,只要内存延迟少于3个时钟周期,流水线就可以继续运行!对于每个流水线具有双执行单元,此功能确实很小。最后,加载/存储操作在流水线I0中实现,并且可以与流水线I1同时执行,这与传统流水线不同。

那么 - 净结果是什么?我们在设计的周期精确模拟和FPGA实现方面测量了Coremark基准性能。结果下图所示。

Coremark性能基准测试,每个执行线程重新规范化。

我们可以看到SweRV提供了大约4.9个Coremark / MHz分数(每个频率和每个线程的分数都被重新规范化 - 这就解释了为什么它与英特尔至强核心非常接近,这是一个非常高性能的核心)。这是一个非常好的结果 - 值得骄傲的东西 - 以及对开源RISC-V社区非常有用的东西。SweRV不是结束 - 它只是我们将10亿个RISC-V核心带入市场的开始。

加入微信技术交流群

技术交流,职业进阶

关注电路设计技能公众号

了解最新技术方案

加入电路城 QQ 交流群

与技术大牛交朋友

讨论