SoC CDC问题分析

1.亚稳态-matestability

亚稳态是指在设计的正常操作过程中的某个时间段内,在某些时间段内未呈现稳定0或1状态的信号。 在多时钟设计中,无法避免亚稳性,但是可以抵消亚稳性的不利影响。

  图1显示了一个同步故障,该故障发生在一个时钟域中生成的信号被采样得太靠近第二时钟域中时钟信号的上升沿时。同步失败是由于输出变得亚稳并且在必须再次采样输出时尚未收敛到合法的稳定状态而引起的。

那么,为什么亚稳态是一个问题呢? 图2显示,在接收时钟域中遍历其他逻辑的亚稳态输出可能会导致非法信号值在整个设计其余部分中传播。 由于CDC信号可能会波动一段时间,因此接收时钟域中的输入逻辑可能会将波动信号的逻辑电平识别为不同的值,从而将错误信号传播到接收时钟域中。

 

在任何设计中使用的每个触发器都有指定的建立和保持时间,或者在时钟上升沿之前和之后,不允许数据输入改变的时间。该时间窗口被指定为设计参数,以精确地防止数据信号变化太接近另一个可能导致输出变得亚稳态的同步信号。

 

2.同步器-Synchronizers

在时钟域之间传递信号时,要问的一个重要问题是,是否需要对从一个时钟域传递到另一个时钟域的信号的每个值进行采样?

2.1 两种同步方案-Two synchronization scenarios

跨CDC边界传递信号时可能有两种情况,并且确定哪种情况适用于您的设计很重要:

   (1)允许错过在时钟域之间传递的样本。
   (2)必须对在时钟域之间传递的每个信号进行采样。
   第一种情况:有时不必对每个值进行采样,但是采样值的准确性很重要。 一个示例是在标准异步FIFO设计中使用的一组格雷码计数器。 在正确设计的异步FIFO模型中,同步格雷码计数器不需要从相反的时钟域捕获每个合法值,但是至关重要的是,在发生满空情况时,准确地识别采样值。
   第二种情况:必须允许CDC信号被正确识别,识别和确认,然后才允许对CDC信号进行更改。
   在这两种情况下,CDC信号都需要某种形式的同步到接收时钟域中。

2.2两个触发器同步器

同步器是一种对异步信号进行采样并输出已转变为与本地时钟或采样时钟同步的信号的设备。

数字设计人员使用的最简单,最常见的同步器是两个触发器同步器,如图3所示。第一个触发器将异步输入信号采样到新的时钟域中,并等待完整的时钟周期以允许第一级输出信号上的任何亚稳态衰减,然后由同一时钟将stage1信号采样至第二级 触发器,其预期目标是使第2阶段信号现在成为稳定且有效的信号,并已同步好并准备在新的时钟域内分配。

从理论上讲,到时钟输入第二级时,第一级信号仍可能足够亚稳态,从而导致第二级输出信号也变为亚稳态。
   同步故障之间的时间概率(MTBF)的计算是多个变量的函数,其中包括用于生成输入信号和为同步触发器提供时钟的时钟频率。 对于大多数同步应用,两个触发器同步器足以消除所有可能的亚稳定性。

图4展示了影响MTBF的关键因素,

1)采样频率越低越好

2)数据改变速率越低越好

从上面的公式可以看出,在较高速度的设计中,或者在采样数据更频繁地变化时,故障发生的频率更高(MTBF较短)。

2.4三触发器同步器

对于某些非常高速的设计,两触发器同步器的MTBF太短,并且添加了第三触发器以将MTBF增加到令人满意的持续时间。如图5.

 

2.5同步来自发送时钟域的信号

关于CDC设计的常见问题:在将信号传递到接收时钟域之前,先寄存来自发送时钟域的信号是一个好主意吗?通常应要求在发送时钟域中寄存信号。

考虑一个示例,其中发送时钟域中的信号在传递到接收时钟域之前未进行寄存,如图6所示。

 

在此示例中,来自发送时钟域的组合输出可能会在CDC边界处经历组合建立。 这种组合的建立有效地增加了数据改变频率,从而潜在地产生了小的振荡数据突发,从而增加了改变时可以采样的边沿数量,同时增加了对改变数据进行采样并产生亚稳态信号的可能性。

 

2.6将信号同步到接收时钟域中

