关于跨时钟域的同步问题
时间:10-02
整理:3721RD
点击:
对于电平信号跨时钟域的情况,可以用寄存器打两拍,这个我知道。之前偶然听人说过,在同步的时候,直接打两拍,不需要复位(大概类似于下面的代码这样),不知道这个是什么意思?为什么不用复位呢?以及,不知道大家是怎么做的?
我说的是FPGA嗯……
always @ (posedge clk2)
begin
data_r1 <= data;
data_r2 <= data_r1;
end
我说的是FPGA嗯……
always @ (posedge clk2)
begin
data_r1 <= data;
data_r2 <= data_r1;
end
为什么要复位?
如果是数据流信号的delay,可以不用复位,因为初始态不影响数据流;如果是控制流的delay,需要加复位,因为上电初始化的状态有可能影响控制状态
感谢~
那如果我给控制信号设置了初值,是不是就不用复位了呢? FPGA可以设置配置完成后的初值。
NICE
如果只是简单的子模块设计,你可以这么做;如果是一个大的多模块设计,或者需要由几个人合作完成的设计,不就有风险了?我的建议是不要再任何地方留不确定性
好的,谢谢。因为之前看到过说Xilinx推荐能不用复位就不用复位,虽然不太明确这个能不用复位是什么情况……
不同的应用场合处理不同,不需要复位的情况一般在数据流应用的时候,但是比如你做FIFO的格雷码同步就必须要初始化了
多谢!
对于这种跨时钟域的问题,还是要分情况的,不能一概用这个打连拍的逻辑来完成
是的
同步复位信号的话,第二级寄存器不用接复位;异步复位的话,都接上。
打两拍是为了信号稳定可靠,和复位没有直接关系吧。
