本篇文章转载自一道Nvidia的面试题

Valid-Ready Handshake

Valid-Ready是非常常见的握手协议,我们熟悉的AXI总线的核心就是Valid-Ready协议。Valid-Ready协议的时序图如下图

Sender 来驱动valid信号和payload也就是data信号,Receiver接受valid和data,返回给Sender ready信号。当Sender有数据要传输的时候,Sender就把valid拉高,并且保持住valid为高期间要传输的data必须保持稳定,等到Receiver拉高了ready,保持至少一个周期,那么我们就说握手完成,数据从Sender传输到了Receiver。 简单来说,只有当valid和ready同时为高的时候,数据在这个周期传过去。

Valid-Ready是适合高性能传输的协议,只要Receiver可以持续接收数据,那么可以一直将ready拉高,而如果Sender也持续有数据发送,那么可以在看到ready为高之后的周期继续驱动valid为高来传输下一个数据,这样相当于每一个周期都可以有数据从Sender传至Receiver,中间可以没有bubble。这也就是为什么AXI总线选择了Valid-Ready握手协议。

Valid-Ready在设计中有一点要注意:
对于Sender来说,不能依据ready来决定要不要拉高valid;
对于Receiver来说,不能依据valid来决定要不要拉高ready;

也就是说,对于Sender来说,只要你有数据要传输,你就应该拉高valid,而不要管ready是不是1。同理,对于Receiver来说,只要你可以接收数据,你就应该拉高ready,而不要管valid是不是1。如果不满足上面的要求,你很可能遇见Sender和Reciever互相等待彼此而数据无法传输的死锁现象。老李当年就犯过这个错误,很不幸,和老李设计模块通信的另一个模块也犯了这个错误,发生了如下的对话:
老李:你ready为0,说明你没准备好接受啊,那我就不给你valid信号;
老陈:我ready为0又不是说我真没有准备好,你只要有data给我,我只要看到你valid为高我的ready自然就立刻为高了。
老李:。。。

4-phase Handshake

4-phase handshake其实源自asynchronous design这个大的领域,简单说就是没有时钟驱动,数据的传输都是基于握手。但是老李在实际工作中发现,4-phase handshake其实在有时钟的IP设计中也经常用到,是一个常见且很robust的握手协议。
这个握手协议的时序图如下,方便描述,我这里还是画出了时钟clock

其中Sender来驱动req和data,Reciever来驱动ack。之所以叫4-phase,是指以下4个phase:
phase1: sender和receiver都是idle状态,req和ack都为0;如上图的cycle 0, 1
phase2: sender拉高req,等待receiver的ack为高,同时驱动要传输的数据,并保持住; 如上图的cycle 2, 3
phase3: receiver拉高ack,此时req和ack同时为高;表示receiver已经接受到了数据;如上图的cycle 4
phase4: sender看到了ack,知道数据传输完成,于是拉低req。如上图cycle 5
最后receiver看到req被拉低,从而也拉低ack,回到phase1,即上图的cycle 6, 7。
也就是每一次传输数据,都需要经过a->b, b->c, c->d的顺序变化。和valid-ready协议有相似点,但是也有不同点。

相似点:req(valid)变高的时候,sender就需要drive valid data

不同点valid-ready的valid在传输完一个数据之后可以不拉低,在下一个周期紧接着传输下一个数据,但是4-phase handshake必须要走完4个phase,即看到ack为1了之后必须要将req拉低,否则receiver的ack也不会拉低,receiver也不会认为一个新的传输开始。
由于4-phase handshake必须要走完4个phase,每次完整的握手只能传输一次数据,所以这种握手协议并不适用需要高速高吞吐率的数据传输。适用的场合更多的是对于数据传输延时要求不高,但是对于稳定性要求高的场合,即不能错过data。其实有的时候其实也不需要传输真正的data, req/ack本身可以自带一个握手的意义,表示完成一次握手,req/ack可以用来直接控制sender和receiver的状态机。

2-phase Handshake

理解了4-phase handshake, 2-phase handshake就很直观,直接上图

区别在于,2-phase handshake没有了phase3, phase4。当ack为1时,就认为第一次传输结束了。这个时候sender不需要drop req。只有当sender要继续发下一个数据的时候,才需要drop req,而receiver同样以toggle ack来表示数据接收成功。

这样我们看到,其实每一次req的翻转表示一次传输,不论是从0变到1,还是从1变到0。和4-phase handshake相比,在一个完整的4个phase里可以传输2次数据。

由于4-phase 要求req/ack握手结束后都要回到0,所以也称作RTZ(Return- to-Zero)协议。而2-phase的一次握手结束req/ack并不会回到0,所以也称作NRZ(Non-Return-to-Zero)。

