中文 英语

RISC-V的高级合成

抽象是定制处理器设计和验证的关键,但定义正确的语言和工具流是一项正在进行的工作。

人气

高质量的RISC-V实现越来越多,但是正是架构的可扩展性驱动了大量的设计活动。挑战在于设计和实现定制处理器,而不必每次在寄存器传输级别(RTL)重新实现它们。

有两种类型的高级合成(HLS),需要考虑。第一个是通用HLS,它接受一个描述C,C++,或SystemC把它变成RTL.这些工具使您能够探索设计空间,以创建最优的架构,这对于面向数据流的算法非常有效。事实上,随着时间的推移,这些工具在处理面向控制的构造方面变得更好了。但是它们可以用来实现处理器吗?还有更好的办法吗?

另一种类型的HLS是专用于处理器的工具。可扩展处理器并不新鲜。Tensilica (Cadence)和ARC (Synopsys)已经为用户提供定制处理器服务几十年了,而Arm最近也开始涉足这一领域。这些工具从专门为处理器设计的体系结构描述语言开始。现在的问题是这两种合成技术能否结合在一起。

答案并不完全清楚。HLS可能不适用于所有人RISC-V设计。“您是对标准RISC-V实现感兴趣,还是打算进行专业化?”ASIP工具的高级主管Gert Goossens问道新思科技.“如果你对标准RISC-V实现感兴趣,那么我不确定HLS会给你带来多少好处,因为你可以在RTL中描述架构,并在那里进行优化。但一旦你开始研究指令集扩展,情况就不一样了。接下来的问题是,哪种扩展最适合我的应用领域,架构探索变得非常关键。”

建筑优化有不同的层次。“所有的HLS工具都能让你进行架构探索,”公司的CTO Zdeněk Přikryl说Codasip. “通用HLS解决方案适用于数据路径和静态调度算法,如图像处理。如果您正在设计CPU,则情况有所不同。我们可以进行比RTL或传统HLS更多的探索。在最近的一个示例中,我们从RISC-V基线开始,然后使用不同的组合进行播放然后我们探索了自定义扩展并定义了一些新指令。重新运行测试,速度提高了50倍以上。”

“这是两种技术的融合,有可能真正改变我们的行业,”罗博•诺斯(Rob Knoth)表示抑扬顿挫.“处理器设计不仅仅是最大化你的GHz。你说的是针对低水平区域的处理器。有些可以用于低功耗,有些可以用于遗留节点。处理器不是香草。处理器有31种口味,特别是当您开始考虑RISC-V时,它是开放的和可定制的。特定应用程序的处理器需要可预测的工具,它们需要与物理世界紧密耦合。”

评估扩展是涉及软件的不同层次的体系结构优化。“您需要为特定的目标应用程序找出‘正确’的自定义指令,以便实现特定的目标,无论是内存、电源、性能还是面积,”西门子的产品经理Sven Beyer说单自旋西门子公司。要做到这一点,需要高级模型,比如带有定制指令的虚拟原型,运行软件来评估内存使用或性能。一旦确定了自定义扩展候选项,就需要在RTL中实现它们,以便对关键性能指标(KPI)进行最终评估。当手动编写RTL时,这个任务是非常乏味的,即使只是添加到现有的RTL核心,并手动编写独立的原型。保持模型同步是一项挑战。”

不仅仅是硬件
处理器是硬件和软件之间的边界。它们相互影响。Synopsys的产品营销经理Patrick Verbist表示:“当我们着眼于RISC-V领域和IP领域时,我们发现很多人都在关注硬件。商业公司和大学提供不同的ip,通常将RTL的实现放在公共领域。有一大堆解决方案,每一个都着重于它们的RTL实现。他们宣称某一个更好,或者有更深的管道,或者性能更好。但是他们又说,对于编译方面,你需要依赖公共领域的工具。如果我想扩展RISC-V怎么办?这些工具支持我的硬件实现吗?我们对IP实现的RTL方面的关注太多了。”

有几种设计定制处理器的方法。例如,可以使用附加指令,或者为特定任务附加专用加速器。“HLS确实模糊了处理器内部和外部的界限,比如专用加速器,”Cadence的Knoth说。“它让这条线非常灵活——既针对应用,也针对技术。看看可移植性,如果你有一个针对5nm节点的处理器,它将会有非常不同的关注与一些针对22nm节点的处理器。我们能够拥有一个一致的SystemC模型,然后为处理器分割某些部分,而不是为基于硬件的加速器分割某些部分,从而为整个系统获得优化的实现,这是非常强大的。”