在将发送时钟域中的信号传递到CDC边界之前,应先对其进行同步。 来自发送时钟域的信号同步减少了可以在接收时钟域中采样的边沿数量,有效地降低了MTBF方程中的数据更改频率,因此增加了计算出的故障之间的时间MTBF)。

 

在图7中,aclk逻辑在传递到bclk域之前在adat触发器上建立并建立。  adat触发器滤除触发器输入(a)上的组合稳定信号,并将纯净信号传递到bclk逻辑。

3.0将快速信号同步到慢速时钟域中

正如在2.1节中讨论的,如果在时钟域之间传递CDC信号时不能跳过,则在时钟域之间传递信号宽度或同步技术时,一定要加以考虑。
   与同步器相关的一个问题是,来自发送时钟域的信号在被采样之前可能会改变值两次,或者可能太靠近较慢时钟域的采样沿。 每当信号从一个时钟域发送到另一个时钟域时,都必须考虑这种可能性,并且必须确定丢失的信号对于所讨论的设计是否是问题。当不允许丢失样本时,有两种通用的解决方法:

   (1)一种开环解决方案,可确保无需确认即可捕获信号。
   (2)闭环解决方案,要求确认接收到的信号跨越CDC边界。
   本节将讨论这两种解决方案。

4.1在时钟域之间传递可靠信号的要求

如果较快的时钟域是较慢的时钟域的频率1.5倍(或更高)的,则将较慢的控制信号同步到较快的时钟域通常不是问题,因为较快的时钟信号将对较慢的CDC信号进行一次或多次采样。 认识到将较慢的信号采样到较快的时钟域中所引起的潜在问题要比将较快的信号采样到较慢的时钟域中少,因此设计人员可以利用简单的两个触发器同步器在时钟域之间传递单个CDC信号来利用这一事实。

 

4.1.1“三边缘”要求

当通过两个触发器同步器在时钟域之间传递一个CDC信号时,CDC信号必须比接收域时钟周期的周期宽度的1-1 / 2倍宽。

输入数据值必须在三个目标时钟沿保持稳定。

对于极长的源时钟频率和目标时钟频率,可以安全地将该要求放宽到接收时钟域周期时间的1-1 / 4倍或更短,但是“三边缘”准则是最安全的初始设计条件,并且 通过使用SystemVerilog断言比在仿真过程中动态测量CDC信号的分数宽度更容易证明。

“三个边缘”要求实际上适用于开环和闭环解决方案,但是闭环解决方案的实现会自动确保为所有CDC信号至少检测到三个边缘。

4.2问题-通过快速的CDC脉冲

请考虑严重缺陷的情况,其中发送时钟域的频率高于接收时钟域的频率,并且CDC脉冲在发送时钟域中只有一个周期宽。 如果CDC信号仅在一个快速时钟周期内被脉冲化,则CDC信号可能在较慢时钟的上升沿之间变高和变低,而不会被捕获到较慢时钟域中,如图8所示。

4.3问题-采样较长的CDC脉冲-但时间不够长!
   考虑一下有些非直觉和有缺陷的情况,其中发送时钟域向接收时钟域发送一个脉冲,该脉冲比接收时钟频率的周期稍宽。 在大多数情况下,将对信号进行采样和传递,但是CDC脉冲的变化很小,但实际机会是太接近接收时钟域的两个上升时钟沿,从而违反了第一个时钟沿的建立时间 并违反了第二个时钟沿的保持时间,并且没有形成预期的脉冲。 这种可能的故障如图9所示。

4.4开环解决方案-使用同步器采样信号

解决此问题的一种可能的解决方案是,在超过采样时钟周期时间的一段时间内置位CDC信号,如图10所示。如第4.1.1节所述, 最小脉冲宽度为接收时钟频率周期的1.5倍。 假设CDC信号将至少由接收器时钟采样一次,并且可能采样两次。
 当相对时钟频率固定并正确分析时,可以使用开环采样。
  优点:开环解决方案是跨CDC边界传递信号的最快方法,不需要确认接收到的信号。
  缺点:与开环解决方案有关的最大潜在问题是另一位工程师可能将该解决方案误认为是通用解决方案,或者设计要求可能会发生变化,并且工程师可能无法重新分析原始的开环解决方案。 可以通过在模型中添加SystemVerilog断言来最小化此问题,以检测输入脉冲是否未能超过“三个边沿”设计要求。