2-phase尽管传输速度快,但是设计起来稍微复杂一点,因为要进行edge detection,同时由于每次req 翻转都代表了一个新的传输,所以sender和receiver的初始复位关系要很仔细地设计,否则容易产生一个不期望的garbage传输。

数字芯片设计中常见的三个握手协议相关推荐

  1. 数字芯片设计中的时钟分频电路,你了解多少?

    时钟分频电路在数字芯片设计中非常常见,而且也非常重要,正确的符合要求的数字分频电路对功能的正确与否至关重要.现在数字电路设计中的时钟分频主要包括以下几种方法: 1.寄存器分频 寄存器分频就是利用寄存器 ...

  2. Linux内核中影响tcp三次握手的一些协议配置

    在Linux的发行版本中,都存在一个/proc/目录,有的也称它为Proc文件系统.在 /proc 虚拟文件系统中存在一些可调节的内核参数.这个文件系统中的每个文件都表示一个或多个参数,它们可以通过 ...

  3. Git工作流中常见的三种分支策略:GitFlow、GitHubFlow和GitLabFlow

    摘要:聊一聊Git中的工作流--分支策略. 本文分享自华为云社区<Git工作流中常见的三种分支策略:GitFlow.GitHubFlow以及GitLabFlow>,原文作者:敏捷的小智. ...

  4. 分布式事务中常见的三种解决方案

    分布式事务中常见的三种解决方案 目录 一.分布式事务前奏 二.柔性事务解决方案架构 (一).基于可靠消息的最终一致性方案概述 (二).TCC事务补偿型方案 (三).最大努力通知型 三.基于可靠消息的最 ...

  5. 虚拟化中常见的三种硬盘模式

    虚拟化中常见的三种硬盘模式 1.厚置备延迟置零: 默认的创建格式,创建过程中为虚拟磁盘分配所需空间.创建时不会擦除物理设备上保留的任何数据,没有置零操作,当有IO操作时,需要等待清零操作完成后才能完成 ...

  6. 网络协议:简析三次握手协议

    一,简析三次握手协议 首先来看我们生活中很常见的一件事: 在我们网购的时候,常常会跟客服这样聊天:我们向客服询问某件事,客服回答,然后我们断网了...过了一会儿,我们再登陆就收到了客服的回答. 这个交 ...

  7. 【网络】tcp三次握手协议

    原理: http协议实例:   第一次握手: 114(client)向服务方207(server)发送Connection establish request请求(SYN): 此时随机产生的seque ...

  8. C语言网络编程——三次握手协议

    三次握手协议:为应用程序提供可靠的通信连接 在利用TCP实现客户机与服务机的通信时,为了确保TCP连接的成功建立,采用三次握手协议. (1)第一次握手:Client将标志位SYN置为1,随机产生一个值 ...

  9. 数字芯片设计中的面积优化方法

    前言:数字芯片设计工程师在设计的时候要考虑三个方面,PPA,即Performance.Power和Area.本文讲解在实际项目中,如何对前端面积进行有效优化. 理论方法 本文首先参考书籍<FPG ...

最新文章

  1. c语言如何初始化随机数种子,关于随机数函数rand和其种子初始化
  2. 关于JS中switch语句的判断条件!
  3. Jackson 注解 -- 自定义输出格式
  4. python图片批量处理器_用python给图片批量打水印
  5. git clone 指定分支的内容
  6. fastify 后台_如何使用Fastify启动和运行
  7. Win系统 - 笔记本电脑之耳机插入没声音
  8. 2023杭州电子科技大学考研分析
  9. 拒绝6家公司offer,最后降薪入职小公司感叹:不要追求高薪去跳槽!
  10. 【Day5.6】当地人的美食街
  11. Flurry使用初级教程
  12. 常毅 华为计算机,华为路由器交换机配置.docx
  13. matlab利用已知数据画图三维,Matlab三维数据画图和等高线数据提取
  14. 进销存设计中的库存设计
  15. 智能手机全球普及率今年有望达到63%
  16. 387:字符串中的第一个唯一字符
  17. 3303——鬼吹灯之牧野诡事(图的遍历)
  18. 如何写一个好的项目策划
  19. python pandas dataframe函数_Pandas的DataFrame列操作
  20. 强烈推荐-在线文件格式转换

热门文章

  1. 【暴寒】爆笑植物大战僵尸四格漫画
  2. java手机飞行模式_今天才发现,原来手机的飞行模式这么厉害,每天晚上都能用上...
  3. Vuejs——(9)组件——props数据传递
  4. 12月5日科技资讯|iPhone 用户流失令人担忧;.NET Core 3.1 发布
  5. 微信小程序图片压缩 wx.createSelectorQuery wx.canvasToTempFilePath
  6. 勒索软件:进化、分类和防御解决方案综述
  7. 学生不出国留学考托福有用吗
  8. SSM+Shiro的DEMO
  9. 实习了两个月了,说说感悟吧..
  10. Python color logging