关键是能够优化整个系统,这需要对硬件和软件进行分析。Codasip公司的Přikryl说:“高级架构描述语言,如CodAL,使我们能够用指令集捕获架构,以及处理器的微架构。”在类似于C语言的单一描述中,我们能够生成基于llvm的编译器、汇编器、反汇编器、模拟器,以及RTL、UVM验证环境和其他输出。

有多种类型的优化。“我从架构视图开始,在那里我定义了一个指令和架构资源列表,”Přikryl补充道。“我大致知道我想要的时间,但我并不在乎加载/存储单元是否使用AHB或AXI,也不在乎如何处理等待状态。这些都是稍后才会出现的低级细节。一旦我对架构感到满意,我就可以开始添加微架构信息,低级细节。有很多共同点在所有处理器中。你需要从内存中获取指令,你有危险处理、解码器、加载/存储单元——它们必须在那里。数据路径可能很简单,只处理整数或浮点,也可能是SIMD或可伸缩向量。”

图1:来自CodAL的工具流程。来源:Codasip

图1:来自CodAL的工具流程。来源:Codasip

添加微体系结构会导致其他类型的优化。“我们定义了两种类型的优化,”Synopsys的Goossens说。“第一个是循环中的编译器,第二个是循环中的合成。循环中的编译器意味着,当您探索指令扩展的不同选择时,您将为架构的每个实例使用自动生成的编译器。对于每个试用,您生成编译器,然后编译基准代码。该代码在模拟器中运行,您可以分析生成的内容并查看体系结构中的瓶颈所在。然后返回处理器模型(在我们的例子中是nML语言),然后进行更改。”

图2:ASIP Designer的工具流程。来源:Synopsys对此

图2:ASIP Designer的工具流程。来源:Synopsys对此

Goossens说:“第二点是循环中的合成。“从相同的处理器模型中,我们生成一个RTL实现并进行逻辑合成。这将合成生成的Verilog代码。你可以看到设计中的关键路径和你可以实现的时钟频率。然后就可以决定处理器的微架构细节了。您可以调整管道阶段的数量。也许它需要增加,因为有一个关键块,就像乘数,它必须成为流水线。你回到nML模型,那里有描述管道的构造。”

当同时使用处理器扩展和专用加速器时,分区阶段是必要的。OneSpin的Beyer说:“微架构参数集和自定义扩展可以通过运行HLS模型来了解总体kpi,从而为目标应用程序进行优化。”HLS工具可以用来生成RTL,支持核心内部的简单扩展和更高级的松散耦合加速器。因此,使用HLS工具及其对自定义扩展的支持来获得精确的RTL模型的开销非常低。然后您可以在生成的RTL上度量kpi,以最终确定扩展和参数的选择。”

商业工具有很多相似之处。“你看看ARC、Tensilica、Codasip和Andes——它们都有一种描述指令的语言,”他说治之首席执行官西蒙Davidmann。“它比RTL更抽象,他们的工具可以将其推入RTL。他们还用LLVM构建了一个工具链。他们通常也会构建一个模拟器。其中一个关键问题是,您必须能够直接在高级语言中进行模拟,因为您必须能够调试它。如果你必须把它翻译成别的东西,那就不好了,因为它会变得太困难。工具链的另一个重要方面是,当你做一个小的改变时,你不希望下面的一切都改变。工程变更指令(ECO)的概念非常重要。”

这么多语言
在80年代和90年代,定义新处理器风靡一时,但当IP模式变得流行,一些公司凭借高度优化的处理器核心成功主宰市场时,它就不再受欢迎了。现在,这是一种重生,一些公司采用了过去使用的语言,而另一些公司采用了行业内定义的语言或开发了新的定制语言。它们都被分类为架构描述语言,或adl。

当RISC-V最初被设计时,它使用了一种叫做Chisel的新语言。它是一种基于Scala的硬件构造语言,虽然它的抽象级别略高于RTL,但它并不被认为是一种高级合成语言。SiFive使用这种语言来定义它的处理器。

纽约哥伦比亚大学的一个研究小组采用了SystemC和发表论文关于2020年。论文介绍了“HL5是第一个使用SystemC设计并使用商用HLS工具优化的32位RISC-V微处理器。我们通过在实验基础设施上执行软件程序来评估HL5,该基础设施将FPGA仿真与商用32nm CMOS技术的标准RTL合成流相结合。”

那么,SystemC是最佳选择吗?“与RTL相比,SystemC在接近更高层次的概念方面有一些显著的优势,”Knoth说。“你需要和做算法设计的人保持密切关系,这样他们就有自由和灵活性来试验和探索自己的想法。这是最好的语言。在SystemC中有大量的投资,人们使用它来进行架构探索和验证。此外,当通过验证来加强生态系统,并将其更紧密地连接到实施方面时,它将成为比纯RTL设计更好的价值主张。”

