跨时钟域信号处理
在FPGA多个时钟域信号通信时候,可能存在异步时钟域的问题,异步时钟域涉及两个时钟之间可能存在相位差,可能也没有频率关系即不同频不同相。 如果两个异步时钟域频率关系不确定,那么触发器之间的建立时间和保持时间也无法保证,如果违背建立时间或者保持时间,接收域会出现亚稳态的数据。
对于异步时钟域的通信,要实现同步。
1 使用专用握手信号
握手协议方式处理跨时钟域数据传输时,只需要双方的握手信号分别使用脉冲检测方法进行同步。专用握手信号握手就是通信双方使用了专用控制信号进行状态指示,控制信号既有发送域给接收域,使用握手协议处理跨时钟数据传输时,只需要双方的握手信号分别使用脉冲检测方法进行同步。
思想:发送域先把数据放入总线,然后发送有效的req信号给接收域。接收域检测到有效的req信号后锁存数据总线,然后回送一个有效的ack信号,表示读取完成应答。发送域在检测有效ack后撤销req信号,接收域在检测到req撤销时也撤销ack信号。此时完成一次正常的握手通信。
2 亚稳态 使用逻辑同步处理机制
信号传输都会有一定的时序要求,从而保证每个寄存器将捕获的输入信号正常输出,为了保证可靠的操作,输入寄存器的信号必须在寄存器建立时间之前保持稳定,并且持续到时钟沿之后的某段时间 保持时间,而该寄存器的输入反映到输出需要经过一定的延时,时钟到输出的时间。如果数据信号的变化违反了建立时间或者保持时间的要求,那么寄存器的输出就会处于亚稳态,此时寄存器的输出在高电平和低电平之间盘旋一段时间。这也意味着寄存器的输出达到一个稳定的高或者低的时间会大于 时钟到输出的时间。
这样的话数据输出时还不稳定。
在同步系统中,输入信号总是能达到寄存器要求,亚稳态不会发生,在跨时钟信号传输中,由于数据信号可能在任何时间到达异步时钟域的目的寄存器,所以设计者无法保证建立时间和保持时间的要求。
如果数据信号的变化发生在时钟沿的某段时间之后,输出信号值不变。如果数据信号的变化在建立时间之前并且保持到保持时间之后,那么数据达到稳定。然而一个寄存器的输入数据违反了建立时间或者保持时间,就会延长从时钟变化到输出数据达到稳定状态的时间。超过了寄存器的固有时间。
如果输出信号在下一个寄存器捕获数据前,处于一个稳定的有效状态,那么亚稳态信号不会对系统造成影响。但是如果亚稳态信号在下一个寄存器捕获数据时仍然盘旋在高低电平之间,那将会对系统后续电路产生影响。
解决方法:同步寄存器链的寄存器都由相同的时钟触发,链中第一个寄存器由不相关的时钟或者是异步的时钟来触发。一般用两级的同步寄存器链。
3 借助于存储器
存储芯片内部有一套晚上同步处理机制。 借助于存储器来完成跨时钟域通信也时常用的手段,两个处理器之间通过双口RAM 或者fifo完成数据的交换。 用两个fifo设计的SDREAM控制器 写入端和读出端各使用一个异步fifo,既解决了数据缓存问题,又解决了跨时钟域的信号传输。