
虽然大多数数字系统都随着主时钟的稳定节拍运行,但存在一个引人入胜的并行计算世界:异步时序电路。这些无时钟系统基于事件的自然流动进行操作,提供了独特的优势,但也带来了复杂的设计挑战。本文旨在解决一个根本性问题:在没有同步脉冲的情况下如何实现可靠的基于状态的逻辑——在这个领域,时间本身既是工具,也是障碍。我们将首先深入探讨其核心原理和机制,揭示存储功能如何从物理延迟中产生,并探索设计者必须应对的关键险象。之后,讨论将转向创新应用和跨学科联系,揭示这些曾被视为缺陷的特性如何转变为用于仲裁和硬件安全的强大功能。
要真正理解任何机器,你都必须深入其内部一探究竟。对于异步时序电路,我们发现的不是一套同步运转的复杂齿轮钟表,而是更具组织性、更流畅的东西。支配这些电路的原理源于逻辑、反馈和物理延迟这一不可避免的现实之间美妙的相互作用。这是一个时间不再是节拍器,而是一条连续的河流的世界,设计者必须学会驾驭其中的漩涡和水流。
让我们从一个简单的问题开始。你有一个设备上只有一个按钮。按一下,灯亮。再按一下,灯灭。控制这盏灯的电路是组合电路还是时序电路?组合电路就像一个简单的计算器:它的输出只取决于你当前给它的输入。但我们的按钮电路不同。输入“按钮未按下”可以对应两种不同的输出:“灯亮”或“灯灭”。为了决定下一步该做什么,电路必须知道它上一步做了什么。它需要一个关于其当前状态的记忆。这就是时序电路的标志。
在更常见的同步电路世界里,存储功能由称为触发器的专门元件提供,所有这些元件都随着全局时钟的节拍运行。但如何在没有时钟的情况下构建存储呢?答案出人意料地优雅,仅在于两个简单的要素:反馈和传播延迟。
想象一下最简单的逻辑门,一个反相器或非门。它的作用是翻转一个信号:1变成0,0变成1。如果我们做一些看似毫无意义的事情,将门的输出直接连接回它自己的输入,会发生什么?
让我们追踪一下逻辑。如果输入A是0,输出Y必须是1。但由于我们将Y接回了A,输入现在是1。这个新的输入1意味着输出Y必须变成0。然后这个0又被反馈到输入……如此往复。电路试图解决这个不可能的方程。它永远无法稳定在一个值上。
现在,让我们加入一点现实因素。没有哪个逻辑门是瞬时响应的。从输入变化到输出反映该变化之间,存在一个微小且不可避免的延迟——传播延迟()。这个通常被视为麻烦的延迟,却成了我们的秘密成分。正因为如此,时间的输出是时间的输入的反相。反馈环路创造了一场追逐:输出翻转,经过的延迟后,新值到达输入,导致输出再次翻转。结果是什么?一个持续的振荡,一个由单个门自馈而生的简单时钟。这是一个初级的异步时序电路,其中状态(当前的电压水平)在传播延迟的持续时间内被“记住”。这个简单的环路揭示了基本原理:在异步电路中,状态体现在信号穿过反馈环路所需的时间里。
一个振荡的反相器很有趣,但对于计算来说并不太有用。要构建实用的异步电路,我们需要一种方法来引导它们从一个稳定状态转换到另一个。我们通过一套被称为基本模式模型的规则来实现这一点。这个模型就像外部世界与电路之间的一个君子协定:
让我们看看这是如何工作的。想象一个电路,它被设计用来遵循一个“流程表”中规定的一套规则。这个表告诉电路,对于其当前状态和外部输入的任何组合,它的下一个内部状态应该是什么。当一个输入改变时,电路会查找其当前行(当前状态)和新列(新输入)。它找到的条目就是它的目标。
如果下一个状态与当前状态相同,电路就是稳定的。它已经到达了。但如果下一个状态不同,电路就是不稳定的,必须进行转换。它会内部改变其状态,然后用相同、未变的输入有效地“重新评估”其状况。它可能会发现这个新的内部状态也是不稳定的,导致另一次内部跳变。这个过程——一系列内部状态的级联变化——会一直持续,直到电路最终落在一个当前状态和下一个状态相同的单元格中。现在它稳定了,并准备好迎接下一次外部输入的变化。这种有序的级联变化是异步机器的预期行为。
基本模式模型描述了一个理想的世界。然而,现实世界要混乱得多。异步设计中最大的挑战出现在当一个必要的转换不仅仅是一步,而是需要多个内部变量同时改变时。
考虑一个状态由两位比特表示的系统。假设电路需要从编码为GRANT (11)的状态移动到IDLE (00)的状态。两个比特和都必须翻转。但在物理世界中,没有任何事情是真正同时发生的。这两个信号将通过具有微小差异的传播延迟的不同路径传播。一个比特不可避免地会比另一个先改变。这就是竞争条件。
如果先翻转,电路会短暂地经过状态(01)。如果先翻转,它会经过(10)。这有关系吗?
有时,这没关系。如果两个临时状态(01)和(10)都是不稳定的,并且都指向相同的最终目的地(00),那么这个竞争就是非临界的。无论走哪条路,结果都一样。电路的行为是可靠的。
但如果其中一个中间状态,由于设计的巧合,对于当前输入来说是一个稳定状态呢?假设转换是从到,而中间状态恰好是稳定的。如果从翻转到的速度比从翻转到的速度快,电路就会进入状态。发现这个状态是稳定的,它就会停 secretário。它永远不会到达预期的目的地。这是一个临界竞争条件,也是异步设计者的心头之患。电路的最终状态变得不可预测,取决于温度、电压和微观制造变化的随意性。这是没有同步时钟来强制执行顺序的系统所独有的基本险象。
更糟糕的是,电路可能根本找不到一个稳定状态。输入的变化可能会使它陷入两个或多个不稳定状态之间的循环,无休止地振荡而永不安定。这被称为循环或振荡,是另一种必须在设计中排除的危险行为。
内部状态变量之间的竞争是主要关注点。但还有一种更微妙、更隐蔽的竞争。它不是两个内部信号之间的竞争,而是外部世界与电路自身反应之间的竞争。这就是本质险象。
想象一个安全锁存电路。一个输入传感器x从0变为1,表示电路应将其内部状态y从0变为1。现在,想象一下物理布局:将新的x=1信号传输到电路逻辑的导线又长又慢。相比之下,报告状态y的内部反馈环路又短又快。
事情是这样发生的:
x变为1。y应该变为1。状态y几乎立即改变。y=1值被反馈到逻辑部分。x=1信号仍在它那长长的导线上传输!在一个短暂而关键的时刻,逻辑部分被馈入了一个矛盾的组合:新的状态(y=1)和旧的输入(x=0)。逻辑部分从未预料到会看到这种组合,并可能通过启动另一个不正确的状态变化来做出反应。这就是一个本质险象:外部输入变化与其引起的内部状态变化之间的竞争。它是由单个输入变化引起的,这与功能险象不同,后者只有在两个或多个输入同时变化时才会发生。这是一个根植于信号传播延迟物理现实的基本问题。
因此,异步电路的原理就是对时间本身进行管理的研究。同步电路通过将时间强制划分为离散的步骤来驾驭时间,而异步电路则拥抱其连续的流动。它们从延迟中获取存储,从状态变化的级联中获得操作。但这种自由是有代价的:必须时刻警惕当“同时”事件的假设与物理现实碰撞时出现的不可预测的竞争和险象。理解这些原理是利用无时钟世界独特力量的第一步。
在遍历了异步电路的基本原理之后,我们可能会倾向于将它们视为一个充满逻辑悖论的雷区——一个充满竞争和险象的世界,最好避开,转而选择有序、可预测的时钟系统。但这样做将错过异步性核心深处蕴含的深刻之美和惊人效用。毕竟,现实世界并非按统一的时钟节拍运行。事件发生时就发生了。通过接受这一现实,异步电路不仅解决了其时钟对应物处理起来笨拙的问题,还为全新的计算领域打开了大门,将数字逻辑与物理现实的结构本身联系起来。
让我们开始一段应用的巡礼,不把它当作一份枯燥的目录,而是一个故事,讲述工程师们如何像熟练的柔道大师一样,学会将一个系统的明显弱点转化为其最大的优势。
我们首先必须面对的是无时钟电路中时间的原始、未驯服的本质。没有指挥棒在固定间隔挥动,每个信号都成为一场赛跑中的赛跑者。如果一个状态转换需要两个或多个内部变量改变,哪一个会先到达?答案取决于它所经过的物理路径——导线的长度、硅的温度、门的微观缺陷。
想象一个简单的2位计数器试图从状态01跳变到10。在我们逻辑思维中,这是一步。但对电路来说,这是一个命令,要求一个变量从1翻转到0,另一个从0翻转到1。如果第一个变量赢得比赛,电路会短暂地经过状态00。如果第二个赢得比赛,它会访问状态11。如果这些中间状态中的任何一个恰好是当前输入的有效稳定状态,计数器可能就会停在那里,其旅程过早结束。这就是临界竞争的本质:电路的最终目的地成了一场赌博,取决于内部冲刺的不可预测的结果。
情况可能更加微妙。单个输入变化可能沿着不同长度的不同路径在逻辑门中传播。输入x的变化可能通过一条快速路径告诉电路的一部分要改变,而同一个输入变化,也许需要先通过一个反相器,通过一条较慢的路径告诉电路的另一部分该做什么。如果“状态改变”信号在这场与“输入改变”信号的比赛中输了,电路可能会变得混乱,最终进入错误的状态。这个幽灵般的威胁被称为本质险象,一个从门和导线的物理布局本身中冒出来的幽灵。
面对如此不羁的行为,异步设计者的第一个胜利就是建立秩序。最优雅的解决方案之一是一种巧妙的数学编排,称为状态分配。我们可以不让状态被随意分配二进制编码,而是安排它们,使得任何有效的转换只需要一个比特改变。对于我们那个卡在01和10之间的可怜计数器,我们可以使用Gray码,序列可能是00、01、11、10。现在,每一步——从01到11,从11到10——都是一个单一、明确的改变。竞争在它开始之前就被消除了。
但如果一个巧妙的分配不可能实现呢?我们可以采取更直接的方法:我们可以强制转换沿着期望的路径进行。如果从状态A到C的转换引起了竞争,我们可以引入一个新的、临时的中间状态B,并明确地设计电路以的方式进行。我们添加一个垫脚石,以确保电路安全过河,将混乱的跳跃变成受控的行走。而对于阴险的本质险象,解决方案出奇地反直觉:我们可以通过增加延迟来解决延迟问题。通过在状态变量的反馈路径中插入一个缓冲器,我们可以确保“旧”状态保持足够长的时间,让组合逻辑在输入变化后稳定下来,防止它基于短暂、不正确的信息采取行动。
在这里,我们的故事发生了有趣的转折。我们已经学会了抑制和控制困扰异步电路的竞争。但如果我们不与它们斗争,而是让它们为我们所用呢?如果竞争的结果本身可以成为信息来源呢?
这正是仲裁器背后的原理。仲裁器是一种电路,其设计目的只有一个:观察两个信号,并确定哪一个先到达。它有意地引入一个竞争条件,并使用一个存储元件,如锁存器,来捕获结果。我们最初学习临界竞争时所用的电路就是这个概念的一个优美、极简的例子;它的两个可能的最终状态(1,0)或(0,1),直接对应于其两个内部路径中哪一个“赢得”了比赛。仲裁器是多处理器系统中的无名英雄,当两个CPU几乎同时请求访问共享内存总线时,由它来决定哪个CPU获得访问权限。
在更日常的层面上,这种响应第一个事件的理念是那些与我们混乱的机械世界接口的电路的核心。当你按下一个按钮时,物理触点不只闭合一次;它们会“反弹”,在几毫秒内多次接通和断开。一个时钟电路可能会将此视为一系列快速的按压。然而,一个异步的单稳态脉冲发生器可以被设计为对第一个电压变化做出反应,生成一个单一、干净的输出脉冲,然后进入一个忽略所有后续反弹的状态,直到按钮被释放并且系统被重置。它使用精心编排的内部状态序列来滤除物理世界的时间噪声。
然而,这一原理最深刻的应用位于数字逻辑和硬件安全的交叉点。想象一个仲裁器电路,有两条由许多门构成的长而看似相同的竞争路径。我们同时沿着两条路径发射一个信号。哪一条会赢?结果取决于每条路径上所有微小传播延迟的总和。这些延迟反过来又由制造过程中微小、随机的变化决定——这里的晶体管宽了几个原子,那里的导线厚了零点几纳米。这些变化是不可控的,并且对每一块芯片都是独一无二的。
这就是物理不可克隆函数(PUF)的基础。该电路被设计用来利用临界竞争。一个输入的“挑战”配置路径,输出的“响应”就是这场竞争的结果0或1。因为结果是由芯片独特的物理“指纹”决定的,所以响应对该芯片是唯一的。这是一个不存储在数字存储器中,而是由设备本身的物理结构所体现的密钥。试图克隆这个芯片将意味着复制这些原子级别的缺陷——这在实践上是不可能的。这样的设备,就其本质而言,是一个时序电路,因为它的输出不是其输入逻辑值的函数,而是对一个时间事件的存储记忆:一场物理竞赛的胜者。
从为按钮去抖动的简单行为到创建不可克隆的加密密钥,异步应用的旅程揭示了一个强大的真理。数字逻辑的清晰抽象只是故事的一半。通过拥抱计算的物理学——延迟、竞争、噪声——我们不仅找到了需要解决的问题,还发现了创造更高效、更稳健、更安全的系统的机会,这些系统与它们所处的异步世界深度协调。