跨时钟域信号同步解决方案

  • 格式:pdf
  • 大小:1.69 MB
  • 文档页数:26

跨时钟域信号同步的IP解决方案

作者:Rick Kelly,Synopsys研发经理

2009年1月

为了确保拥有多个异步时钟域的系统级芯片(Soc)能够可靠运行,设计人员必须使这些跨越了多个域的时钟和数据信号保持同

步。尽管这并不属于新提出的要求,但随着多时钟域的越来越常见和复杂化,使得这一要求具备了新的重要意义。大规模集成

加上对性能的严格要求以及频率调节都导致在许多不同频率下发生了很多时钟域跨越现象-就像一场数字化的―完美风暴‖。

跨时钟域(CDC)问题会以许多种形式出现,其评估难度相当高。幸好,Synopsys DesignWare库产品提供了许多卓越的CDC

解决方案,这些方案应用简便,设计人员只需掌握在何时以及何处应用它们即可。

本文解释了在时钟和数据信号从一个时钟域跨越到另一个时钟域时所发生的许多类型的同步问题。在任何情况下,本文所包含

的问题都涉及到相互异步的时钟域。随着每一个问题的提出,本文将概述一个或多个DesignWare解决方案。这些主题和解决

方案包括:

• 基本同步 — DW_sync

• 临时事件同步 — DW_pulse_sync, DW_pulseack_sync

• 简单数据传输同步 — DW_data_sync, DW_data_sync_na, DW_data_sync_1c

• 数据流同步 — DW_fifo_s2_sf, DW_fifo_2c_df, DW_stream_sync

• 复位排序 — DW_reset_sync

• 相关时钟系统数据同步 — DW_data_qsync_hl, DW_data_qsync_lh 基本同步问题

当来自一个时钟系统的信号将用作另一个与其不同步的时钟系统的输入时,就需要对信号进行同步以达成。而不进行同步就无

法达成时序收敛。图1所示为采用一个单寄存器来同步至目的时钟域的异步输入。

伴随这种方法会出现的一个问题是,当一个触发器的数据输入处于逻辑0至逻辑1之间的过渡过程当中时,发给这个触发器时

钟信号时有可能产生亚稳态现象。亚稳态现象也有可能发生在触发器的建立时间或保持时间出现违反现象时。解决亚稳态事件

使其达至逻辑1或逻辑0所要求的时间量取决于建立时间或保持时间被违反的严重程度(图2)。

Clock to Q delay 时钟至Q延迟

FF Minimum specs 触发器最小规格

图2 解决亚稳态事件所用时间

当亚稳态事件持续时间长至足以影响到下一个逻辑阶段时,同步器就发生了故障。故障间平均时间(MTBF)通常计算如下:

其中:

fclk 是采样时钟频率

fdata 是数据变化频率

tres 是解决亚稳态所允许占用的时间

T0和T1是与具体触发器相关的常数(下文将进一步叙述)

通常,由于在综合时会尝试在时序能够满足的条件下缩减门电路数以节省占用面积,所以设计人员无法控制至下一阶段间的时

间预算。为了保持稳定一致的解决用时,设计人员可以采用一个2个触发器组成的序列。但是,这种传统解决方案肯定会增加

时延。

在采用2个触发器的解决方案,时钟树就以减去触发器FF1的时钟至Q延时后的时钟周期以及FF2的建立时间要求为基础。

对于有着相对较高数据传输速率的高速应用来说,即使两级同步器也有可能无法获得足够的MTBF,特别是在FPGA实现方案

中。如果加入第3级,则只有在第1级在亚稳态保持了足够长的时间,导致侵占了FF2的建立时间的情况下,第2级才有可能

发生亚稳态事件(图3)。

图3 3级同步器

Sampe MTBF test … MTBF测试电路示例

Error Counter 错误计数器

采用这一方法,MTBF可计算为:

T0和T1常数与所选用的具体触发器相关,并有可能从库供应商处获得。库供应商会采用如图4所示的电路来测定这些常数。

错误计数器用于测量在输入时钟处于某一特定组合的输入频率下的MTBF。通过在不同频率比率下让此电路运行,就可以测定

T0和T1的数值。

图4 用于测定触发器常数的电路

参见以下资料,可以了解更多有关亚稳态和MTBF计算的信息:

• ―确保亚稳态不会破坏您的数字设计方案‖,作者:Debora Grosse, Unisys, EDN,

1994http://www.edn.com/archives/1994/062394/13df2.htm

• ―数字系统亚稳态特性‖,作者:Kleeman & Cantoni, IEEE Transactions on Computers, ol. C-36, No. 1, Jan., 1987

• Google:MTBF亚稳态同步

另一个基本同步问题涉及到扫描测试。扫描链经常采用保持锁存以确保在时钟域之间实现正确的扫描切换。如果在扫描测试排