许多硬件/软件工具都倾向于C语言。Přikryl说:“CodAL语言是基于C语言的,每个人都能理解。”。“你没有在SystemC或新的编程模式中可以找到的对象或其他东西,工程师更容易采用。SystemC是一个模拟框架,很难捕捉到编译器如何利用指令等内容。无论如何,你必须有另一层,所以它不是纯SystemC。最终,您将获得一种特定于域的语言。”

有许多用于处理器规范的遗留语言。Goossens说,nML是一种用于描述处理器架构和指令集(ISA)的高级定义语言。与硬件描述语言(如SystemC或Chisel)相比,nML的优势在于,所有的软件工具都可以在RTL实现的旁边生成,并且可以保持软件和硬件彼此一致。所以nML是硬件和软件实现的黄金参考。”

RISC-V社区还需要一种正式的方式来定义处理器。“他们采用了来自英国剑桥大学的SAIL,”Imperas ' Davidmann说。“设计中的圣杯是通过构造来实现的。你先描述一些东西,然后你可以验证它。然后将其映射到下一层并重新验证。很明显,从架构到文档,Arm都实现了完全的自动化。它们有一个从初始表示到文档、到RTL、再到参考模型的流程,并且在此过程中使用正式的工具。我们的目标是创造一种抽象的语言,让所有的东西都能从中延伸出来。”

Arm显然已经解决了这个问题,这是它成功的一个因素。为了深入了解Arm的功能,这个博客提供了一些见解。作者是阿拉斯泰尔·里德,他在Arm工作了近15年,现在是谷歌的科研人员。

验证
随着系统变得越来越复杂,验证任务往往比设计任务增长得更快。这意味着所有可行的解决办法都必须认真对待核查任务。“由于RTL是从HLS模型生成的,所以两者在构造上是同步的,”拜尔说。“HLS模型还应用于验证生成的RTL。这基本上与通过运行等价性检查在普通合成工具上执行的步骤相同。自定义扩展的HLS描述还可用于启用编译器支持、指令集模拟器以及自定义RTL的软件工具链的其他元素。”xtensions。”

这取决于高级描述是否得到充分验证。否则,您将面临垃圾输入-垃圾输出的情况。不幸的是,如今实现这一目标的工具还处于初级阶段。“如果您从RISC-V模型开始并进行扩展,您仍然希望确保基线架构与RISC-V规范完全兼容,”Goossens说。“因此,我们运行RISC-V验证套件,以确保我们的实现真正符合RISC-V规范。”

法规遵循套件并不验证微架构,距离完成还有很长的路要走。Přikryl表示:“在验证过程中,没有什么神奇的按钮。”“我们输出一个UVM环境和工具,如随机程序生成器,它知道设计中的每一条指令,包括自定义指令。作为验证工程师,您可以使用这些验证工具,或者在其上添加更多的工具或测试工作台。您还可以使用生成的TLM SystemC模型进行系统探索,并创建虚拟原型。”

这将成为更大的“循环中”验证的一部分。Goossens说:“我们通常建议您嵌入我们在SystemC中生成的处理器模型,并使用虚拟原型工具。”“这使你能够考虑与内存层次结构、内存子系统的交互,并测量性能。”

自定义说明意味着您必须自己进行一些验证。Goossens说:“我们提供了带有c级测试程序的基本回归套件,您可以在处理器架构上编译这些程序,并且您可以模拟生成的代码。”你也可以在主机上本地执行这些程序并进行比较。这是在位的层面,看看是否一切都是一致的。但是当您添加自定义指令时,您需要使用特定的额外测试程序来扩展这个测试套件。”

结论
处理器设计已成为少数公司的核心竞争力,但提高处理器核心的性能变得越来越困难。为了取得重大进展,需要多核异构计算解决方案。RISC-V重新唤起了创造它们的欲望。

行业正在努力创建有效的工具链,以满足快速发展的环境中的需求。这个谜题有多个部分,而且现在的行业是支离破碎的,但现有的工具在优化潜力和生产率方面都大大超过了用RTL编写处理器。

相关的
使用RISC-V
什么是可用的,什么是缺失的,什么是下一个。
RISC-V知识中心
RISC-V的顶级故事、视频、白皮书和博客。
RISC-V针对数据中心
随着生态系统的成熟,开源体系结构在更复杂的设计中获得了一些吸引力。
RISC-V验证挑战蔓延
持续的设计创新增加了验证的复杂性,并推动更多的公司实际去做。



留话


(注意:此名称将公开显示)

Baidu