4.5闭环解决方案-使用同步器采样信号

该问题的第二种可能的解决方案是发送使能控制信号将其同步到新的时钟域中,然后将同步信号通过另一个同步器传回发送时钟域作为确认信号。  。
   优点:同步反馈信号是一种非常安全的技术,可确认已识别出第一个控制信号并将其采样到新的时钟域中。
   缺点:在允许改变控制信号之前,在两个方向上同步控制信号可能会存在相当大的延迟。

 

5.0在时钟域之间传递多个信号

在时钟域之间传递多个信号时,简单的同步器不能保证数据的安全传送。工程师在进行多时钟设计时经常犯的一个错误是,将同一事务中需要的多个CDC位从一个时钟域传递到另一个时钟域,而忽略了CDC位同步采样的重要性。
 问题在于,与一个时钟同步的多个信号将经历小的数据变化偏斜,有时可在第二个时钟域的不同上升时钟沿上对其进行采样。 即使我们可以完美地控制和匹配多个信号的走线长度,芯片上的上升和下降时间以及工艺变化的差异也可能会引入足够的偏差,从而导致在其他经过仔细匹配的走线上出现采样失败。
   必须采用多位CDC策略,以避免对多位值进行偏斜采样。

5.1多位CDC策略

为了避免多位CDC偏斜采样情况,我将多位CDC策略分为三个主要类别:

   (1)多位信号合并。 如果可能,将多个CDC位合并为1bit CDC信号。
   (2)多循环路径公式。 使用同步负载信号安全地传递多个CDC位。
   (3)使用格雷码传递多个CDC位。

5.2多位信号合并

 如果可能,将多个CDC信号合并为1位CDC信号。 问自己一个问题,我真的需要多个位来控制CDC边界上的逻辑吗?
  仅在所有CDC位上使用同步器并不总是足够好,如以下示例所示。
  如果控制信号的顺序或对齐方式很重要,则必须注意将信号正确传递到新的时钟域中。 本节中显示的所有示例都过于简单,但它们紧密模拟了实际设计中经常出现的情况。
5.3问题-两个同时需要的控制信号。
   在图12所示的简单示例中,接收时钟域中的寄存器需要加载信号和使能信号,才能将数据值加载到寄存器中。 如果加载和使能信号均在同一发送时钟沿上驱动,则控制信号之间的小偏差可能会导致两个信号在接收时钟域内同步为不同的时钟周期。 在这种情况下,数据将不会加载到寄存器中。

 

5.3.1解决方案-合并 -Consolidation

5.3节中解决问题的方法很简单,合并控制信号。 如图13所示,仅从一个负载使能信号驱动接收时钟域中的负载和使能寄存器输入信号。 合并将消除两个随时间变化到达的控制信号的可能性。

5.4问题-两个相移的排序控制信号。
   图14中的示意图显示了两个使能信号aen1和aen2,它们被从发送时钟域顺序驱动到接收时钟域,以控制流水线数据寄存器的使能输入。 问题在于,在第一个时钟域中,aen1控制信号可能会在生成aen2控制信号之前稍稍终止,并且接收时钟的上升沿可能会出现在aen1和aen2控制信号脉冲之间的微小间隙中,从而导致 在接收时钟域的使能控制信号链中形成一个周期的间隙。
   这将导致第二个寄存器丢失a2数据值。

5.4.1解决方案-合并和一个额外的触发器

如图15所示,此问题的解决方案是仅将一个控制信号发送到接收时钟域,并在接收时钟域内生成第二个相移流水线使能信号。

5.5问题-多个CDC信号

图16中的图显示了两个已编码的控制信号在时钟域之间传递。 如果采样时两个编码信号略有偏斜,则可能会在接收时钟域的一个时钟周期内生成错误的解码输出。

 

5.5.1传递多个CDC信号的解决方案

多循环路径(MCP)公式和FIFO技术可用于解决与传递多个CDC信号有关的问题。

第5.6节中给出了MCP公式的描述和定义。至少有两种多循环路径(MCP)公式可用于解决此问题:

   (1)闭环-带有反馈的MCP公式。
   (2)闭环-具有确认反馈的MCP公式。
   下一节将介绍MCP公式的实现技术。
   至少有两种FIFO策略可作为此问题的闭环解决方案:

   (1)异步FIFO实现。
   (2)2深FIFO实现。
   从5.8节开始描述FIFO实现技术。