序时,让最后一个扫描输入循环后面直接跟一个捕获循环,且让两者的时钟均由测试时钟来驱动,则有可能无法正确捕获到跨

越时钟域的功能信号(图5)。在源侧域之间插入一个锁存器能够提供1/2时钟周期的延迟,确保了扫描测试期间的正确捕获操

作,从而解决了这个问题。在不处于扫描模式时,可由一个复用器将这个锁存器旁路,实现正常功能运行。另一种解决方案是

在较小型的时钟域之间插入一个负边沿触发器。

图5a – 扫描测试中不受控制的偏移有可能导致跨域捕获发生违反

图 5b – 在域之间复用一个锁存器可以确保1/2时钟周期的保持

图5c – 一个负边沿D触发器也可保持1/2时钟周期的保持

图5 跨时钟域扫描测试问题

对于基本同步来说,设计人员可以使用DesignWare的DW_sync组件,此组件有以下参数:

• 宽度

• f_sync_type:级数

• tst_mode:0 => 无保持,1=> 锁存,2 => 负边沿触发器

• verif_en (下文讨论;不影响综合)

在以f_sync_type参数指定了级数后,将获得如图6所示的配置方式之一。

图6 采用DW_sync组件时可能的级数 同步临时事件

有些时间,您需要在一个时钟域内设置逻辑电路以告知另一个异步时钟域内的逻辑电路,有某一特定事件已经发生。一种方法

是采用如图7所示的方案,其中通过门选复位来清空源域内的脉冲。

图7a – 较差的设计方案

图7b – 较好但仍存在门选复位

图7c – 更好的设计方案,但仍不是最佳方案

图7 另一个时钟域内事件的通知逻辑

在使用一个高电平有效的脉冲作为跨时钟域事件的信号时,这个脉冲的宽度必须足以确保采样操作的完成,而且必须在脉冲之

间存在明显的无信号时间。为了避免采用脉冲拉伸机制,您可以使用不归零(NRZ)信号发生方式,而不要使用归零(RZ)信

号发生方式。图8所示为clk_d域是如何在后一种类型的信号下捕获变化的,这是一种在许多状况下难于采用的方法。

Event in clk_s:clk_s内的事件

Return to …:Clk_d内捕获的归零信号

Captured in…:在clk-d内捕获的信号

图8 NRZ信号发生方式的优点

为了简化时钟域之间的脉冲传递,可采用DW_pulse_sync双时钟脉冲同步器(图9)。标为―clk_s‖的虚线框内的逻辑电路运行

在clk_s(源)时钟域下,而标为―clk_d‖的虚线框内的逻辑电路运行在clk_d(目的)时钟域内。在域之间采用NRZ信号可以实

现更高的事件处理流量,而且由于无需反馈,所要求的逻辑电路也较少。

Register…:可以通过parameter, reg_event在器件外配置寄存器

NRZ…:跨域的NRZ信号

Multiple…:多寄存器同步器

History…:用于检测变化的历史寄存器

图9 DW_pulse_sync双时钟脉冲同步器

Multiple …:多寄存器同步器

Multiple …:多寄存器同步器

Busy state…:忙碌状态

NRZ feedback ack_delay=1:NRZ反馈ack_delay=1:

Multiple …:多寄存器同步器

Multiple …:多寄存器同步器

Busy state…:忙碌状态

NRZ feedback ack_delay=1:NRZ反馈ack_delay=1:

图10 加了确认的DW_pulseack_sync脉冲同步器

如果需要反馈,则可以采用DW_pulseack_sync,这是一种带有确认的脉冲同步器。如图10所示,这个IP产品提供了一个NRZ

反馈信号,能够比无确认版本提供更高的事件处理流量。DW_pulseack_sync还提供了可配置的标志寄存器和反馈延时。 同步数据总线

在从一个时钟域跨越至另一个时钟域时,在目的时钟对接近过渡状态的总线进行采样时,数据总线上有可能出现瞬时虚假数值

(图11)。例如,一条从11011001变为01011010的8位总线上有3个位发生了改变。在所涉及的偏移存在时序上不确定性

的情况下,就有会看到8个可能出现的数值: the initial value (11011001), the final value (01011010) and six possible

intermediate values ( 11011000, 11011011, 11011010, 01011001, 01011000 and 01011011).

Source…:源总线

Destination clk:目的时钟

1st …:第1个同步寄存器

2nd …:第2个同步寄存器

Intermediate value:过渡数值

Intermediate value:过渡数值

图11 瞬时总线数值

一种在同步数据总线时避免不想要的过渡数值的方法是,采用一个带有确认的临时事件同步器。这种逻辑可以采用以下次序对

跨越时钟边界的数据进行同步交换:保持数据,发送―请接受‖,发回―已接受‖,释放数据寄存器。DW_pulseack_sync

组件能够