跨同步时钟域-FPGA常见问题社区-FPGA CPLD-ChipDebug

跨同步时钟域

还是整点现成的发发,有些东西看的是真的头晕脑胀
对于起源于同一时钟的多个时钟,并且它们的相位和频率关系已知,这些时钟可以看成跨同步时钟域时钟,考虑数据发送端时钟和接收端时钟的相位和频率关系

图片[1]-跨同步时钟域-FPGA常见问题社区-FPGA CPLD-ChipDebug

可以分为:
1、同频-零相位差时钟
同频-零相位差,即两个时钟相同。如下图所示,无论是clk1还是clk2作为发送端时钟,经过一个周期接收端采样数据,因此只要保证触发器之间的组合逻辑延迟能够满足建立保持时间即可

图片[2]-跨同步时钟域-FPGA常见问题社区-FPGA CPLD-ChipDebug

2、同频-相位差恒定时钟
此时,相当于时钟信号的平移,数据的发送时刻和接收时刻的时间差是恒定的,因此同样保证组合逻辑延迟满足要求即可,只不过要求相比零相差更为严格

图片[3]-跨同步时钟域-FPGA常见问题社区-FPGA CPLD-ChipDebug

3、非同频、可变相位差时钟
当频率不相等时,相位差将是时间的函数,即可变。由于初始相位可以认为延时的多少,两个时钟的频率会给相位差带来更多的变数。以频率进一步划分问题:
3.1整数倍频率时钟
整数倍频率,意味着慢时钟的一个周期内,快时钟至少有2个以上的完成周期,此时时钟沿之间的相位差也是周期的,如下图所示,在clk2的一个周期后,将重复上一个周期。
当发送端为快时钟,不增加额外的逻辑,接收方在一个采样周期内数据将多次改变,因此需要将数据保持一个接收端时钟周期稳定,变相地减慢了数据发送速度,可采用FSM。
当发送端为慢时钟时,不增加额外的逻辑,接收方将多次采样重复的数据,不过,采样时钟能够有一个周期用于传输数据

图片[4]-跨同步时钟域-FPGA常见问题社区-FPGA CPLD-ChipDebug

3.2 非整数倍频率时钟 
不妨考虑简单情况,如下图所示,假设发送方频率为3,接受方频率为2,不难看出,此时数据会丢失(接收方的一个时钟周期内,数据会多次变化),并且边沿的相位差总是变化的(与m有关)

图片[5]-跨同步时钟域-FPGA常见问题社区-FPGA CPLD-ChipDebug

现考虑亚稳态问题。首先,边沿的差值依然是有限个取值,经过两个时钟周期的最小公倍数,两个时钟的相位将重复。
  • 当这些边沿差值都足够大,即接收端的采样沿和发送端的边沿的时间差足够大,能够满足建立保持时间时,不会产生亚稳态。如下图所示,clk1周期为15ns,clk2周期为10ns,最小相位差是2.5ns,足够满足建立保持时间。

图片[6]-跨同步时钟域-FPGA常见问题社区-FPGA CPLD-ChipDebug

此时,在跨时钟的位置应避免使用组合逻辑。
  • 当边沿差值常小,导致亚稳态此时在再次出现差值非常小之前,接下来几个周期时钟沿之间的差值能够有足够的裕量。如下图所示,clk1为发送方,clk2为接收方,A1为发送数据,B1是接收的预期输出,实际接收输出为B2。圈中部分两个边沿十分接近,导致亚稳态。

图片[7]-跨同步时钟域-FPGA常见问题社区-FPGA CPLD-ChipDebug

  • 当边沿差值在许多连续的周期中都非常接近,与异步时钟很相似。此时,问题更加严重,延迟一个周期接收,数据也不稳定

    图片[8]-跨同步时钟域-FPGA常见问题社区-FPGA CPLD-ChipDebug

请登录后发表评论

    没有回复内容