FPGA设计中的跨时钟域问题
   来源:现代电子技术     2021年01月15日 07:44

揭秘3种跨时钟域处理的方法

俞帆+张伟欣

摘 要: 随着FPGA设计中的时钟频率越来越高,时钟方案越来越复杂,跨时钟域问题变成了设计和验证中的关键点。为了解决跨时钟域问题对FPGA设计造成功能错误,对跨时钟域信号采用两级寄存器或多级寄存器同步、握手协议和异步FIFO等同步方法;同时还提出了不检查时序、修改SDF文件和添加约束文件三种仿真中的技术,解决了跨时钟域产生的亚稳态现象对FPGA仿真验证造成的影响。

关键词: CDC; 亚稳态; 同步; 仿真

中图分类号: TN710?34 文献标识码: A 文章编号: 1004?373X(2014)07?0151?03

Problem of clock domain crossing in FPGA design

YU Fan, ZHANG Wei?xin

(Shanghai Aerospace Electronic Technology Institute, Shanghai 201109, China)

Abstract: With the increasing clock frequency in the FPGA design, the clock scheme is more and more complex, and the issue of crossing the clock domain becomes a key point in design and verification. In order to correct the function error in FPGA design generated by crossing clock domain, two?stage register or multi?stage register synchronization, hand?shake protocol and asynchronous FIFO are used for the signal crossing the clock domain. At the same time, some technologies of no?timing check, SDF file modification and constraint file addition are proposed, which overcome influence of metastable state phenomennon produced by clock domain crossing on FPGA simulation and verification.

Keywords: CDC; metastability; synchronization; simulation

0 引 言

在FPGA(Field Programmable Gate Array,现场可编程门阵列)设计中往往存在多个时钟域,这就会带来跨时钟域(Clock Domain Crossing,CDC)问题。如果对跨时钟域产生的亚稳态等问题解决不当,就有可能造成设计功能错误。本文就跨时钟域问题产生的原因、在设计中的解决方法和仿真验证中的相关技术进行阐述和讨论,这对提高FPGA设计的可靠性有着重要的意义。

1 亚稳态

在数字集成电路中,寄存器要满足建立时间(setup time)和保持时间(hold time)的时序要求。建立时间是指在时钟沿到来之前,寄存器输入数据信号必须保持稳定的时间。保持时间是指在时钟沿之后,数据信号必须保持稳定的时间。亚稳态(Metastability)现象就是如果寄存器数据端的变化与时钟的有效沿很近(不能满足建立时间或保持时间要求),其输出信号就会在一段不可预知长度的时间内处于一个非“0”非“1”的中间状态(这段时间称为亚稳态恢复时间),之后可能稳定在“1”状态,也可能稳定在“0” 状态。而且这种亚稳态可能向后传播,造成后级出现逻辑错误。

亚稳态的形成过程如图1所示,时钟域aclk的输出信号adat从高到低的变化与时钟bclk的上升沿非常接近,不满足建立时间或保持时间的要求,输出信号bdat1就会有亚稳态产生,经过一段时间后随机稳定在“1”或“0”上。当亚稳态产生的不确定电平被后续电路采样时,就可能发生功能错误。

图1 亚稳态示意图

亚稳态现象是寄存器的一个固有特点,由于亚稳态恢复时间的不确定性,不能根本的去除亚稳态的影响。通过在设计中预留一定的亚稳态恢复时间,使信号恢复到确定的电平后参与逻辑运算,降低亚稳态的影响。MTBF(Mean Time Between Failure,平均无故障时间)是衡量一个设计的可靠性指标,MTBF的值越大,则出现亚稳态问题的概率越小。一个高的平均无故障时间表明一个设计是可靠的。MTBF的计算公式如下所示:

[MTBF=eTmetC2C1?fclk?fdata]

式中:[Tmet]为寄存器从时钟上升沿触发后的时序余量时间;[fclk]为接收时钟域的时钟频率;[fdata]为数据的变化频率;[C1]和[C2]为与FPGA器件有关的参数。可以通过延长[Tmet]的时间或降低[fclk]和[fdata]的频率来增大MTBF的值。

[Tmet]的计算公式为:

[Tmet]=采样时钟周期时间-输出信号的[Tco]时间-数据到达下一级寄存器输入端口的延时时间[Tdata-]下一级寄存器时间[Tsu]

