跨时钟域处理所用到的同步器

来源:互联网 发布:上海大学 乐乎 编辑:程序博客网 时间:2024/05/10 20:57

本知识来自《Verilog编程艺术》作者:魏家明 一书


同步器基本上分为三种:电平同步、边沿检测和脉冲检测


电平同步:

简单的电平同步有两个触发器串联而成,中间没有其他组合电路。这种设计可以保证后面触发器使用前面触发器的输出时,前面触发器已经退出亚稳态,并且输出已经稳定。设计中要注意将两个触发器放得尽可能近,以确保二者之间有最小的时钟偏差。

为了使同步能正常进行,从原时钟域传来的信号应先通过原时钟域上的一个触发器,然后直接进入同步器的第一级触发器中(不能经过两个时钟域间的任何组合逻辑)。这一要求非常重要,因为同步器的第一级触发器对组合逻辑所产生的毛刺非常敏感。如果一个足够长的毛刺正好满足建立/保持时间的要求,那么同步器的第一级触发器将会将其放行,就给新时钟域的后续逻辑送出一个虚假信号。


脉冲同步:

脉冲同步检测同步器的输入信号是一个单时钟宽度脉冲,它触发原时钟域中的一个翻转电路。每当翻转电路接收到一个脉冲时,它就会在高、低电平间进行转换,然后通过电平同步器输出的信号到达异或门的一个输入端,而这个输出的信号再经过一个时钟周期的延迟进入异或门的另一端,翻转电路每转换一次状态,这个同步器的输出端就产生一个单时钟宽度的脉冲。

脉冲同步的基本功能是从某个时钟域取出一个单时钟宽脉冲,然后在新的时钟域中建立另一个单时钟宽度的脉冲。脉冲同步的限制,即输入脉冲之间的最小间隔必须等于两个同步器时钟周期。如果输入脉冲相互过近,则新时钟域中的输出脉冲也紧密相邻,结果是输出脉冲宽度比一个时钟周期宽。当输入脉冲时钟大于两个同步器时钟周期时,这个问题更加严重。这种情况下,如果输入脉冲相邻太近,则同步器就不能检测到每个脉冲。


同步多位数据:

有时候需要将多位数据从一个时钟域传送到另一个时钟域,然后再使用。此时不能使用多位电平同步器直接同步多位数据,然后就直接使用这些位的同步结果,因为这样根本就起不到同步作用,这些多位数据在新时钟域里可能不是在同一个时钟沿更改的。我们也不能使用脉冲同步器同步多位控制位,因为同步后的多位控制位可能根本就是错乱的。


同步多位数据应该按照下面的步骤进行:

1、确保in_data在传送期间不会发生改变,所以尽量采用寄存器输出。

2、使用脉冲检测同步器,传送in_clk域的脉冲in_pulse到out_clk域的out_pulse,通知多位数据in_data已准备好。

3、在out_clk域检测到out_pulse之后,才把in_data直接锁存到out_data中。

0 0
原创粉丝点击