赞
踩
在跨时钟域(Clock Domain Crossing,CDC)处理时,需要根据源时钟频率,目的时钟频率以及数据是多bit还是单bit数据来选择合适的同步方式。本文主要介绍全握手与半握手处理机制。握手的机制是基于反馈信号进行跨时钟域同步。接下来会详细分析半握手与全握手机制,总结两种握手机制的特点以及适用的场景。
假设有跨时钟域传输的电路如图 1所示,在图中分为trans_module与recv_module两个模块,其中trans_module为发起传输请求的模块,recv_module会根据trans_module的请求来响应传输。
图 1 跨时钟域传输模块电路图
跨时钟域握手传输的时序图如图 2所示。具体传输过程如下:
图 2 跨时钟域握手机制时序图
为进一步验证上述理论,分别仿真快时钟域向慢时钟域发起传输请求与慢时钟域向快时钟域发起传输请求的全握手传输实验。结果如图 3图 4所示,从波形图中能看到数据均被正确传输。
图 3 慢时钟域向快时钟域传输
图 4 快时钟域向慢时钟域传输
问题讨论:
为了详细说明快时钟域向慢时钟域传输数据,根据握手传输的机制能够得到如图 5所示时序图。从图中能够明显发现全握手方式不论是快时钟域到慢时钟域还是慢时钟域到块时钟域均能够处理跨时钟域问题。
图 5 快时钟域向慢时钟域同步
如果传输时情况是慢时钟域发起trans_req请求,那么当trans_module采集到rcv_ack_ff2为高拉低trans_req一个时钟周期后就可以进行下一轮请求,不必等到rcv_ack_ff2为低。但是当传输时快时钟域发起trans_req的情况如果trans_module不等待rcv_ack_ff2为低就发起新的请求就可能存在trans_req拉低被recv_module漏采,因此需要根据实际情况选择传输方式。
本问题能够进一步讨论半握手方式与全握手方式。半握手方式适用于慢时钟域向快时钟域发起trans_req请求的情况,半握手传输效率比较高,能够比较快的完成数据传输的握手操作,但是半握手是单向的数据传输,当需要回写数据时,应该采用全握手,或者回写数据方作为半握手传输的发起方。对于快时钟域向慢时钟域发起trans_req,或者两个时钟域时钟速度完全不确定的情况下适合全握手方式。
别走开,Jayden小哥哥有话说,仿真工程与源码可扫描二维码关注公众号鼓捣猫尼回复“全握手工程源码”获得(不要引号)。在Jayden小哥哥的杂货铺会不定期的更新关于PFGA、IC设计、模拟电路、嵌入式编程等学习心得,期待小伙伴的关注与点赞,I need U。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。