AXI VALID READY 握手机制
1. VAILD 和READY 传输方向

2. VAILD 和READY依赖关系
前面说到AXI的五个通道是独立的,但通道间必须保持一定的约定关系:
写回复必须在一次写事务的最后一个写数据之后
读数据必须在接收到读地址信号之后
通道间握手必须满足一定的依赖关系
2.1 读通道

读传输的依赖关系也可以参考上图,其中,单头箭头表示其指向的信号可以在箭头起始信号置起之前或之后置起,也就是说被指向的信号不依赖起始信号;双箭头表示其指向的信号必须在箭头起始信号置起之后置起,也就是说被指向的信号必须依赖起始信号。
1.主机不可以等待从机置起ARREADY以后,来决定是否置起主机的ARVALID,即主机发起ARVALID不依赖ARREADY;
2.从机可以等待(也可以不等待)主机发起ARVALID后再发起ARREADY,即从机发起ARREADY不依赖主机ARVALID;从机可以等待主机置起ARVALID之后置起ARREADY,也可以在主机置起ARVALID之前置起ARREADY
3.从机必须等待主机置起ARVALID 和从机置起ARREADY 之后,才可以置起RVALID,因为要在正确接收到读地址后才能返回数据;
从设备只有在输出有效读数据时才能使能RVALID信号,同时在主设备的RREADY信号有效后的第一个时钟上升沿必须保持有效。即使从设备只有一个读数据源,它也必须在收到数据请求时才令RVALID信号有效。
4.从机在发起RVALID之前不用等待主机发起RREADY,即从机发起RVALID不依赖RREADY;
5.主机可以等待(也可以不等待)从机发起RVALID后再发起RREADY,即主机发起RREADY不依赖从机RVALID;主机可以等待从机置起RVALID之后置起主机的RREADY,也可以在从机置起 RVALID 之前置起主机的RREADY
2.2 写通道

图中WVALID上面的†代表WVALID的发起还依赖WLAST。
对于写传输来说,在写地址和写数据通道上,主机是发送方,从机是接收方;在写响应通道,主机是接收方,从机是发送方,这时的依赖关系是:
1.主机不可以等待从机的AWREADY和WREADY,来置起主机的AWVALID和WVALID,即相互之间不依赖;
2.从机在发起AWREADY/WREADY之前可以等待(也可以不等待)主机发起AWVALID/WVALID,即从机发起READY不依赖主机VALID;
从机可以等待主机置起AWVALID和WVALID之后置起从机的AWREADY,也可以在主机置起AWVALID和WVALID之前置起从机的AWREADY
从机可以等待主机置起AWVALID和WVALID之后置起从机的WREADY,也可以在主机置起AWVALID和WVALID之前置起从机的WREADY
3.从机必须等待WVALID/WREADY/WLAST都发起了,才可以置起BVALID,因为BRESP要在最后一个写数据收到后才能发起;
4.从机不可以等待主机置起BREADY之后再置起BVAILD,即从机发起BVALID不依赖BREADY;
5.主机在发起BREADY之前可以等待(也可以不等待)从机BVALID发起,即相互之间不依赖;主机可以等待从机置起BVALID之后置起BREADY,也可以在从机置起BVALID之前置起BREADY
上面听起来有点像绕口令,其实记住一个大原则就好:发起方不能挑事,接收方有自主权。
在AXI4和AXI5中,写传输增加了额外的从机置起 BVALID 信号所需的依赖,从机必须等待AWVALID,AWREADY,WVALID和WREADY。比起AXI3,BVALID还要依赖于AWVALID和AWREADY。从机要等写地址和写数据都完成以后才可以返回写响应,这在道理上是对的。但是,一般而言,写数据会在写地址前完成。
VALID/READY握手机制是AMBA中一个很重要的机制。正是因为有了这个机制,发送方和接收方都有能力控制传输。协议中花费了大量篇幅来描述VALID/READY。
PS.为什么第一条规则很重要?举个例子,如果主机在发起VALID之前等待从机发起READY,而从机定义的是在发起READY之前等待主机发起READY,这样系统就会陷入死锁。

READY 信号比VAILD 信号先到达的情况
READY 信号先到达:READY 信号很自由,可以等待 VALID 信号到来再做响应,但也完全可以在 VALID 信号到来前就置高,表示接收端已经做好准备了。READY 信号与 VALID 不同,接收方可以置起 READY 之后发现:其实我好像还挺忙,然后拉低 READY 信号。只要此时 VALID 信号没有置起,这种操作是完全可以。

VAILD信号比READY信号先到达的情况
VALID 信号先到达:发送方 VALID 信号早早就到了,这时还不到 T2 时刻,并带来了新鲜的数据(数据通道),地址或者控制信息(地址通道)。但过了 T2 也没见到接收方的 READY 信号。原来是接收方还忙着,可能上一次的数据还没存完,还堵在数据通路上,忙过了 T2 才来。好吧,那也行,T3 时刻传输完成。在这种情况下,接收方通过 READY 信号控制了传输速度,反压了发送速度。
协议规定:VALID 信号一旦置起就不能拉低,直到此次传输完成。对于接收方编程来说,检测到 VALID 信号置起,如果系统正忙,完全可以让发送方等待,发送方在完成传输之前都不会置低 VALID 信号,不需要考虑发送方撤销传输的可能。
协议另外规定:发送方不能在置起 VALID 信号之前就光等待 READY 信号。
从总线接口编程的角度理解:READY 信号可能先到达,如下图的情况。但是发送方编程时,不能依赖 READY 信号先到达的情况。不能将 READY 信号置高作为置高 VALID 的条件,比如将 READY 信号通过组合逻辑生成 VALID 信号。
换句话说,发送方准备发送,置起 VALID 信号是完全主动的过程。接收方按照协议可以依赖发送方,但如果此时发送方也依赖接收方,就会造成死锁的情况,所以协议在这里规定了 VALID 信号的主动性。

