中文 英语

RISC-V的高级合成

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

受欢迎程度

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

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

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

答案并不完全清楚。HLS可能并不适用于所有人RISC-V设计。“你是对标准的RISC-V实现感兴趣,还是追求专业化?公司ASIP工具高级总监格特•古森斯问道Synopsys对此.“如果你对标准的RISC-V实现感兴趣,那么我不确定HLS会给你带来多少好处,因为你可以在RTL中描述架构并在那里优化它。但是一旦你开始研究指令集扩展,情况就不一样了。接下来的问题是,哪些扩展最适合我的应用程序领域,架构探索变得非常关键。”

体系结构优化有不同的层次。“所有的HLS工具都能让你进行架构探索,”zdenk picikryl说Codasip.“通用HLS解决方案适用于数据路径和静态调度算法,如图像处理。如果你设计的是CPU,情况就不一样了。与RTL或传统HLS相比,我们可以进行更多的探索。在最近的一个例子中,我们从RISC-V基线开始,然后尝试不同的扩展组合。然后我们探索了自定义扩展并定义了一些新的指令。我们重新进行了测试,速度提高了50倍以上。”

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

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

不仅仅是硬件
处理器是硬件和软件之间的边界。它们相互影响。Synopsys公司的产品营销经理帕特里克•沃比斯特表示:“当我们着眼于RISC-V领域,即IP领域时,我们发现很多人都在关注硬件。“商业公司和大学正在提供不同的ip,通常将RTL实现置于公共领域。有很多解决方案,每个解决方案都着重于RTL实现。他们宣称其中一个更好,或者有更深的管道,或者更高的性能。但是他们又说,在编译方面,您需要依赖公共领域的工具。如果我想扩展RISC-V呢?这些工具是否支持我的硬件实现?人们过于关注IP实现的RTL方面。”

有几种方法可以设计自定义处理器。例如,它可能带有额外的指令,或者为特定的任务附加专用加速器。“HLS确实有助于模糊处理器内部和处理器外部的界限,比如专用加速器,”Cadence的Knoth说。“这使得这条线非常灵活——无论是特定于应用程序还是特定于技术。考虑到可移植性,如果你有一个处理器,目标是5nm节点,它将有非常不同的关注点,而不是22nm节点。能够拥有一个一致的SystemC模型是非常强大的,然后将某些部分分割为处理器,而不是将某些部分分割为基于硬件的加速器,以获得整个系统的优化实现。”

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

有多种类型的优化。“我从架构视图开始,在那里我定义了一个指令和架构资源列表,”pickikryl补充道。“我大概知道我想要的时间,但我并不关心负载/存储单元是使用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——它们都有一种描述指令的语言,”他说治之首席执行官西蒙·大卫曼。“它比RTL稍微抽象一点,他们的工具可以把它推向RTL。他们还使用LLVM构建了一个工具链。他们通常也会创建一个模拟器。关键问题之一是您必须能够直接在高级语言中进行模拟,因为您必须能够调试它。如果你必须把它转换成其他东西,那就不好了,因为那样它就变得太难了。工具链的另一个重要方面是,当您做一个小的更改时,您不希望更改下面的所有内容。工程变更指令(ECO)的概念很重要。”

这么多语言
上世纪八九十年代,定义新处理器风靡一时,但随着IP模式的流行,以及少数几家公司凭借高度优化的处理器核心成功统治了市场,这种做法就失宠了。现在,出现了某种形式的重生,一些公司采用了过去使用的语言,而另一些公司采用了行业内定义的语言或开发了新的定制语言。它们都被归类为架构描述语言(ADLs)。

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语言。“CodAL语言是基于c语言的,每个人都能理解,”pickikryl说。“你不需要SystemC或新的编程范式中的对象或其他东西,工程师更容易采用。SystemC是一个模拟框架,很难捕捉诸如编译器如何利用指令之类的东西。无论如何,你必须有另一层,所以它不会是纯粹的SystemC。最终,你会得到一种特定领域的语言。”

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

RISC-V社区也想要一种正式的方式来定义处理器。Imperas的大卫曼说:“他们采用了英国剑桥大学(Cambridge University)的SAIL。“设计的圣杯是正确的构造。你先描述一些东西,然后你可以验证它。然后将其映射到下一层并重新验证。Arm显然拥有从架构到文档的完全自动化。它们有一个从初始表示到文档,再到RTL,再到参考模型的流程,并且在整个过程中使用正式工具。我们的目标是要有一种抽象的语言,所有的东西都是从抽象的语言中派生出来的。”

Arm显然已经解决了这个问题,这也是它成功的一个因素。为了深入了解Arm的业务,这个博客提供一些见解。作者阿拉斯泰尔·里德(Alastair Reid)在Arm工作了近15年,现在是谷歌的研究科学家。

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

这依赖于被完全验证的高级描述。否则,您将面临垃圾输入-垃圾输出的情况。不幸的是,这样做的工具在今天还处于萌芽阶段。“如果你从RISC-V模型开始并进行扩展,你仍然希望确保基线架构与RISC-V规范完全兼容,”Goossens说。“所以我们运行RISC-V验证套件,以确保我们的实现真正符合RISC-V规范。”

法规遵循套件不验证微体系结构,距离完成还有很长的路要走。“当涉及到验证时,没有魔法按钮,”pickikryl说。“我们输出一个UVM环境和工具,如随机程序生成器,它可以识别设计中的每一条指令,包括自定义指令。作为一名验证工程师,你可以使用这些验证工具,或者在此基础上添加更多的工具或测试平台。您还可以使用生成的TLM SystemC模型进行系统探索,并创建虚拟原型。”

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

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

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

油气行业正试图创建有效的工具链,以满足快速变化的环境中的需求。这个谜题有很多部分,而且今天的行业是分散的,但是现有的工具在优化潜力和生产力方面都比用RTL编写处理器有显著的提升。

相关的
使用RISC-V
现在有什么,现在缺什么,接下来会发生什么。
RISC-V知识中心
关于RISC-V的头条新闻、视频、白皮书和博客。
RISC-V针对数据中心
随着生态系统的成熟,开源架构在更复杂的设计中获得了一些吸引力。
RISC-V验证挑战蔓延
持续的设计创新增加了验证的复杂性,并促使更多的公司实际进行验证。



2的评论

西蒙 说:

这是一篇非常有趣的文章,重点介绍了HLS和处理器合成的未来。在设计微架构时提高抽象级别的想法是有希望的,即使工具仍然需要改进。
为了自我宣传,我想强调另一个关于使用HLS合成RISC-V处理器的工作,发表在ICCAD ' 19: What You simulation Is What You synthesis: design a Processor Core from c++ Specifications。这里使用商业HLS工具合成核心,并使用C/ c++描述核心。
文章链接:https://hal.archives-ouvertes.fr/hal-02303453v1

奥利弗Sentieys 说:

请检查“第一个”用c++和HLS设计的RISC-V处理器的工作。
Comet处理器仍处于非常活跃的开发阶段。
https://gitlab.inria.fr/srokicki/Comet/
你所模拟的就是你所合成的:根据c++规范设计RISC-V核心
2019年IEEE/ACM计算机辅助设计国际会议
https://ieeexplore.ieee.org/abstract/document/8942177
谢谢

留下回复


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

Baidu