式中:[Tco]为输出相对于时钟沿之后的延时时间;[Tsu]为输入相对于时钟沿所需的建立时间。精确的说,[Tmet]时间还应该加上时钟网络延时时间[(Tclk2-Tclk1)。]如图2所示。

图2 寄存器采集数据示意图

因为[Tco]和[Tsu]是由FPGA器件的工艺以及工作环境决定的,时钟网络延时时间很大程度上也是由FPGA器件决定。所以在时钟频率[fclk]和数据变化频率[fdata]固定的情况下,只有减小[Tdata]的值才能增大[Tmet]的值。而[Tdata]是指两个寄存器之间的逻辑延时以及连线延时之和,为了使[Tdata]最小,两个寄存器之间应该没有任何逻辑。

2 同步方法

2.1 两级寄存器同步

根据上面的分析,为了防止新时钟域中的第一级寄存器的亚稳态信号对下级逻辑造成影响,可以采用两级寄存器同步的方法。具体电路如图3所示。

在图3中可以看出,时钟域bclk的第一级寄存器的输出信号bdat1如果存在亚稳态,经过1个时钟周期后,bdat1的亚稳态趋于稳定,第二级寄存器就能够采样到稳定的值,输出信号bdat2不会产生亚稳态。

在一些高速的设计中,可能两级寄存器同步也无法获得足够的MTBF,第一级寄存器输出的亚稳态保持了足够长的时间,导致第二级输出还有亚稳态,这时就需要采用三级寄存器或者更多级寄存器的方法来同步。

图3 两级寄存器同步

2.2 从快时钟域到慢时钟域

当接收时钟域的频率满足大于1.5倍发送时钟域的频率时,可以直接用两级寄存器同步。但是如果发送时钟域的频率大于接收时钟域的频率时,如果直接用两级寄存器同步,跨时钟域信号可能不能正常采样,造成数据丢失。比较可靠的方法是跨时钟域信号的电平宽度大于1.5倍的接收时钟周期,这样就可以保证跨时钟域信号正常采样。

可以在设计时直接在发送时钟域里把跨时钟域信号展宽到大于1.5倍的接收时钟周期,也可以采用握手协议。握手协议的原理是:在发送时钟域里将所要传输的数据准备好,再产生一个标志信号通过同步器传递到接收时钟域告诉它来读取数据,当接收时钟域的控制逻辑检测到这个信号后会将发送时钟域准备好的数据读进来,然后会产生一个传输完成信号告诉发送时钟域数据读取完毕,最后发送时钟域接收到这个信号后会撤销标志信号,完成一次数据传输。

使用握手协议可以进行从快时钟域向慢时钟域的传输,也可以进行多位数据的传输。

2.3 异步FIFO

在多位数据进行跨时钟传输时还可以使用异步FIFO。异步FIFO是一种先进先出电路,用来进行2个异步时钟之间的数据传输。FIFO的存储介质为一块双端口RAM,可以同时进行读写操作。在写时钟域部分,由写地址产生逻辑产生写控制信号和写地址;读时钟域部分由读地址产生逻辑产生读控制信号和读地址。在空/满标志产生部分,由读写地址相互比较产生空/满标志。

异步FIFO的指针逻辑使用格雷码,代替了通常使用的二进制码。格雷码在每次计数时只改变其中的一位。可以在格雷码总线上使用同步器,因为每一次总线改变时只有一根信号线有变化,于是就消除了格雷码总线各位数据通过不同同步器时的竞争情况。

3 仿真中的相关技术

当使用仿真工具对FPGA设计进行后仿真时,如果存在跨时钟域问题,不满足建立时间或保持时间的要求就会产生亚稳态,仿真工具无法确定当前的值,输出变为不定态X。X态会往后传播,造成仿真失败。

在某FPGA设计做后仿真时,存在亚稳态问题,仿真波形如图4所示。

图4 亚稳态仿真波形图

其中后仿真文件中的相关代码如下所示:

DF1B\clk_cnt[0] (.D(\clk_cnt_3[0]), .CLK(clkin_t), .Q(\clk_cnt[0]_net_1 ));

