随着现代ASIC中时钟域的增加,时钟域交叉(CDC)变得无处不在,必不可少且必不可少。当然,时间安排总是一个问题。高时钟速度和信号路径中的延迟会导致信号到达不希望的时刻,从而导致亚稳性。本文的部分重点介绍设计中异步域的必要性以及随之而来的挑战。由于工程师无法避免异步信号,因此本文介绍了如何减轻CDC引起的问题。它还涵盖了MTBF在设计中选择同步器的用法。
第二部分介绍了同步器的时序方面,以及由于同步器不同元素之间的路径约束不当而可能如何影响此功能。当今的SoC使用各种同步技术,但是您必须了解其在适当情况下的用法。我们将讨论这些技术,并说明在给定情况下不使用apt同步器的后果。第三,我们将涵盖设计中CDC同步器的验证方面以及设计中同步器所有方面的方法论。为什么使用异步路径?
现代芯片中越来越多的逻辑使得异步路径必不可少。在同步设计中,在所有触发器上都保持相同的时钟偏斜使时序变得困难。使用全局同步时钟会在较短的路径上引入时序开销,而使用更快的时钟则不会发生这种情况。结果:降低了整体性能。此外,由时钟路径延迟引起的过程电压-温度(PVT)变化终会导致不均匀的偏斜,从而使路径有效地异步并引起亚稳定性问题。尽管工程师在同步设计中使用时钟门控单元来降低功耗,但异步域的功耗甚至更低。
异步路径有一个有用的目的,但是会带来风险。可以对以不同频率工作的两个触发器之间的传播时间进行定时,但是时钟的异步特性不会在数据切换和时钟沿之间提供确定的关系。为了正确的触发器操作,源(触发器D)上的数据应在其设置和保持窗口之外很好地切换。这就是为什么。亚稳态的伤害考虑一下图1a中的图表,这是一个正边沿触发翻牌的内部图片。为了理解亚稳态,假设触发器处于复位状态。1. CLK = 0,D = 1:路径DABC和PQR处于活动状态。D处的值锁存在C处(状态如图1b所示)
)2. CLK = 1,D = 1,路径CAB和PQ处于活动状态。C处的锁存值反映在Q处(状态如图1c所示)。建立时间:当D处的值从0变为1时,信号从D到达节点C需要一定的时间。同时,如果CLK切换,它将锁存一个中间值节点C。因此,C被卡住,并且该亚稳值出现在Q处。通过此路径传播所需的时间是建立时间。为了避免亚稳态,D处的数据必须在设置窗口(T s)之外进行很好的更改。
保持时间:假设D在CLK从0切换到1的过程中切换。由于在CLK切换之后,节点A从节点D断开,因此A可以捕获在Q处可见的中间值。因此,CLK从0切换到1的时间。是保持时间。
图1(a)边沿触发触发器的内部框图显示了反相器和传输门。(b)当CLK = 0时,
活动路径为绿色。(c)当CLK = 1时,活动路径为绿色。
消除亚稳定性
在两种情况下,当CLK从0切换到1时,亚稳态值都会卡在节点A(设置)或节点C(保持)上。这会导致亚稳态值在个锁存器(ABC)周围循环,然后尝试将其自身解析为稳定值。在图1b和图1c的情况下,固定值在带有两个交叉耦合
逆变器的闭环(双稳态元件)中移动。通过小信号模型分析,两个节点之间的电压差显示出指数行为。它确定的值取决于节点A或C的中间值,但是在称为亚稳态解析时间的确定时间后,电压差接近
晶体管阈值电压(V TH)
由同步时间常数(τ)确定。如果亚稳不能在半个周期内解决,则当CLK从1切换到0时,亚稳值甚至可能在第二个锁存器(PQR)中循环,此亚稳值不得进一步传播。幸运的是,两个背对背触发器(2 Dff)可以防止出现此问题。如果在个触发器(即元触发器)的时钟周期内稳定到稳定值,则第二个触发器将不会捕获不稳定值(同步触发器)。但是,我们如何确保亚稳态值将在一个时钟周期内稳定下来?考虑确定亚稳态解决时间的因素。
其中V TH 是阈值电压和δ V我 是在卡住值(电压差V小号 )到亚稳态电压(V中号 )中,如图图2,其示出传输的双稳态逆变器回路的特性。
图2 双稳态逆变器的传输特性包括滞留电压(V S )和亚稳态电压(V M )。
差异(V M )可能导致V OUT 下降到阈值电压(V TH )之间。
同步时间常数(τ)决定了亚稳分辨率。它取决于逆变器的RC特性增益(A)。τ值越小,从亚稳值到阈值电压的过渡斜率越大。这样可以缩短解析时间。因此,低阈值电压单元(LVT)通常代替meta flop,因为LVT的τ值远小于高阈值电压单元(HVT)和标准阈值电压单元(SVT)的τ值,从而减少了解决时间。亚稳电压也成为问题的原因。根据公式,如果V M 为0,则滞留电压(V MS)等于亚稳电压(V M)。发生这种情况时,理论上将需要无限的时间来解决。这本质上永远不会发生吗?即使被卡住的电压恰好在电源电压和地之间的中间点(V M ),由于诸如热噪声之类的随机过程,它终还是会发生变化。由于数学公式无法提供解决时间,因此您需要一种概率方法。概率方法发生亚稳态的概率为(T W / T)× F D,其中T W 是设置保持窗口,T 是时间段,F D是数据引脚切换的频率。因此,概率(输入MS)= T W × F C × F D。 由于分辨时间遵循指数行为,因此在给定时间t分解亚稳态的概率 由e – t /τ给出。因此,故障概率或故障发生率为T W × F C × F D ×e – t /τ。因此,平均无故障时间(MBTF)= 1 / Rate(failure)
为了提高同步器的可靠性,我们化了MTBF。我们根据预期产品寿命选择MTBF值。因为我们希望亚稳态到一个周期的持续时间,内解决吨 在
电子吨/τ 小于一个时钟周期或同步时段(RES )和τ是技术依赖。因此,将MTBF设置为10 3 年的数量级,我们可以计算出同步器在MTBF时间段内无故障运行的频率。注意:通常将MTBF设置为比单个同步器期望的高几个数量级。考虑到a,SOC可能包含多达1000个数量级的许多同步器,因此总体MTBF降低了相同数量级。
选择同步器触发器
对于同步器,由于时钟周期短,可能会导致亚稳态无法解决。解决方法:使用两个元触发器。第二个翻牌提供了更多时间来解决亚稳性。因此,可以基于设计的频率要求来选择要使用的同步器触发器的数量。随着频率的增加,同步触发器的数量也可以根据等式1进行增加。例如,如果t的值 根据上式计算得出的值大于工作频率的时间段,则元触发器的数量也必须增加。请记住,增加触发器数量也会在同步关键数据路径时引入延迟,终导致数据速率降低。因此,您必须进行权衡。
图3 2 Dff同步器使用两个触发器来消除亚稳态条件。
了解时序要求
在图4a中,在第二周期的同步触发器处正确捕获了DIN处的数据(没有亚稳态)。源脉冲的长度足以使目标触发器捕获它。现在,看看一些不幸的计时条件。在图4b中,DIN处的数据脉冲太短,无法捕获目标域。因此,在同步时没有捕获任何值。在图4c中,DIN处的数据太短,并且会在元触发器(TW)的设置保持时间窗口内转换。结果,元触发器变为亚稳态,但由于它在一个周期的持续时间内解析,因此它不会传播到同步触发器。但是,元触发器可以解析为值0或1。这种情况可能导致错误的数据传播。如果数据在另一个时钟周期内保持稳定,则不会发生这些不幸的情况。就是这样。
在图4c中,如果源数据(DIN)对于目的地时钟的至少三个边缘是稳定的,则在第二或第三周期中有效地使数据同步。因此,要使这种同步技术正常工作,需要一个时钟周期加上在src(DIN)数据上的建立和保持时间的时序要求。如果数据从较慢的时钟域传递到较快的域,以使较慢时钟与较快时钟的时间段之比为1.5,则没有严格的时序要求。来自较慢时钟域的数据将始终在较快时钟处进行采样。
图4(a)在DIN处正确采样的数据。(b)缺少DIN的数据。
(c)DIN上的数据太短,无法传播正确的值。(d)在DIN处正确采样的数据。
对于从较快的时钟传递到较慢的时钟的信号,其中DIN可能是如图4b所示的脉冲信号,并且在目标时钟的1.5个周期内不稳定,我们可以使用基于确认的同步器。这种技术可以拉伸源数据并在目标域捕获它。目的地信号被确认回到源域,以确保在目的地正确捕获。元触发器和同步触发器之间的时序我们已经看到源触发器处的异步信号时序如何影响同步器中的数据传播。现在,元触发器和同步触发器之间是否有时序要求?如果将元触发器和同步触发器放置得相距很远(图5a),以至于传播延迟(TDELAY)超过时钟周期,亚稳值可能会传播到同步触发器,如波形所示(图5b)。因此,应将它们放置得足够近,以使SyncD的值在下一个时钟沿稳定下来。拖鞋之间应该有多少距离?我们应确保在元触发器和同步触发器之间验证保持检查,以避免它们之间的馈通。
图5(a)放置Meta和Sync触发器,使T DELAY 相距很远,从而导致(b)Sync触发器处的亚稳态传播。
要仔细实施这些限制而不必检查每个同步器,请使用已经放置好位置的硬单元替换这些结构。同样,较小的τ值可提供更好的亚稳分辨率。这些硬块中的触发器被LVT单元所取代,后者具有更好的能力在短的时间内解决亚稳态。您应该在寄存器传输级别(RTL)中使用标准的分层块。源触发器与元触发器之间的时序到目前为止,我们已经讨论了源数据输入(DIN)处的时序要求(三个边缘数据要求)以及元触发器与同步触发器之间的时序约束。但是,在源触发器和目标触发器之间是否存在约束。如果源触发器和目标触发器分开放置,会发生什么情况?
如果单个数据位由两个Dff同步,则源和目标之间的传播时间会增加,并且在两个或三个周期后将捕获目标处的采样数据。取决于设计,这可能会或可能不会对功能产生影响。在总线同步和重新收敛路径的情况下,很大程度上观察到了它的影响。如图6a所示,灰色总线的源触发器放置不均匀。这导致每个源触发器到其各自的元触发器的传播延迟不同。因此,数据到达元触发器(MetaD)输入所花费的时间是不同的(图6b)。同步的数据不正确,可能会导致设计中的功能错误。因此,除了约束从元触发器到源触发器的路径之外,还必须约束从源触发器到元触发器的定时路径。(Din到MetaD)。但是,这种约束的定量价值是多少?通常,从源到元触发器的路径受sdc命令– set_max_delay或set_multicycle_path约束。set_max_delay-从[Din] –到[MetaD] 1 * RX_Clk_period
图6(a)在这种设计中,总线中的源触发器与元触发器的距离不同。由于源触发器与元触发器之间的传播延迟不同,这导致(b)在目标处采样的值不正确。
从Din到MetaD的所有路径都将具有相同的偏斜,从而导致正确的数据传播。我们将路径限制为一个RX_clk_period的延迟。理想情况下,选择两个时钟周期中较小者的延迟,但是对于非关键数据,我们可以放宽路径。同步功能相关的信号假设我们要同步一组具有功能相关性的信号,并且该相关性需要保持在同步时钟域,那么使用两触发器同步器被证明是错误的(图8)。
图8 Din0和Din1之间的关系在目标域中不同。
对于具有功能依赖性的此类多位信号,例如-状态机,计数器,相移总线信号,不建议使用2 Dff。为了同步多位总线,我们可以使用下面将要讨论的基于使能的同步器。但是,如果这些信号在同步端具有松弛以失去其依赖性,即它们是不相关的,则可以使用2个Dff结构进行同步。然而,为了正确采样,这些信号必须满足目标时钟周期的1.5倍的约束。同步多位数据工程师经常使用基于使能的同步器(图9)来同步多位总线,其中它们之间存在功能依赖性。同步使能信号(RX_enable)使总线同步。
图9 基于启用的同步器:一种用于多位总线信号的同步技术。
使用这些结构会增加严格的时序要求。当RX_enable到达目标域时,TX_data必须稳定,以确保成功进行数据传播。违反时序可能会导致RX_data触发器出现亚稳态。在这种情况下,我们需要限制从TX_data到RX_data的异步路径,以防止这些触发器在芯片中分开放置。如果不受限制,尽管RTL设计人员必须在假设理想延迟的情况下确保了功能时序要求,但综合工具可能会出现错误行为,并将其视为“无关紧要”或“错误”的路径。我们可以使用以下sdc命令:
set_max_delay-从[TX_data] –到[RX_data](2 + 1)RX_clk_period
在此,使用的延迟为(2 + 1)×Rx_clk_period。RX_enable信号为两个周期,src(TX_enable)与使能同步器的MetaD之间的延迟为一个周期。是什么杀死了同步器?组合逻辑容易出现故障。因此,如果组合锥中的信号可以同时切换,则在同步器的路径中使用组合逻辑会受到限制,因为毛刺会传播到目标域,从而导致功能错误。通常,启用信号(图10a中所示的信号A)在同步器之前通过与门与异步源信号(TX_data)进行门控。但是,考虑到使能信号的行为,应谨慎使用此类结构。当源数据切换时,它应该是稳定的,以防止任何毛刺传输。但是建议避免在同步器之前使用组合逻辑,因为我们永远不知道在数据路径上会引入多少延迟合成,从而导致违反我们的使能信号时序假设。让我们看一个示例,组合逻辑如何导致错误的值传输。
图10(a)异步路径处的组合逻辑。(b)组合逻辑分解为不同的路径,从而在异步路径上造成故障。
在图10b中,组合逻辑可以将数据路径拆分为单独的路径。综合不能保证两条路径之间具有相等的数据平衡。两个信号的不同到达时间可能导致毛刺传播,甚至导致同步触发器变为亚稳态。防止这种结构发生毛刺传播的方法是在合成过程中保留“与”门。对于整个SOC而言,这通常是一项艰巨的任务。这就是为什么我们不使用组合门来防止这种情况的原因。CDC中的形式验证方面
随着设计复杂性CDC的增加,遇到CDC问题的可能性也随之增加。验证已成为CDC分析的重要方面,广泛使用的验证技术是基于断言的验证。一些工程师在仿真环境中使用这些断言,而另一些工程师在形式验证中使用它们。形式验证方法更全面地描述了我们的CDC结构成功率,因为它涵盖了模拟可能会在其测试模式中遗漏的所有其他情况。我们使用这些断言来验证CDC结构是否适合其各自的场景。例如:
2 Dff结构要求在目标时钟周期的1.5倍周期内保持稳定的源数据,从而在接收时钟域进行正确的采样。
在基于启用的同步器中,当rx_enable置为有效时,源数据不应更改。
在重新收敛Tx信号的情况下,可能存在三种情况:
信号可以用灰色编码。在这种情况下,assertion属性应仅检查前一个值(Gray属性)中的一位。
信号可能很热。在这种情况下,属性应确保在给定的时间,总线中只有一位为高,即,总线中只有一个网在传输数据。在此处执行1.5倍周期的2 Dff稳定性检查。我们需要确保在目标域对信号进行了正确的采样。
信号是无关的,即,即使源信号同时切换,也不会在目标域产生任何功能上的影响。在这种情况下,不需要断言来检查总线相关性。但是,必须对总线的各个信号进行2 Dff的稳定性检查。
我们将上述方法基于形式断言。一个正式的验证引擎将被唤起,它将测试所有可能的情况以找出可能的失败情况。因此,对于复杂的设计,可能有必要通过提供假设来解释对工具的信号的功能行为,从而限制主要输入。但是过度约束设计可能会导致出现虚假情况。例如,如果将2 Dff的源输入约束为稳定,则断言之前的情况可能永远不会发生。因此,应非常小心地应用设计约束。CDC同步器中的强制策略
与CDC验证策略有关的另一个验证方面是在IP验证套件中对CDC结构进行建模。在仿真中,该工具不考虑设置或保持违规,除非在门级仿真(GLS)的情况下。一切都是功能验证的理想选择。工程师提出了一种新颖的方法来仿真仿真中的同步器行为,该方法可在源触发器发生任何变化时,在元触发器中随机插入0或1个周期的延迟,以模仿亚稳性情况。
该延迟模拟了触发器已进入亚稳态的状态(延迟1个周期)或未达到亚稳态(延迟0个周期),这是触发器的物理设计的特征。此逻辑已合并到标准CDC设计结构本身中,RTL设计人员可以使用这些标准结构在其设计中放置同步器。这种方法的使用使IP设计人员确信,即使引入了亚稳定性,也不会妨碍设计的功能。
作为门级仿真(GLS)的常规做法,我们将触发器的建立和保持时间设置为零。在建立/保持时间违反的情况下,我们将关闭计时检查以防止x从元触发器上传播。因此,在异步边界处,GLS仿真可以复制功能验证。但是为了详尽地验证时序,我们可以通过定义相对于时钟周期的合适的建立和保持窗口,来修改上述模型,以检查在元触发器上是否发生建立和保持违规。如果数据在设置窗口或保持窗口内切换,我们可以在元触发器上引入0或1个周期的随机延迟。