芯片设计者,是时候重视ESL了

2019-01-11 14:00:14 来源: 半导体行业观察

当我们谈体系结构的黄金时代,我们不仅需要设计更有效的架构,也必须思考更有效的设计方法学。当我们用五花八门的架构来提高运算效率的时候,也面临一个新的问题:怎么通过改进设计方法提高软硬件开发的效率?十几年前提出的系统级设计(ESL)的概念和方法学也许可以给我们一些灵感。

还是先看看挑战

这一轮体系结构的繁荣,一个基本的思路就是用专用架构(Domain-Spec Architecture,DSA)取代通用架构,从而提高针对特定领域的计算效率。特定领域的应用空间虽然有限,但并不意味着其设计难度和实现成本的降低。

再贴一下这个Domain-Spec computing的老图,主要给大家感受一下需要做哪些工作。虽然项目的规模不同,但很多任务是必须的。 我们提出一个DSA,首先要设计和实现一个 专用的硬件架构 。可能包括专用的指令集,微结构,访存机制,硬件接口等等。我们必须回答这些问题,“架构能否提供满足特定场景功能需求?“,” 系统能否达到性能和功耗目标,满足应用环境的限制?“,“需要什么程度的编程性?”,” 硬件实现(设计和验证)是否可行? “等等。 而当我们有了一个满意的架构,实现了它,甚至投片成功了,工作还远没完成。为了让这个专用架构运行起来,我们还必须提供 一套完整工具链 来支持相应的软件开发。比如,我们可能需要一个DSL(Domain-Specific Language)语言来描述应用和算法;需要一套编译工具链来支持软件开发和调试;可能还需要porting专门的OS,开发各种driver,runtime和library。这部分工作的难度和工作量往往大大超过硬件架构设计本身。 再进一步,如果我们的系统或者SoC是由多个不同的DSA构成的异构系统,复杂性和设计难度则进一步提升。对于DSA设计的挑战,大家也可以听听Kunle Olukotun教授的访谈[1]。

我们再回头看看系统级设计方法出现的历史背景。ESL (Electronic system-level) 这个词最早出现在2001年。在这个阶段,随着SoC(System-on-Chip)的出现,芯片设计的复杂度上了一个新台阶。这种复杂度既体现在芯片规模上,更体现在” 芯片本身就是一个软硬件结合的系统 “这一特征上。智能手机芯片,是当时最典型的SoC。而这种SoC也可以看作是多个DSA(比如基带处理器,多媒体处理,ISP,音频DSP,connectivity等等)组成的异构系统,其挑战实际上和今天是类似的。而ESL设计方法学的初衷就是为了解决这些挑战,所以它可以给我们很好的参考。


什么是系统级设计

在芯片设计领域有一定年头的读者可能了解ESL这个词。在Wiki上可以看到它的定义“ the utilization of appropriate abstractions in order to i ncrease comprehension about a system , and to enhance the probability of a successful implementation of functionality in a cost-effective manner . ” - “Electronic system-level design and verification”

ESL设计的目标是更好的描述一个系统,并能够以合理的成本成功的实现这个系统。而它的方法就是使用 合适的抽象层次 (abstraction)。这个说法本身就有点抽象,可能得多解释几句。ESL这个词是相对于RTL(register-transfer level)的。大家知道我们在做芯片设计的时候,一般都是用RTL代码来描述硬件的行为,然后再通过EDA工具把RTL代码转换为更低层次(门级,电路级等)的描述,最终产生可以用于芯片生产的GDSII描述。可以说在RTL级这个抽象层次,我们描述了硬件实现的必要细节。 当一个设计比较简单,或者没有太多软件开发工作的时候,RTL级设计方法就可以满足要求。这也是芯片设计方法发展过程中早期常见的情况。 但是,当我们需要做系统级的架构分析和软件开发(前面提到的主要挑战)的时候,用RTL级描述硬件就不合适了。

架构分析大部分时候关心的是相对较粗粒度的性能,在项目开发的流程上也早于在RTL设计;而软件开发则只需要编程模型,不需要硬件实现的细节。对于这些任务来说,RTL级描述的细节不仅是没有意义的,甚至还是有害的(包含过多细节的模型仿真速度慢,建模成本高)。简单来说,根据需求的差异,不同的设计任务需要不同抽象层次的模型来支持。因此,ESL最基本的想法就是通过在一个新的抽象层次(系统级)上描述硬件,实现快速的系统建模和仿真分析(由于放弃了不必要的细节,系统级模型的仿真速度往往RTL级仿真快几个数量级),从而提高系统软硬件设计的效率。 在ESL设计的思想提出之前,架构设计主要靠经验,很少通过建模仿真做定量的分析。而软件开发和调试则主要在硬件设计完成之后,基于FPGA或者样片来进行。

芯片设计中的抽象层次的问题我就不多说了,大家有兴趣可以自己去看看。下图是 Gajski-Kuhn Y-chart,就是从不同的层面介绍各种抽象层次,可以参考一下。

实际上,ESL设计方法学的内涵要比名字听上去丰富很多, 代表了在当时比传统芯片设计方法更为 先进的方法学 (或者一系列方法学)和 设计流程 。根据EETimes 2004年的文章[2],ESL设计试图解决的问题包括下面这几个方面:

1. System-level design:把芯片设计和系统设计结合起来,以系统需求驱动芯片设计。

2. HW/SW co-design:把软硬件开发结合起来。

3. Architecture exploration:实现定量的架构探索和分析。

4. Virtual prototyping:实现虚拟原型,在没有实际硬件的时候就可以进行软件开发。

5. Co-simulation/co-verification:联合的仿真和验证技术。