VAILD信号和READY信号同时到达的情况
3.同时到达:同时到达就很简单,等到下一个时钟上升沿 T2,传输就这么轻松愉快地完成了,一个时钟周期里就完成了。

VAILD信号与READY信号同时到达的情况
协议建议 AW/AR READY 信号(这里 AW/AR 指的是读写地址通道的 READY 信号)的默认电平为高电平。若默认电平为低,则每次传输至少需要 2 个周期才能完成,第一个周期置高 VALID 信号,第二个周期从机才会置高 READY 信号。相当于每次传输增加 1 个周期时间开销,这在某些情况下会对传输效率有较大的影响。
AXI VALID READY 握手机制的更多相关文章
- AXI总线的工作流程---握手机制
AXI总线的工作流程---握手机制 信息来源 首先分析AXI Master的工作机制 握手机制 CMD和Data的流程图: 写操作流程:write transaction flow read操作的流程 ...
- 加密、签名和SSL握手机制细节
openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.1 背景知识 对称加密 :加密解密使用同一密钥,加解密速度快.随 ...
- 【转载】Socket通讯原理以及TCP、IP三次握手机制分析
要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...
- HTTPS工作原理和TCP握手机制
1.HTTPS的工作原理 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手, 在握手过程中将确立双方加密传输数据的密码信息. TLS/SSL协议不仅仅是一套加密传输的协议, ...
- 简述采用四次握手机制释放TCP连接的四个步骤
(1)源结点A向目的结点B发送连接释放请求(FIN,seg=x),并且不再向B发送数据,但仍继续接收从B发来的数据. (2)目的结点B收到此连接释放请求后立即向A发出确认(ACK,ack=x+1),但 ...
- zedboard如何从PL端控制DDR读写(二)——AXI总线
虽然Xilinx已经将和AXI时序有关的细节都封装起来,给出了官方IP和向导生成自定义IP,用户只需要关注自己的逻辑实现,但是还是有必要简单了解一下AXI的时序,毕竟咱是做硬件设计的. AXI(Ad ...
- AXI总线介绍
原帖地址:https://wenku.baidu.com/view/7c424c17e3bd960590c69ec3d5bbfd0a7956d5b9.html 1.AXI简介 AXI(Advanc ...
- TCP/IP的三次握手和四次分手以及超时机制
使用INADDR_ANY的时候,往往针对多网卡情况,采用tcp连接方式,需要选择使用哪一个网卡发送,自己猜想应该是使用三次握手机制,如何判断目标地址不可达,应该使用的是超时机制,即握手超时则不可到达. ...
- zynq里面的AXI总线(2017-1-11)
在ZYNQ中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议.其中三种AXI总线分别为: AXI4:(For high-performance memory-mapped requir ...
- 关于 AXI协议的学习解释说明
AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture ...
随机推荐
- 关于联想对Jim博士的质疑
对Jim博士质疑的质疑 因为关注司马南,从他的空间里看到Jim博士和其龃龉,大致看了Jim博士头条里的文章,因为看到自己常用的EPICS,上午匆忙就写了上面的文. Jim博士是去年在头条上看到的,因为 ...
- EPICS Archiver Appliance存储waveform记录的尝试
https://blog.csdn.net/u013894429/article/details/79724454 按上面的指导很容易跑起来,试了一下,也能archive短些的waveform记录,很 ...
- ctfshow_web入门 xss
额,怎么说呢,对xss理解不深刻,虽然做了XSS-LAB,但是感觉不会用,看了群主的视频,知道了原因,用群主的话来说就是,X的是自己... 这个文章写得比较潦草... 准备一个带nc的工具: 无vps ...
- layui 父子弹窗数据交互(包含子弹窗自己关闭并给父弹窗数据填充)
//父级弹窗 function showAlertOrg() { layui.use('layer', function () { var body; var index = layer.open({ ...
- forEach、for in 、 for of三者的区别
1.for 原始的遍历: 其实除了这三种方法以外还有一种最原始的遍历,自Javascript诞生起就一直用的 就是for循环,它用来遍历数组 var arr = [1,2,3,4] for(var i ...
- 基于JavaScript的OpenGL 01 之Hello Triangle
1. 引言 本文基于JavaScript语言,描述OpenGL(即,WebGL)的绘制流程,这里描述的是OpenGL的核心模式(Core-profile) 笔者这里不过多描述每个名词.函数和细节,更详 ...
- Postgresql 除法保留小数位
一.示例 select 8/(100-3) as c1, round(8/(100-3) ,4) as c2, round(8/(100-3)::numeric ,4) as c3, 8/(10 ...
- ASP.NET Core - 配置系统之配置读取
一个应用要运行起来,往往需要读取很多的预设好的配置信息,根据约定好的信息或方式执行一定的行为. 配置的本质就是软件运行的参数,在一个软件实现中需要的参数非常多,如果我们以 Hard Code(硬编码) ...
- js类型以及存储方式
一.js内置类型 基础类型:String, number, null, undefine, boolean, symbol, bigint 引用类型:Object(包含普通对象Object,数组对象A ...
- 四点DLT (Direct Linear Transformation) 算法
\(\mathrm{x}_{i}\) 表示变化前的齐次坐标 \(\mathbf{x}_{i}^{\prime}\) 表示变化后的齐次坐标 我们需要求到一个 \(3\times3\) 的变换矩阵 \(\ ...