cdc多bit信号-握手处理

cdc多bit信号-握手处理_第1张图片
对于多bit数据跨时钟,各个bit之间路径延迟不一样,源时钟域给的数据是2‘b11,目的时钟域采样到的数据可能2’b10。因此两级触发器对于单bit数据跨时钟是可以用的,但是对于多bit数据跨时钟就会出错。
cdc多bit信号-握手处理_第2张图片
握手处理的关键是利用源的时钟req和目的时钟ack,在一段时间让需要跨时钟的多bit信号保持不变,至少在目的时钟采样时保持不变。当然req和ack在跨时钟时也要两级寄存器处理,并且不能是窄脉冲信号,需要是有一定宽度的电平信号,否则慢时钟就有可能采样不到快时钟的req。
cdc多bit信号-握手处理_第3张图片

cdc多bit信号-握手处理_第4张图片

cdc多bit信号-握手处理_第5张图片
下面的2-phase更高效,因为它只有src_req翻转一次(ack翻转一次)就开始握手并传输数据一次。
cdc多bit信号-握手处理_第6张图片
4-phase的例程代码。发送端需要检测ack的下降沿(打两拍+一拍),才会更新发送端的数据(cnt加1),并且确定了ack下降到0才会把req置1,开始下一次握手。
cdc多bit信号-握手处理_第7张图片
cdc多bit信号-握手处理_第8张图片
cdc多bit信号-握手处理_第9张图片
接收端是把req打两派就可以接收数据了,只要req为1就接收数据。
cdc多bit信号-握手处理_第10张图片
cdc多bit信号-握手处理_第11张图片
模块cdc_sync就是打两拍处理。

你可能感兴趣的:(Verilog,fpga,verilog)