这里我再补充一个,6. HLS(High-level synthesis),使用这个方法,我们甚至不需要RTL设计来描述硬件,直接用描述算法的高级语言(C/C++)来描述硬件,工具就可以自动生成硬件设计。同时,这些目标如果达成,也意味着芯片设计流程会更简单,门槛会降低。我们可以直接从应用和算法开始,软件工程师用高级语言描述系统,然后把下面的工作都交给工具完成就可以了。

从这里可以看到,当年ESL设计给我们描述的理想是非常美妙的,如果真能实现的话,我们今天说的硬件敏捷开发也不是难事了。但在现实当中,ESL设计并没有如 预期一样根本的改变芯片设计的流程,降低芯片设计的门槛。ESL的一些方法和概念只是在芯片大厂或者少数领域里得到了成功的实践。


ESL设计方法学的现实困难

第一, ESL虽然理念很好,但抽象层次的转换缺乏完善的工具支持 。RTL设计方法的成功,很大程度上是因为有成熟的逻辑综合工具的支持。以硬件描述语言而非电路来进行建模,再由工具自动生成电路,极大的提高的芯片设计的生产率。ESL设计方法学本来也希望能够带来一次革命,但本来应该起到巨大作用的HLS并不成功。 经过多年的尝试,HLS最终没有实现从高级语言C/C++到硬件的承诺,只能在很小范围里实现。 因此,在系统级和RTL级之间出现的断层,很难打通一个完整的自动设计流程。

第二, 无法回避的建模成本 。ESL的核心围绕合适的抽象层次和模型。因此在实现各种功能之前,需要大量的建模工作。由于上述第一个问题,系统级建模并不能取代RTL级建模。因此,对于一个芯片设计来说,RTL设计和建模是“刚需”,而再额外设计系统级的模型似乎就有点“奢侈”了。能下决心开始系统级建模并且实践系统级设计方法的,往往也只有设计复杂芯片和软硬件系统且有足够资源的大厂 。

所以,一个方法学是否能成功,本质上还是看 实现这个方法学带来的收益能否大于实现它的代价 。相较ESL设计方法,IP重用的设计方法也是为了提升设计的生产率,简单易行,更为成功,也促成了以ARM为代表的整个IP产业的兴旺。再比如,前面说的 Architecture Exploration架构探索,如果通过定量的建模和仿真可以提高10%的性能,但你需要付出的时间和资源比这个收益还高,你肯定是没有动力实践这个方法的。


ESL设计方法学能否获得“新生”?

最后回到文章题目讨论的问题。简单来说,我认为随着体系结构黄金期的到来,系统级设计的方法会有更多的机会。

第一, 定量化的架构探索 越来越重要 。虽然专用架构一般只面向少数应用,比通用架构简单,但并不意味着专用架构在架构探索上的需求就更少。专用架构的架构探索要回答的问题是这个架构是否符合特定场景的要求和限制,这往往需要更为细致的结合软件的定量分析,否则失败的代价也很大。另一方面,专用架构的硬件设计门槛往往不高,竞争更多的在细节,也要求更精准的架构设计。

第二, 基于虚拟原型的软件开发 会成为常态 。以目前的AI芯片为例,我们看到的趋势是“面向软件”的硬件设计。软件开发在整个系统里的比重会越来越高,也意味着加速软件开发的工具有更好的机会。 Virtual Prototyping可以实现软件和硬件同步开发,还可以 作为可执行的设计规范(executable spec)。 系统厂商可以通过虚拟原型给芯片厂提出需求,芯片厂则可以在芯片开发前通过提供芯片的虚拟原型给更多的系统厂商进行评估或软件开发。 而且在这个层次的建模成本也比较低。一方面有很多现成的模型(比如ARM的处理器模型,NVDLA的模型等);另一方面,建新的模型也比较简单。 所以, Virtual Prototyping实际上也是ESL方法学中发展最好的一个领域。

第三, 在特定领域中,高层次综合的可行性增大 。如前所述,在一个专用领域设计DSA中,HLS不需要实现从通用的C语言自动生成硬件,而是实现从领域专用语言DSL自动生成硬件的功能。由于DSL往往功能比较单一,HLS实现的难度要低很多。 比如在AI加速方面,由于核心电路以数据通道为主,控制逻辑简单,HLS倒是有不错的表现。

第四, 硬件的敏捷开发的需求 。我们最近也经常看到硬件的敏捷开发这个提法。或者说是既要定制,又要快速迭代。这又个是一个很大的话题,我就不详细讨论了。但考虑到ESL方法学最重要目的就是为了提高开发效率,因此它的很多思想也是适合硬件敏捷开发的需求的。

第五, ESL方法和工具并没有停止演进 。虽然ESL的提法不想最初那么火,但其设计方法和工具,其实还是在以不同的形式(或者不同的提法)进行的演进。前面提到的设计和建模成本的问题都有所改善。


总得来说,不管ESL设计这个词是不是会重新火起来,它的很多理念还是有高的现实意义的。而且,随着这一轮体系结构创新的热潮,相信对于设计方法学的讨论也会更加热烈。我自己也算是这套方法学的实践者,如果大家希望对这个话题进行更深入的讨论,也欢迎留言。


参考:

[1] Kunle Olukotun, "Designing Computer Systems for Software with Kunle Olukotun", https://twimlai.com/twiml-talk-211-designing-computer-systems-for-software-with-kunle-olukotun/"

[2] EETimes, "A look inside electronic system level (ESL) design", https://www.eetimes.com/document.asp?doc_id=1276969

责任编辑:Sophie

相关文章

半导体行业观察
摩尔芯闻

热门评论