
在数字电子学的世界里,同步时钟长期以来一直是无可争议的统治者,以精确、步调一致的方式协调着每一个操作。然而,这种刻板的方法面临着日益严峻的挑战,从物理延迟引起的时序风险到时钟本身消耗的巨大功率。对全局时钟的依赖造成了根本性的脆弱和低效,而一种替代的设计哲学则优雅地填补了这一知识空白。本文将深入探讨延迟不敏感设计的世界,这是一种无时钟范式,其中电路根据事件的实际完成情况而非外部节拍进行通信和协调。在接下来的章节中,我们将探索实现这一点的核心概念,从握手协议到自定时逻辑,并揭示这些原理如何应用于构建更高效、更鲁棒、更具适应性的系统,以应对计算机体系结构中的关键现代挑战。
要领会延迟不敏感设计的精妙之处,我们必须首先理解它试图取代的世界——一个由全局时钟无情、节拍器般节拍所支配的世界。这就是同步电路的世界,当今大多数数字计算机的基石。这是一个美丽、简单的有序世界:在时钟的每个节拍上,所有组件齐步向前。但在这种有序的表象之下,隐藏着一种脆弱性,一种对使电子设备工作的根本要素的敏感性:信号传播需要有限的时间。
想象一个设计用于执行某项任务的简单逻辑电路。在一个完美的抽象世界里,输入的变化会立即引起输出的变化。但实际上,信号像赛跑者一样穿过导线和逻辑门。有些路径短而快;有些则长而曲折。麻烦就此开始。
考虑一个电路,当其一个输入翻转时,其输出应保持在逻辑“1”的稳定状态。假设逻辑由函数 描述。如果我们将输入 和 保持为“1”,函数简化为 ,这应该总是为“1”。当输入 切换时,比如从“1”变为“0”, 项必须关闭,而 项必须开启。输出应该先由一项维持高电平,然后由另一项维持,实现无缝交接。
但如果“关闭”信号比“开启”信号传播得快会怎样?输入信号 扇出,形成一个重收敛扇出:一个副本直接进入 逻辑,而另一个则通过一个反相器生成 以供 逻辑使用。反相器增加了延迟。导线本身也有不同的长度,因此有不同的延迟。完全有可能 项在 项有机会上升到“1”之前就变为“0”。在短暂的一瞬间——也许只有几百皮秒——两个项都为“0”。本应是稳定“1”的输出,瞬间毛刺般地降到“0”又升回来。这是一种静态冒险,一种违反电路预期行为的无用瞬态脉冲。
你可能认为我们可以通过巧妙的方法解决这个问题。数字设计师对此有一个技巧:添加一个“冗余”项,称为共识项。在我们的例子中,我们可以添加项 。由于 和 都是“1”,这个新项在转换期间始终为“1”,从而保持输出稳定。问题解决了吗?
没那么快。这个逻辑上的修复在纸上看起来很完美,但它可能会被真实芯片中混乱的物理特性所击败。传输这些信号的导线本身就有延迟。一个自动布局芯片的工具可能会将一条信号路径布线得比另一条稍长。一个为加速慢信号而插入的缓冲器可能会无意中改变相对到达时间。这些物理现实可能会重新引入我们以为已经消除的冒险。我们发现自己陷入了一场持续的战斗,试图预测和抵消延迟。同步设计哲学将我们逼入这个角落:因为一切都应该在固定的时钟周期内发生,我们必须保证即使是最坏情况、最慢的信号路径也能按时完成。这个严格的截止时间就是时钟的暴政。
如果我们采取一种不同的方法会怎样?与其强迫每个组件都随着全球鼓点步调一致地前进,不如让它们按自己的节奏工作,并简单地互相交谈?这就是异步或无时钟设计的核心哲学。
异步系统用局部的“对话”取代了全局时钟。一个组件处理它的数据,完成后,它向下一个组件发送一个“请求”信号,实际上是说:“我完成了,这是你的数据。”接收组件接收数据,进行处理,完成后,它发回一个“确认”信号,说:“收到了,谢谢。你准备好后,我随时可以接收更多数据。”这是一种握手协议。
这个简单的改变带来了深远的影响。考虑一个连接系统两部分的数据总线。一个高频运行的同步总线必须确保信号能在单个、非常短的时钟周期内走完总线的整个长度,通过所有逻辑,并准备好在目的地被捕获。如果导线很长,总延迟可能会超过时钟周期。唯一的解决办法是让传输占用多个时钟周期,人为地减慢速度以适应严格的时序结构。
然而,异步总线是自适应的。一次传输的总时间就是请求信号沿总线传播和确认信号返回所需的真实物理时间。没有外部时钟周期需要满足。如果组件快且导线短,传输就快。如果它们慢,传输就慢——但它仍然是正确的。
这种自适应性为应对制造中不可避免的变化提供了令人难以置信的鲁棒性。在制造硅芯片时,并非所有芯片都是一样的。由于工艺中的微小波动,一些芯片最终比其他芯片快。对于具有固定时钟频率的同步设计,任何对于时钟截止时间来说稍微慢一点的芯片都是不合格品。它会被丢弃,从而降低制造良率。而异步电路则简单地以其自身的自然速度运行。一个“慢”的芯片仍然可以完美工作,只是性能稍低。它不会失效;它会适应。这使得设计本身更具鲁棒性,并可能带来更高的良率和更可靠的系统。
没有时钟的操作似乎像魔法,但它是由一些巧妙而强大的构建模块实现的。有两个核心概念:一种等待的方式,以及一种知道数据何时准备好的方式。
第一个是一种称为穆勒C元件的特殊门。你可以把它看作电路中的一个“会合”或“共识”点。一个普通的与门在其所有输入都为“1”时输出“1”。一个或门在任何输入为“1”时输出“1”。而C元件则不同:
这种“等待所有人”的行为是防止时序竞争的关键。如果一个C元件有两个输入,一个提前到达,C元件只会等待。它拒绝改变其输出,直到第二个信号到达。它根据信号的实际到达,而不是外部时钟的猜测,自然地强制实现局部同步。这相当于电路中的“所有人到齐之前不开会”。
第二个关键概念是一种编码数据的方式,它不仅告诉我们数据的值,还告诉我们其有效性。这被称为双轨编码。我们不再使用单根导线(其中“0”电压可能意味着数据值为零,也可能意味着尚未发送数据),而是为每个比特使用两根导线。我们称它们为“真”线()和“假”线()。我们可以定义一个简单的协议:
通过这种编码,从间隔状态 到有效数据码字( 或 )的转换是一个明确的事件,标志着新数据的到来。这个特性被称为完成检测。我们只需监控导线,就能确切地看到计算何时完成。
通过结合这两个思想,我们可以构建几乎完全对延迟不敏感的电路。我们使用C元件和或门构建逻辑函数来操作双轨信号。整个系统在一个四相循环中运行:从间隔状态开始,转换到有效数据状态进行计算,然后返回到间隔状态为下一次计算重置。因为逻辑被设计为单调的(在计算期间信号只从0变为1,在重置期间从1变为0),并且因为数据编码本身就标志着完成,所以整个电路本质上是无冒险的。这就是准延迟不敏感(QDI)设计的精髓,这是一种健壮的方法论,无论门和导线的延迟如何,它都能正确工作,仅需对信号扇出做一个温和的时序假设(等时分叉假设)。
我们构建了一个在结构上就具有鲁棒性的系统,它能优雅地处理其物理环境中的变化。但好处不止于此。无时钟设计最显著的优势之一是功耗效率。
在同步芯片中,全局时钟就像系统的心脏,以惊人的频率向数十亿个晶体管泵送信号。这个时钟网络是一个巨大的电气负载,每一次跳动都会消耗功率,无论这些晶体管是否在做有用的工作。即使同步寄存器处于“空闲”状态——其数据没有改变——连接到它的时钟仍在开关,消耗大量功率。对于一个假设运行在 的同步寄存器,仅空闲时钟消耗的功率就可能是静态泄漏功率的24倍。总功耗将是同等空闲异步寄存器的25倍。
异步电路是事件驱动的,根本上不同。如果没有新的事件要处理,电路就是静默的。没有时钟在后台滴答作响。它消耗的唯一功率是极少量的静态泄漏电流。它体现了“零工作,零功耗”的原则。
当然,没有免费的午餐。取代时钟的握手逻辑有其自身的能量成本,。要使异步流水线比其同步对应物更节能,其握手逻辑的总能量必须小于它所取代的全局时钟的能量。条件出奇地简单:每个阶段的握手能量必须小于总时钟能量除以阶段数,即 。鉴于全局时钟网络()通常是现代芯片上最大的功耗源之一,这是一个经常有利的权衡,从而带来可观的节能。
延迟不敏感设计代表了一种范式转变。它从全局时钟的暴力、自上而下的控制,转向一个分布式、局域化的“自下而上”对话的世界。其结果是一个更鲁棒、更具适应性、更节能的系统。这是一个美丽的例证,说明了拥抱而非对抗计算的物理现实,可以导向一种更优雅、更强大的工程形式。
我们已经探索了延迟不敏感设计的原理,看到电路如何在某种意义上感知自身的进度。我们用一种更民主的握手和自定时信号系统取代了全局时钟的僵化节拍。这可能看起来只是一个奇特的现象,一种巧妙的逻辑技巧。但它究竟有何用途?这种无时钟哲学开启了哪些新世界?事实证明,其影响是深远的,从最微小的逻辑门波及到现代计算机体系结构中最宏大的挑战。正是在这里,这个思想的真正美妙之处得以展现——不是作为一个抽象概念,而是作为构建更智能、更高效、更鲁棒的计算机器的强大工具。
让我们从最底层开始,从构成处理器的普通组件开始。我们如何构建一个不需要时钟的简单加法器?诀窍,正如我们所见,在于改变我们表示信息的方式。我们不再用单根导线的高电平表示“1”,低电平表示“0”,而是使用一对导线——这种技术称为双轨编码。一根线变高表示“1”,另一根变高表示“0”,当两根线都为低电平时,值为“空”或“尚未就绪”。
通过这个简单的改变,一个全加器单元可以被构造成“输入完备”的。这意味着它的内部逻辑结构保证了和与进位输出只有在所有三个输入——A、B和进位输入——都已到达并有效之后,才会从“空”状态转换到有效状态。电路天生会等待其输入,计算结果,然后通过产生一个有效输出来有效地举手示意:“我完成了!”。这个原理不限于简单的加法器。它可以扩展到构建用于高速超前进位加法器中更复杂的生成-传播逻辑。此外,我们可以将许多这样的模块的“完成”信号组合起来,为整个模块创建一个分层的完成信号,报告整个多步计算何时完成。我们正在构建的电路不仅在处理数据,而且还在传达它们自己的操作状态。
这里我们来到了异步设计最优雅的优势之一。同步电路是其自身时钟的囚徒。时钟周期必须足够长,以容纳电路可能执行的绝对最慢、最坏情况下的操作,即使这种情况极为罕见。这就像一列火车,即使只载着一根羽毛,也必须总是在车站等待它可能需要装载一头大象的时间。
异步电路摆脱了这种束缚。它们花费的时间恰好是处理特定数据所需的时间。考虑一个专门的加法器,比如用于旧的余三码的加法器,它有时需要根据一个中间进位位进行额外的校正步骤。在同步世界中,每一次加法都必须为这种潜在校正的延迟留出预算。然而,一个自定时电路会自然地适应。如果需要校正,其完成检测逻辑会等待该步骤完成。如果不需要,它会更早地发出完成信号。它以实际完成工作的速度运行,而不是以可能需要完成的工作的速度运行。
这不仅仅是一个边缘案例;它反映了关于计算的深刻真理。对于许多算法来说,最坏情况路径在统计上是罕见的。一个经典的例子是简单的行波进位加法器。最坏情况延迟发生在一个进位必须从最低有效位一直传播或“行波”到最高有效位时。同步设计必须为其时钟设定这种悲观情景。但这到底多久发生一次?概率分析表明,平均而言,进位链会早得多地终止。一个异步行波进位加法器天生就利用了这一点。它的平均完成时间可以显著快于其同步表亲所受束缚的最坏情况时间。它本质上是平均情况分析的物理体现,通过对其自身数据的统计性质敏感来获得性能优势。
从单个算术单元放大来看,这些原理在如何连接大型片上系统(SoC)的不同部分方面找到了强大的应用。例如,在同步和异步总线之间的选择涉及一组有趣的工程权衡。
这并非总是一个简单的胜利。异步总线的请求-确认握手本身会引入开销。定量比较可能会显示,对于像优先级编码器这样的简单逻辑块,一个精细调校的同步流水线可以实现更高的峰值吞吐量,因为它不必为每一次传输都支付四相握手的时间代价。
选择也会影响物理设计和成本。为了满足高吞吐量要求,一个具有握手延迟的异步总线可能需要比高频同步总线更宽的数据路径。更宽的总线意味着芯片上需要更多的物理引脚,这直接转化为更高的制造成本。
然而,在某些系统级场景中,异步方法在效率上提供了独特的优势。考虑一个共享的双向总线,不同的设备轮流读写数据。为了防止总线方向从写变为读时发生信号冲突,同步设计必须插入一个“总线换向”周期——即不传输数据的空闲周期,浪费了宝贵的时间。异步设计可以通过使用独立的单向路径进行读写来优雅地解决这个问题。这完全消除了换向惩罚,从而导致更高的总线占用率,意味着更大比例的时间用于做有用的工作。
也许延迟不敏感设计最激动人心的应用不是优化老问题,而是解决当今计算机体系结构面临的新的、生存性危机。几十年来,设计师依赖于Dennard缩放定律,这是一个奇妙的原理,使得晶体管每一代都变得更小、更快、更节能。那个时代已经结束。我们仍然可以在芯片上封装更多的晶体管,但我们无法同时为它们全部供电而让芯片不熔化。这导致了两个主要挑战:“功耗墙”和“暗硅”问题。
现代SoC是包含众多模块的庞大系统——处理器、内存控制器、无线电——通常需要以不同的速度运行。强迫它们全部随着一个快速的全局时钟节拍前进,功耗巨大。一个更实际的方法是全局异步,局部同步(GALS)。在这里,每个模块(或“时钟域”)都运行在自己的局部时钟上,这些独立的域进行异步通信。这通常通过异步FIFO缓冲器来完成,它可以在没有共享时钟的情况下安全地在模块之间传递数据。仔细的功耗分析表明,这种GALS方法比在整个芯片上分布一个庞大、高频的全局时钟树并使用复杂的时钟门控方案要节能得多。
这就把我们带到了“暗硅”末日。由于整个芯片有固定的功耗上限,我们可以构建一个拥有(比如说)16个核心的处理器,但我们可能只有足够的功率预算来同时“点亮”其中的10个。剩下的6个核心就是“暗硅”——功能完好,但因功耗限制而无法使用。这个功耗预算的很大一部分被全局时钟网络消耗了。如果我们能回收那部分功耗呢?
这正是异步设计成为英雄的地方。通过将一些计算岛设计成无时钟的,我们消除了它们对时钟树功耗的贡献。从时钟网络节省下来的功率可以用来点亮额外的异步岛。一个混合架构,包含少量用于延迟敏感任务的同步核心和大量用于吞吐量导向计算的异步核心,可以在相同的严格功耗上限下点亮更多的总核心数,并实现更高的整体性能。这是一个从我们受热限制的硅预算中挤出更多有用计算的绝佳策略。
这些权衡植根于CMOS晶体管的基本物理特性。异步电路的性能优势来自于利用平均情况延迟和避免同步时钟所需的大量时序裕量。功耗优势来自于消除时钟树,这是动态功耗 的主要来源。然而,握手逻辑增加了其自身的功耗和面积开销。当我们为了节省功耗而将电源电压()推得越来越低时,门延迟急剧增加,即使电路不切换时也存在的静态泄漏功耗可能成为一个主要问题。异步设计中额外的握手电路会增加总泄漏,可能会抵消部分动态功耗节省,尤其是在近阈值操作中。
从最小的加法器到最大的片上超级计算机,延迟不敏感设计提供了一种丰富而另类的思维方式。它不是万能药,而是一种复杂的工具,它用全局时钟简单、粗暴的规律性换来一种更细致、更具适应性,并且通常更高效的计算形式。在一个受功耗和复杂性限制的世界里,这种无时钟逻辑的永恒思想从未如此适时。