赞
踩
只要FPGA设计中的所有资源不全属于一个时钟域,就可能存在跨时钟域问题。发送跨时钟域问题的必要条件是不同时钟域之间存在信息交互。
由于时钟频率等的不同,导致总有些时候,一个时钟的有效沿会采样到另一个时钟域信号的不稳定态,因此,应该采用恰当的方法来确保当我们跨时钟域取信号的时候,当前时钟的有效沿不会采样到另一个时钟域的不稳定态,就可确保FPGA设计的各个时钟域之间能够正常的通信。
当一个高频率时钟域需要使用一个非它时钟域内的电平信号时,强烈建议采用两级采样法来确保设计行为的正确性和一致性。
两级采样法是异步信号同步化的一个基本方法。
为什么要采样两次呢?
原因(FPGA面试题里面也提到了):进行第一级采样的那个寄存器,其建立和保持时间无法得到满足,因此会出现问题。
FPGA内部的工作电压一般是1.5V,理想情况下,逻辑1对应电压1.5V,逻辑0对应电压0V。但是现实中,很难达到1.5V,所以为什么触发器正确的输出的前提是输入信号要满足其建立和保持时间要求。原因在于:要给数字电路充足的时间进行充电或放电操作,从而让输出的逻辑1更接近于1.5V,逻辑0更接近于0V。
如果输出unsafe signal的触发器,很可能出现建立或保持时间要求不满足的情况,那么它的充放电操作不充分,那么其物理电压的扇出能力就会很差,导致后续电路用到这个信号的地方,物理电压会降低,变成0.4V、0.5V、0.55V等,从而被不同的触发器认为不同的逻辑电平。
握手法适用于间歇的、不连续的、频率较低的数据传递。
如果时钟域A要向时钟域B传递数据,可以采用下列步骤:
对于时钟域A:
step1:将要传递的数据用一个寄存器dataA寄存,然后保持该寄存器的输出不变。
step2:等待至少一个时钟周期后,将寄存器AOK设置为逻辑1,并保持至少相当于1个B时钟域周期的时间长度。
step3:释放AOK为逻辑0
step4:等待至少一个周期后,如果有新的值需要传递,则更新dataA后重复2/3/4.
对于时钟域B:
如果AOK为1,则将dataA的输出用本时钟域的dataB寄存器寄存。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。