本文由半导体产业纵横(ID:ICVIEWS)编译自semi engineering
这种方法长期以来一直很有希望,但从未能兑现。是存在根本性问题,还是仅仅是运气不佳?
在功耗成为设计核心约束的当下,人们对于异步逻辑是否能发挥实质性作用仍存疑虑。尽管这种设计风格具备诸多显著优势,但其实际应用仍缺乏充分的实验验证。
同步设计依赖于时钟信号,时钟频率往往受限于设计中最长、最慢的路径,还需考虑制造过程中可能出现的变量。在测试阶段,常见的做法是根据性能将芯片划分成不同等级;否则,任何工作频率未达标的芯片都将被视为次品。
时钟偏移现象进一步加剧了这一复杂性。尽管时钟信号源于一个点,但在穿越芯片的过程中会遇到不同程度的延迟。这种时钟偏移指的是时钟信号相对于其预定到达时间的偏差,它同样受到制造工艺的深刻影响。
为缓解这些问题,常采用多个时钟或其他复杂的设计方法。尽管这些方法有助于创建异步耦合域,但也引发了一类新的问题——时钟域交叉。
此外,时钟是功率消耗的主要来源之一。由于时钟信号需遍布芯片各处,时钟线上积累了大量电容。每个时钟边缘的跃变都意味着电容的充放电过程,这不仅降低了速度,还导致了大量功率的消耗。为减轻每个缓冲器上的电容负载,常添加额外缓冲器,但这又增加了功率消耗。
随着芯片越来越接近工艺极限,单一同步时钟操作已变得不切实际。Arteris公司退休的高级工程师Michael Frank指出:“若无法在一个时钟周期内完成整个芯片的穿越,必须将设计视为局部同步但长距离运行异步的混合模式。这需要通过同步器来实现,或可借鉴早期CPU时代的策略——构建低时钟偏移的时钟网格。问题在于时钟消耗大量功率,且需要庞大的重新缓冲树来支持大量的触发器。”
同步设计之所以吸引人,在于一旦确定了最长路径,时间因素就变得相对次要,因为所有操作都被分解成一系列离散步骤。这对于诸如综合等设计工具而言至关重要。
Synopsys公司的高级工程师Rob Aitken表示:“异步设计常被视为一种充满承诺但难以实现的技术。除了少数特定情况外,它真的很难被广泛应用。虽然这是一个过于笼统的说法,但如果你拿到一段针对同步设计优化的RTL代码,并尝试用异步设计实现相同功能,首先得调整RTL以适应异步环境。随后进行异步实现,并评估这种调整是否带来了实际益处。长远来看,世界终将找到从异步设计中获益的方法,但目前,完全同步的设计仍占主导地位,因为所有工具和技术都是围绕它优化的。”
在出现革命性变化之前,工具的支持至关重要。波特兰州立大学异步研究中心主任Marly Roncken指出:“异步设计面临典型的‘鸡生蛋、蛋生鸡’问题——没有合适的工具就不会有用户,没有用户就不会推动工具的发展。这导致大公司在这一领域裹足不前,使异步设计成为初创公司和研究中心的专属领域。虽然同步设计中也包含异步逻辑的元素,但同步设计师可能并不特别关注这一点。我期望在工具领域看到无缝整合,让同步和异步设计能够互补优势,共同发挥最大效用。”
那么,是否会有某个决定性时刻,使异步设计成为不可或缺的选择呢?耶鲁大学电气工程与计算机科学教授Rajit Manohar认为:“若给定一组包括功耗和能量在内的设计目标,使用异步方法可能比同步方法更快地达成这些目标。尤其是当目标极具挑战性时,这一点更为显著。只要有足够的时间和资源,工程师可以优化任何设计。虽然我不能断言某个特定性能点永远无法达成,但只要有合适的工具、支持和能力,工程师便能发挥创造力,优化他们的设计。”
历史尝试
回到上世纪80年代和90年代,众多顶尖的系统公司曾积极探寻异步设计的潜力。然而,受限于当时仅适用于同步逻辑的设计工具,这些公司尝试了多种技术,但最终均未采纳异步设计实践。
在上世纪80年代,大部分设计工作仍需手工完成。耶鲁大学的Manohar教授指出:“优质的工具让我们能够设计出更复杂的芯片,而更高效的处理器又使得我们能够运行更先进的工具,这形成了一个良性的发展循环。如今,我们已拥有复杂的EDA工具来设计高度复杂的同步芯片。遗憾的是,异步设计方法尚不够成熟,未能有效融入这一发展循环。第一台同步处理器诞生于上世纪70年代,而第一台异步处理器则姗姗来迟,直到1989年才问世,两者之间存在显著的时间差。”
在一篇研究论文中,作者详细列举了10种描述异步系统及其相关合成方法的方式。Scott Hauck写道:“对每种方法进行全面而深入的比较,特别是在性能、面积和功耗等核心问题上,是一项艰巨的任务。遗憾的是,实际上我们尚未进行足够多的真实比较。更糟糕的是,尽管已有一些令人印象深刻的案例,但尚未有确凿的证据表明异步电路相较于同步方法具有显著优势。在异步设计中,哪种方法在性能、面积或功耗方面表现最佳,以及是否值得放弃广泛应用的同步模型而付出额外努力,这些问题仍充满争议。”
值得注意的是,这些异步技术并不包含早期实验中最为普遍的方法。You Know Solutions公司的总裁Ron Lavallee指出:“现有的异步方法基本上是将同步的图灵机转换为异步系统。然而,理想的起点应是一个无状态和异步的基础,然后在此之上构建相匹配的电路。与传统的同步设计方法相比,开发异步系统显得尤为困难。更何况,将同步系统的图灵机转换为异步系统也是一个技术难题。”
异步设计长期以来一直受到缺乏明确设计哲学的困扰。Manohar教授表示:“异步设计极易出错。在同步设计中,我可以查阅VLSI书籍,其中展示了50种不同的锁存器,以及众多可能的电路风格,尽管商业工具可能并不支持其中许多。同步逻辑领域已经确立了一种有效的设计风格,工程师们知道如何使其高效运作,并能够获得理想的结果。然而,在异步逻辑中,存在多种不同的方法,其效果参差不齐。对于外部人员而言,很难判断哪种方法最为合适。一旦选择了错误的方法,就可能陷入困境。这也是问题的一部分。缺乏定期生产异步芯片并具备相关专业知识的人才,以及缺乏可依赖的设计工具和自动化支持方法论,都是阻碍异步设计发展的重要因素。”
在寻找适合进行异步设计的电路时,我们应重点关注那些操作时间取决于数据的电路。这类电路的特点是,某些结果可以快速计算得出,而其他结果则需要更长时间。如果希望在固定时间段内完成计算,就必须以最长的可能计算时间为基准进行调整。
Manohar教授进一步解释说:“乘法就是一个简单的例子。假设我正在编写一段软件,用于计算两个数字的乘积。通过分析代码,我发现乘法器是性能瓶颈。我注意到,在大多数情况下,变量X的值为零。作为一名软件工程师,我可能会添加一个条件判断:如果X等于零,则直接返回零;否则,执行乘法操作。然而,在时钟驱动的同步设计中,这并非一个好主意。因为在最坏的情况下,添加这个判断条件会导致频率降低。而在异步设计中,这却是一种优化,因为从平均情况来看,我们的性能得到了提升。这就是我们需要从算法的角度去思考的问题。”
语言和工具
这就是一个重大的障碍,因为目前所使用的每一种EDA语言都是针对同步输入方法进行了深度优化的。
“我们最初尝试引入了决策流程图,”You Know Solutions公司的Lavallee先生解释说,“这些流程图在通用汽车公司的动力总成系统中得到了广泛应用,涉及数千个制造系统。然而,我们面临的一个主要挑战是如何引导人们以并行思维去理解这些流程图。它们的工作原理是通过同时传播多个决策流程图,并在传播过程中触发事件功能。这种传播可以在物理、生物或化学基质中进行。简而言之,流程图(如图1所示)由一系列事件、动作和测试组成。有人曾抱怨说,流程图可能会变得像意大利面条代码一样复杂难解。
多年前,我们成功解决了这个问题,通过将流程图转化为真正的并行编程语言。您只需为每个任务或函数绘制一个单独的流程图,这样有助于将复杂的大流程图分解为多个易于管理的小流程图。此外,我们还引入了对象的概念。对象使得我们可以将动作和测试结构封装到更高级别的动作和测试中,从而进一步提高代码的可读性和可维护性。您还可以根据需要,通过任意多的层级继续这种封装操作。”
图 1:异步全加法器的流程图。来源:You Know Solutions
耶鲁大学研发了一种独特的硬件描述语言。“这种语言实质是一种消息传递编程语言,其中消息负责在组件间进行沟通,”Manohar教授解释道,“它允许我们利用语法清晰地描述数据流设计,实现循环与通信。该语言基于Tony Hoare在1979年开发的CSP语言,但在语义上有所创新。”
然而,从像Verilog这样的同步语言转型过来颇具挑战。“许多同步设计工具在软件核心层面并不支持异步功能,”波特兰州立大学的Roncken教授指出,“在时序分析和测试工具中这一点尤为明显,而这些工具对设计师而言至关重要。我们的研究与耶鲁大学开发的异步工具紧密相连,而这些工具又汲取了加州理工学院、飞利浦电子、曼彻斯特大学、英特尔等机构在异步领域的深厚知识和经验。”
耶鲁大学的研究项目得到了DARPA电子复兴计划(ERI)的资助。“我们已经为异步电路构建了一个完整的ASIC流程,”Manohar教授说,“我们开发了一系列工具,旨在以更低的工作量设计出异步电路,相较于复杂的同步芯片设计而言。我们的目标是展示能够自动化设计出高质量的芯片,或者至少能显著减少时钟设计的工作量。”
不过,验证过程中可能会遇到一些特殊的挑战。其中之一便是可重复性。虽然仿真结果是确定性的,即每次仿真时事件的发生顺序都是一致的,但协调多个异步活动却相当困难。这在实时系统中是一个巨大的难题。即使在仿真环境中,捕捉和理解系统状态也可能极具挑战性。微小的变化可能导致异步设计的结果产生较大的差异,而同步设计通常能够规避这些问题。
此外,使用参考模型进行验证时也会遇到问题。尽管两个模型可能都是正确的,但它们的行为模式可能会有所不同,尤其是在存在异步活动的情况下。必须格外小心,以确保参考模型能够与设计模型保持同步。
“有些方面两者是相似的,有些方面则截然不同,”Manohar教授说,“我们正在利用形式化方法和定理证明器在该领域展开研究,以便验证异步设计的各种属性。在更高的抽象层次上,我们需要其他类型的验证,因为我们必须检查异步计算是否由门电路正确实现。我们已经开发了一些验证策略,它们看起来更像是用于软件验证的策略。”
有些方面可能更为简单。“无时钟流程图系统的验证更为容易,因为无需验证每条信号路径,”Lavallee先生指出,“一旦对所使用的基质中的动作或测试块结构进行了彻底验证,就无需再次验证。验证仅涉及流程线信号路径和系统的整体行为。”
然而,很少有设计能完全采用异步方式,这意味着同步和异步设计必须相结合。“自适应系统可能能够解决可变性的问题,”Synopsys的Aitken先生说,“在这些情况下,你会遇到一些更普遍的问题。我设计了一个异步系统,现在它的性能有所提升,但实际上存在两个经典的异步故障点。一个是测试。尽管最近情况有所变化,但历史上测试异步电路的常用方法是将其同步化,然后进行扫描。另一个实际上是同步设计中常用的一种技巧,即从时钟周期中借用时间,以确保时钟波形的信号完整性不会太差。有些事情并非完全异步,也非完全同步。这些能力使得同步设计能够获得一些显著的性能提升和功耗降低。这意味着完全异步系统的优势实际上并不像理论上那么大。”
时钟域交叉(CDC)问题已成为连接这两个世界的桥梁。“当存在两个异步时钟,且它们的活跃边沿之间的相对间隙动态变化时,就会出现亚稳态问题,”Real Intent公司的总裁兼首席执行官Prakash Narain先生解释道,“在某个时刻,这个间隙会变得足够小,以至于时钟触发器之间的路径无法满足时序要求。为了补偿这一点,你必须确保CDC交叉遵循一组特定的逻辑设计原则。对于相对较慢的芯片间互连,我们采用了全球异步、本地同步(GALS)方法。你创建一个时钟域,但在这个时钟域内,你设立完全同步逻辑的孤岛,以满足时序要求。在这些孤岛之间,由于时钟树不平衡,我们将其视为异步交叉。它们使用相同的源时钟和频率,但可能存在相位差。这可能会带来一定程度的简化,但通常情况并非如此。”
仅仅从同步设计中剥离出一小部分并不可行。“根据我的经验,我们通过异步设计获得的最大优势在于我们对整个问题的思考方式不同,”Manohar教授总结道,“我们经常会提出在同步方法中效果不佳的解决方案,但由于采用了异步逻辑,这些方案却取得了良好的效果。”
结论
那么,异步设计是否有机会呢?“如果我们今天对于异步设计以及如何自动化各种步骤的了解早在1988年就已知晓,那么情况可能会有所不同,”Manohar说。“我们处于一个有趣的时刻,那些传统上被视为软件公司的公司现在正在开发硅片。这是一个有趣的机会,因为可能有一群人以全新的视角来看待芯片设计问题。这对异步设计来说是一个机会。”
*声明:本文系原作者创作。文章内容系其个人观点,我方转载仅为分享与讨论,不代表我方赞成或认同,如有异议,请联系后台。