从图4中可以看出,时钟clkin_t的下降沿与寄存器的输入信号\clk_cnt_3[0]跳变沿的建立时间无法满足,产生亚稳态,输出信号\clk_cnt[0]_net_1变为X。亚稳态向后传播,造成仿真无法正常进行。为了解决仿真中的这个问题,可以采用以下一些技术。

3.1 不进行时序检查

通过在仿真时添加命令让仿真器不进行时序检查。以Synopsys公司的仿真器VCS为例,可以在编译时添加命令+notimingcheck,VCS工具就不会检查时序,当建立时间或保持时间不满足时,也不会产生X态。这种方法的弊端是所有的逻辑单元均不会检查时序。

3.2 修改SDF文件

还可以对违反时序的单元直接修改SDF文件中的时序约束。在该例子中,违反时序的单元是寄存器\clk_cnt[0],通过查找SDF文件,可以看到该寄存器的时序约束如图5所示。

图5 SDF文件中违反时序约束的寄存器

该寄存器违反的是输入数据相对于时钟下降沿的建立时间约束,可以在SDF文件中将这两行的约束值均修改为0,如下所示:

(SETUP (posedge D) (negedge CLK) (0.00:0.00:0.00))

(SETUP (negedge D) (negedge CLK) (0.00:0.00:0.00))

修改SDF文件后,只要输入数据相对于时钟下降沿的建立时间大于0就能满足时序要求,也就不会产生X态。

3.3 添加vcs_cfg文件

除了上面两种方法,VCS仿真器还可以采用编写vcs_cfg文件的方法来对一些特定的单元不检查时序。此方法在编译时要添加命令+optconfigfile+vcs_cfg,该例子中编写的vcs_cfg文件内容为:

instance {top_tb.uut.\clk_cnt[0] } {noTiming};

通过此方法,只对寄存器\clk_cnt[0]不检查时序,不影响其他的逻辑单元。以上三种方法都可以解决后仿真中亚稳态现象出X态的问题,消除X态后的仿真波形图如图6所示,仿真可以正常运行。

图6 消除X态后的仿真波形图

4 结 论

随着FPGA设计的复杂化,时钟频率更高,时钟方案更复杂,对跨时钟域信号做同步处理的方法越来越重要,同时在仿真验证时怎样处理跨时钟域信号也非常关键。本文详细阐述了跨时钟问题产生的原因,平均无故障时间MTBF的影响因素,跨时钟域的同步方法,最后针对具体的FPGA设计,在后仿真时产生亚稳态问题的几种解决方法进行了重点的介绍,通过这些方法,可以使跨时钟域产生的亚稳态问题不影响后仿真验证。

参考文献

[1] CUMMINGS C E. Clock domain crossing (CDC) design & verification techniques using systemverilog [EB/OL]. [2008?09?26]. http://www.sunburst?design.com/papers.

[2] CUMMINGS C E. Synthesis and scripting techniques for designing multi?asynchronous clock designs [EB/OL]. [2012?09?28]. http://www.sunburst?design.com/papers.

[3] 吴厚航.深入浅出玩转FPGA[M].北京:北京航空航天大学出版社,2010.

[4] 吴昆,黄坤,傅勇,等.一种基于格雷码的异步FIFO设计与实现[J].计算机与数字工程,2007,35(1):141?144.

[5] DALLY W J, POULTON J W. Digital systems engineer [M]. UK: Cambridge University Press, 1998.

[6] ARORA Mohit. The art of hardware architecture [M]. New York: Springer Science Business Media Press, 2012.

[7] 杜旭,王夏泉.ASIC中的异步时序设计[J].微电子学,2004,34(5):522?528.

[8] 赵永建,段国东,李苗.集成电路中的多时钟域同步设计技术[J].计算机工程,2008,34(9):247?249.

[9] 徐翼,郑建宏.异步时钟域的亚稳态问题和同步器[J].微计算机信息,2008,24(5):272?275.

[10] 谢修祥,王广生.异步多时钟系统的同步设计技术[J].电子工程师,2005,31(5):33?37.

instance {top_tb.uut.\clk_cnt[0] } {noTiming};

通过此方法,只对寄存器\clk_cnt[0]不检查时序,不影响其他的逻辑单元。以上三种方法都可以解决后仿真中亚稳态现象出X态的问题,消除X态后的仿真波形图如图6所示,仿真可以正常运行。

图6 消除X态后的仿真波形图

4 结 论

