3
为消除异步信号传送时压稳态导致的失败,电路设计人员通常在目的时钟域中使用多个串联寄存器( 同步寄存器链或者同步器),将信号重新同步到新时钟域上。采用这些寄存器,在设计中的其他部分使用压稳态信号之前,该信号能够有更多的时间转换到确定状态。同步寄存器至寄存器通路上的时序余量是压稳态信号稳定所需要的时间,被称为压稳态稳定时间。
同步寄存器链或者同步器是满足以下要求的寄存器序列:
■ 链上的寄存器都由相同的或者相位相关的时钟进行同步
■ 链上的第一个寄存器由不相关的时钟域进行驱动,即异步驱动。
■ 每个寄存器只扇出连接一个寄存器,链上的最后一个寄存器除外。
同步寄存器链的长度是满足以上要求的同步时钟域中的寄存器数量。图3 是长度为2 的同步链的例子,假设输出信号被送入多个目的寄存器。
图 3. 同步寄存器链实例
注意,异步输入信号,或者在不相关时钟域之间传输的信号,会在相对于采集寄存器时钟沿的任意点进行转换。因此,设计人员无法预测数据转换前的信号转换顺序或者目的时钟边沿数量。例如,如果在时钟域之间传送异步总线信号,并进行同步,数据信号会在不同的时钟沿进行转换。结果,会接收到不正确的总线数据。
设计人员必须适应这种电路工作方式,例如,双时钟 FIFO (DCFIFO) 逻辑存储信号或者握手逻辑等。FIFO逻辑使用同步器在两个时钟域之间传送控制信号,然后,数据被写入双端口存储器,或者读出。Altera 为这一操作提供DCFIFO 宏功能,它包括各种级别的延时,为控制信号提供亚稳态保护。如果异步信号被用作两个时钟域之间的部分握手逻辑,控制信号会指出数据什么时候才能在时钟域之间进行传输。在这种情况下,采用同步寄存器以确保亚稳态不会影响控制信号的接收,在任何亚稳态条件下,数据都有足够的建立时间,在使用数据之前达到稳定。在设计比较好的系统中,每一信号在被使用之前都能达到稳定状态,设计可以正常工作。
计算亚稳态MTBF
亚稳态平均故障间隔时间MTBF 大致估算了亚稳态导致出现两次设计失败之间的平均时间。较大的MTBF( 例如亚稳态失败间隔数百甚至数千年) 表明非常可靠的设计。所需要的MTBF 取决于系统应用。例如,急救医疗设备需要的MTBF 要比消费类视频显示设备长得多。增大亚稳态MTBF 能够减小信号传输导致设备出现亚稳态问题的概率。
可以使用设计信息以及器件特征参数来计算设计中某些信号传输或者所有信息传输的亚稳态MTBF。采用下面的公式和参数来计算同步器链的MTBF:
C1 和C2 常数取决于器件工艺和工作条件。
4
在fCLK 和fDATA 参数取决于设计规范: fCLK 是接收异步信号时钟域的时钟频率, fDATA 是异步输入数据信号的触发频率。较快的时钟频率以及触发数据能够降低( 或者劣化) MTBF。
tMET 参数是亚稳态信号达到确切状态的亚稳态建立时间,即,超出寄存器tCO 的时序余量。同步链的 tMET 是链上每一寄存器输出时序余量之和。
设计中每一同步器链的MTBF 确定了总的设计MTBF。同步器的失效率是1/MTBF,将每一同步器链的失败概率相加得到整个设计的失败概率,如下所示:
设计亚稳态MTBF 为1/failure_ratedesign。
设计人员使用Altera® FPGA 时,不需要手动完成这些计算,这是因为Altera Quartus® II 软件将亚稳态参数集成到了工具中。
确定亚稳态常数
FPGA供应商可以通过FPGA的亚稳态特性来确定MTBF方程中的常数。确定特性的难点在于典型FPGA设计的MTBF 一般在几年以上,因此,使用真实设计,在实际工作条件下测量亚稳态事件之间的时间间隔是不可行的。为确定器件亚稳态常数, Altera 使用了测试电路,设计的这一电路具有较短的可测量MTBF,如图4 所示。
图 4. 亚稳态特性参数测试电路结构
在这一设计中, clka 和clkb 是两路不相关的时钟信号。同步器输入数据在每一时钟周期进行触发( 较大的fDATA)。同步器长度为1,这是因为一个同步寄存器连接了两个目的寄存器。目的寄存器在一个时钟周期后以及一个半时钟周期后采集同步器输出。如果信号在下一时钟沿到达之前进入亚稳态,电路探测到采样信号出现了不同,输出一个错误信号。这一电路能够探测到半时钟周期内出现的大部分亚稳态事件。