5.6多循环路径(MCP)公式

使用MCP公式是安全传递多个CDC信号的常用技术。
 MCP公式是指将未同步的数据发送到与同步控制信号配对的接收时钟域。 数据和控制信号同时发送,从而允许数据在目标寄存器的输入上建立,同时控制信号在到达目标寄存器的负载输入之前同步两个接收时钟周期。
   优点:

(1)不需要发送时钟域来计算在时钟域之间发送的适当脉冲宽度。
(2)仅要求发送时钟域将使能切换到接收时钟域,以指示数据已通过并准备加载。 不需要使能信号返回其初始逻辑电平。
   该策略无需同步即可传递多个CDC信号,同时将同步的使能信号传递至接收时钟域。 在同步使能通过同步并到达接收寄存器之前,不允许接收时钟域对多位CDC信号进行采样。

由于将未同步的数据字直接传递到接收时钟域并保持多个接收时钟周期,因此该策略被称为多周期路径公式,从而允许使能信号同步并被识别为接收信号。 允许非同步数据字更改之前的时钟域。由于不同步的数据在被采样之前会经过多个时钟周期并保持稳定,因此没有危险。

5.6.1使用同步使能脉冲的MCP公式

也许在时钟域之间传递同步使能信号的最常见方法是采用切换使能信号,该信号被传递给同步脉冲发生器,以指示不同步的多周期数据字可以 在下一个接收时钟沿被捕获,如图18所示。
   这种同步使能脉冲产生的关键特征是输入信号的极性无关紧要。 在图18中,d输入在周期1中被切换为高电平,并且通过周期4,高信号已通过三个同步触发器传播。 在周期3中,q2和q3触发器的输出具有不同的极性,从而导致同步使能脉冲在同一周期内形成在异或门的输出上。 类似地,在周期7中d输入被切换为低电平,到周期10时,高信号已通过三个同步触发器传播。 再次在周期9中,q2和q3触发器的输出具有不同的极性,导致同步的使能脉冲形成在异或门的输出上。

由于第5.0节中描述的所有MCP公式都使用同步使能脉冲发生电路,因此创建并使用较小的等效符号表示同步使能脉冲发生电路被认为是有用的。 等效符号如图19所示。

除了产生任何d输入极性的脉冲外,同步使能脉冲产生电路还具有q输出,该输出跟随d输入延迟三个时钟周期。  q输出经常用作反馈信号,并作为确认信号通过发送时钟域中的另一个同步使能脉冲生成电路。
  图20显示了典型的发送-接收触发脉冲生成设计。

使用这种技术时,要求接收时钟域具有适当的逻辑以在检测到脉冲时捕获数据,因为该脉冲仅对每个多周期数据字一个接收时钟周期有效。

 

5.6.2闭环-具有反馈的MCP公式

使用MCP公式时的一项重要技术是将使能信号作为确认信号传递回发送时钟域,如图21所示。

对于图21中的示例,确认反馈信号(b_ack)生成一个确认脉冲(aack),用作一个小的READY-BUSY,1状态FSM模块的输入,该模块生成一个就绪信号(aready)来指示 现在可以安全地再次更改数据输入值。 一旦aready信号变高,发送方就可以自由发送新数据(数据)和随附的提升控制信号。
  这是一条自动反馈路径,它假定接收时钟域将始终为通过MCP公式同步的下一个数据字做好准备。
 

5.6.3闭环-具有确认反馈的MCP公式

第5.6.2节中描述的技术的完全响应变型使用MCP公式是仅在接收时钟之后将使能信号作为确认信号传递回发送时钟域 域使用bload脉冲确认接收到数据,如图22所示。

对于图22中的示例,接收时钟域具有一个小的WAIT-READY,1状态FSM,当在数据寄存器的输入上数据有效时,该状态将有效信号(有效)发送到接收逻辑。 直到接收逻辑通过置位bload信号确认应加载数据后,才实际加载数据。 在加载数据之前,没有对发送时钟域的反馈,然后将b_ack信号与具有自动反馈的MCP公式一样发送回去。
   这是一条反馈路径,需要在捕获数据和发送反馈之前对接收时钟域进行操作。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值