随着FPGA设计的复杂化,时钟频率更高,时钟方案更复杂,对跨时钟域信号做同步处理的方法越来越重要,同时在仿真验证时怎样处理跨时钟域信号也非常关键。本文详细阐述了跨时钟问题产生的原因,平均无故障时间MTBF的影响因素,跨时钟域的同步方法,最后针对具体的FPGA设计,在后仿真时产生亚稳态问题的几种解决方法进行了重点的介绍,通过这些方法,可以使跨时钟域产生的亚稳态问题不影响后仿真验证。

参考文献

[1] CUMMINGS C E. Clock domain crossing (CDC) design & verification techniques using systemverilog [EB/OL]. [2008?09?26]. http://www.sunburst?design.com/papers.

[2] CUMMINGS C E. Synthesis and scripting techniques for designing multi?asynchronous clock designs [EB/OL]. [2012?09?28]. http://www.sunburst?design.com/papers.

[3] 吴厚航.深入浅出玩转FPGA[M].北京:北京航空航天大学出版社,2010.

[4] 吴昆,黄坤,傅勇,等.一种基于格雷码的异步FIFO设计与实现[J].计算机与数字工程,2007,35(1):141?144.

[5] DALLY W J, POULTON J W. Digital systems engineer [M]. UK: Cambridge University Press, 1998.

[6] ARORA Mohit. The art of hardware architecture [M]. New York: Springer Science Business Media Press, 2012.

[7] 杜旭,王夏泉.ASIC中的异步时序设计[J].微电子学,2004,34(5):522?528.

[8] 赵永建,段国东,李苗.集成电路中的多时钟域同步设计技术[J].计算机工程,2008,34(9):247?249.

[9] 徐翼,郑建宏.异步时钟域的亚稳态问题和同步器[J].微计算机信息,2008,24(5):272?275.

[10] 谢修祥,王广生.异步多时钟系统的同步设计技术[J].电子工程师,2005,31(5):33?37.

instance {top_tb.uut.\clk_cnt[0] } {noTiming};

通过此方法,只对寄存器\clk_cnt[0]不检查时序,不影响其他的逻辑单元。以上三种方法都可以解决后仿真中亚稳态现象出X态的问题,消除X态后的仿真波形图如图6所示,仿真可以正常运行。

图6 消除X态后的仿真波形图

4 结 论

随着FPGA设计的复杂化,时钟频率更高,时钟方案更复杂,对跨时钟域信号做同步处理的方法越来越重要,同时在仿真验证时怎样处理跨时钟域信号也非常关键。本文详细阐述了跨时钟问题产生的原因,平均无故障时间MTBF的影响因素,跨时钟域的同步方法,最后针对具体的FPGA设计,在后仿真时产生亚稳态问题的几种解决方法进行了重点的介绍,通过这些方法,可以使跨时钟域产生的亚稳态问题不影响后仿真验证。

参考文献

[1] CUMMINGS C E. Clock domain crossing (CDC) design & verification techniques using systemverilog [EB/OL]. [2008?09?26]. http://www.sunburst?design.com/papers.

[2] CUMMINGS C E. Synthesis and scripting techniques for designing multi?asynchronous clock designs [EB/OL]. [2012?09?28]. http://www.sunburst?design.com/papers.

[3] 吴厚航.深入浅出玩转FPGA[M].北京:北京航空航天大学出版社,2010.

[4] 吴昆,黄坤,傅勇,等.一种基于格雷码的异步FIFO设计与实现[J].计算机与数字工程,2007,35(1):141?144.

[5] DALLY W J, POULTON J W. Digital systems engineer [M]. UK: Cambridge University Press, 1998.

[6] ARORA Mohit. The art of hardware architecture [M]. New York: Springer Science Business Media Press, 2012.

[7] 杜旭,王夏泉.ASIC中的异步时序设计[J].微电子学,2004,34(5):522?528.

[8] 赵永建,段国东,李苗.集成电路中的多时钟域同步设计技术[J].计算机工程,2008,34(9):247?249.

[9] 徐翼,郑建宏.异步时钟域的亚稳态问题和同步器[J].微计算机信息,2008,24(5):272?275.

[10] 谢修祥,王广生.异步多时钟系统的同步设计技术[J].电子工程师,2005,31(5):33?37.

时钟 亚稳态 寄存器