跨时钟域之全握手

2023-10-11 05:40
文章标签 时钟 握手 之全

本文主要是介绍跨时钟域之全握手,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在跨时钟域(Clock Domain Crossing,CDC)处理时,需要根据源时钟频率,目的时钟频率以及数据是多bit还是单bit数据来选择合适的同步方式。本文主要介绍全握手与半握手处理机制。握手的机制是基于反馈信号进行跨时钟域同步。接下来会详细分析半握手与全握手机制,总结两种握手机制的特点以及适用的场景。

假设有跨时钟域传输的电路如图 1所示,在图中分为trans_module与recv_module两个模块,其中trans_module为发起传输请求的模块,recv_module会根据trans_module的请求来响应传输。

图 1 跨时钟域传输模块电路图

跨时钟域握手传输的时序图如图 2所示。具体传输过程如下:

  1. trans_module将数据准备完毕,将WDATA1输出到twrdata写数据线,并且拉高trans_req,发起一次传输请求。
  2. recv_module通过第一级D触发器(也成同步器,Synchronizer)对trans_req进行同步得到tready_ff1,再经过第二级同步器得到tready_ff2。
  3. 此时recv_module采样到(tready_ff2 == true)因此recv_module可认为twrdata数据已经准备好能够对twrdata传输的数据进行采样得到WDATA1
  4. recv_module可能根据功能计算出要回写的数据,并将要写的数据通过rwrdata数据线发送,此时拉高rack,用于通知trans_module已经成功接收到数据或者要回写的数据已经准备好了。至此已经完成了半握手。
  5. trans_module通过同步器同步recv_module发送过来的rack信号得到rcv_ack_ff2信号,当检测到(rcv_ack_ff2 == true)此时trans_module知道recv_module已经成功收到数据,并且回写的数据已经准备好了,能够对rwrdata数据线采样得到RDATA1。
  6. 将trans_req拉低,表示trans_module已经接收到recv_module回写的数据。
  7. recv_module采集经过同步器同步的tready_ff2为低时拉低rack信号,此时recv_module知道trans_module已经成功接收到回写的数据
  8. trans_module检测到rcv_ack_ff2为低电平,此时本次传输已经结束,能够进行下一轮传输。即根据需求重新发起trans_req

 

 

图 2 跨时钟域握手机制时序图

 

为进一步验证上述理论,分别仿真快时钟域向慢时钟域发起传输请求与慢时钟域向快时钟域发起传输请求的全握手传输实验。结果如图 3图 4所示,从波形图中能看到数据均被正确传输。

图 3 慢时钟域向快时钟域传输

 

图 4 快时钟域向慢时钟域传输

 

 

问题讨论:

  1. 图 2中展示的时慢时钟域到块时钟域传输的过程,那么当快时钟域向慢时钟域进行数据传输时,握手的方法仍然适用吗?

为了详细说明快时钟域向慢时钟域传输数据,根据握手传输的机制能够得到如图 5所示时序图。从图中能够明显发现全握手方式不论是快时钟域到慢时钟域还是慢时钟域到块时钟域均能够处理跨时钟域问题

图 5 快时钟域向慢时钟域同步

 

  1. 当传输过程描述中e)阶段已经trans_module已经成功将数据写入到recv_module,并且已经接收到recv_module回写的数据,此时能否进行下一轮新的传输?

如果传输时情况是慢时钟域发起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小哥哥的杂货铺会不定期的更新关于PFGAIC设计、模拟电路、嵌入式编程等学习心得,期待小伙伴的关注与点赞,I need U

这篇关于跨时钟域之全握手的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185945

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

油表加速器时钟屏保 就是这么酷酷的

太酷了!这个时钟屏保太有个性了!油表加速器时钟屏保,模拟汽车加速表盘,非常有质感,用它做屏保,简直就是酷毙了~!今天小编给大家分享一个非常实用好看的时钟屏保(芝麻时钟),官网地址(https://clock.zhimasoft.cn/?bili) 芝麻时钟-油表加速器时钟屏保 我们一起来看下,油表加速器表盘时钟屏保是怎么设置的? 1、打开芝麻时钟软件,找到"时钟屏保"菜单,点击后打开;(

彩虹数字屏保时钟 芝麻时钟开启个性化的时代 屏保怎么能少它

彩虹数字屏保时钟 芝麻时钟开启个性化的时代 屏保怎么能少它?电脑屏保多样化,让大家有了更多的选择,让更多人有机会把自己的电脑打扮得漂漂亮亮,今天小编给大家推荐:芝麻时钟(官网下载地址:http://clock.zhimasoft.cn/?bili),一起看下怎么开启彩虹数字时钟屏保吧! 彩虹数字屏保时钟 1、先下载芝麻时钟到电脑,可以百度,或者微软应用商城搜索“芝麻时钟”下载;

STM32CubeMX 1 创建一个新工程 利用时钟点亮LED KEIL5 Jlink配置

直接上ST的官网下载STM32CubeMX安装 地址: 单片机:STM32F103C8T6 带外部8MHz晶振 目的:利用Timer和使LED按照1Hz的频率闪烁。 在此方面学霸级人物的指引下学习了,并写此文章记录,以防忘记。 新建工程 出现如下界面,中央就是这个封装的引脚图: 接下来开始配置 1. 设置外部晶振接口在PD0和PD1 单机想要配置的引脚,出现选择菜单。

TCP三次握手详解!

TCP(Transmission Control Protocol) 传输控制协议 三次握手 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) UR

Android AnalogClock TextClock DigitalClock Chronometer 时钟 定时器

AnalogClock 相关属性:  android:dial="@drawable/img1" //表盘android:hand_hour="@drawable/alert_dialog_icon" //时针android:hand_minute="@drawable/alert_dialog_icon" //分针 TextClock 相关属性: android:f

RP2040 C SDK clocks时钟源配置使用

RP2040 C SDK clocks时钟源配置使用 🌿RP2040时钟源API函数文档:https://www.raspberrypi.com/documentation/pico-sdk/hardware.html#group_hardware_clocks 🍁RP2040时钟树: 系统时钟源可以来自外部时钟输入(external clocks)、 晶体振荡器(XOS

分布式系统理论基础三-时间、时钟和事件顺序

GitHub:https://github.com/wangzhiwubigdata/God-Of-BigData 关注公众号,内推,面试,资源下载,关注更多大数据技术~大数据成神之路~预计更新500+篇文章,已经更新50+篇~ 现实生活中时间是很重要的概念,时间可以记录事情发生的时刻、比较事情发生的先后顺序。分布式系统的一些场景也需要记录和比较不同

Linux学习笔记12---主频和时钟配置实验

本章学习 I.MX6U 的时钟系统,学习如何配置 I.MX6U 的 系统时钟和其他的外设时钟,使其工作频率为 528MHz ,其他的外设时钟源都工作在 NXP 推荐的频率。  1、MX6U 时钟系统详解          I.MX6U 的系统主频为 528MHz,有些型号可以跑到 696MHz,但是默认情况下内部 boot rom 会将 I.MX6U 的主