文章目录
前言
本章主要总结axi协议知识
一、AXI 双向握手机制简介
AXI标准协议有五路独立的数据通道(分别为读数据通道,写数据通道,读地址通道,写地址通道,写回复通道),每一路数据通道都遵循双向握手机制,即使用VALID和READY信号作为控制信号来传输数据,只有VALID与READY同时为高的时候,才可以正常的发送数据,而通常情况下,VALID信号用来表示什么时候“地址、数据、和控制信号”是有效的,而READY信号则用来表示什么时候从设备准备好采集数据了。
1.信号列表
AXI标准协议中,双向握手信号合计十个,无论是主设备还是从设备,这十个信号都对应于五个输入信号,五个输出信号
数据通路 | 握手信号对 |
---|---|
写地址通路 | AWVALID,AWREADY |
写数据通路 | WVALID,WREADY |
写回复通路 | BVALID,BREADY |
读地址通路 | ARVALID,ARREADY |
读数据通路 | RVALID,RREADY |
2.双向握手目的
握手:目的是控制数据在总线上的流动和采样
双向:目的是主设备和从设备都可以控制总线数据流动
3.握手过程
顺着双向握手的目的,我们可以引申出三种情况,READY信号先于VALID信号改变,READY信号与VALID信号同时改变,READY信号晚于VALID信号改变。分别进行讨论
case1 (READY信号先于VALID信号改变)
READY信号的拉高,代表从设备准备好采样了,但T2时刻,VALID未拉高,因此未进行采样,而T3时刻,VALID拉高了,完成握手,数据传输。
这种情况下,如果我们将目光对向主设备,会发现,从设备在主设备发送数据前就做好了接受的准备,当主设备VALID后,时钟上升沿就完成了接受。(即数据传输发生在一个时钟周期内)
case2(READY信号与VALID信号同时改变)
VALID信号与READY信号同时拉高,表明数据有效的同时也可以进行采样,在T2时刻的上升沿,采样到正确数据,握手正确,再往后二者都拉低,数据进行了正确传输。
case3(READY信号晚于VALID信号改变)
VALID信号先拉高,表明数据正确,再往后READY拉高,表明可以进行采样,T3时刻进行了采样,采样后,完成握手,再往后二者信号都拉低,这种条件下,数据也进行了正确的传输。
总结
对于上面的讨论,我们可以发现这三种情况,都可以顺利完成握手,同时,协议同样规定,“VALID信号一旦拉高,除非READY信号拉高接收数据完成,不会主动变低”,而双向握手信号的约束关系,远不仅限于此。
4.数据通路的握手要求
以下的叙述包含两个前提:
- 1.默认READY和VALID信号为低,有效时为高。
- 2.同时,叙述中VALID等待READY的表达,实际的意思为在VALID拉高后的时钟上升沿,检测READY是否为高,若为高,完成握手,并不代表VALID与READY的拉高顺序。
读数据通路
在一个burst读传输操作时,从设备在数据有效时置高RVALID,一旦置高,RVALID需要等待RREADY信号拉高,完成握手,进行数据传输
读地址通路
主设备,在地址信号和控制信号有效时置高ARVALID,一旦置高,需要等待从设备的ARREADY信号置高,完成握手,进行数据传输。
写数据通路
在burst写传输时,主设备在写数据有效时置高WVALID信号,从设备在准备好接受时拉高WREADY信号,完成握手。
写地址通路
主设备在地址信息与控制信息有效时,拉高AWVALID,拉高后AWVALID等待从设备拉高AWREADY,完成握手,进行数据传输
写回复通路
从设备在数据有效时,拉高BVALID,一旦拉高,BVALID需要等待BREADY信号拉高后完成握手,进行数据传输。
总结
针对于数据通路的握手要求,首先需要强调的是:我们在这里默认READY信号和VALID信号为低电平,仅是为了方便表述。在实际工程项目中,也可以默认他们为高电平,拉低有效,完成握手,即READY与VALID信号的有效电平为高或低均能满足要求。
其次,对于不同的数据通路,有的时候是主设备操控READY信号,有的时候是从设备操控READY信号,需要根据数据通路进行区分。
5.不同数据通路间的约束关系
在前文中,我们延伸出通道内的约束关系如下:
VALID信号一旦拉高,除非READY信号拉高接收数据完成,不会主动变低
不同数据通路之间,同样的存在约束关系,这很好理解:写回复通路的信号传递一定晚于写数据通路,这就天然的构建起不同通路的先后顺序关系,假如不满足这种约束关系,AXI协议就可能会发生死锁,即deadlock没有办法正确工作。
同时一个AXI slave按功能进行区分的行为建模,无非是读与写两种操作,读操作与写操作的约束关系同样不同。
单向箭头指向的对象可以在起点对象之前/之后置高
(以5.1为例ARREADY可以在ARVALID之前或者之后置高)
双向箭头指向的对象只能在起点对象之后置高
(以5.1为例,RVALID无法在地址通路握手完成(已发送数据)的情况下改变)
5.1 读操作约束关系
首先我们讨论的是读操作约束关系:
RVALID和RREADY对应读数据通路的信号
ARVALID和ARREADY对应读地址通路的信号
读操作固定的约束关系为数据通道必须要等待地址通道的数据传输完成才可以尝试握手操作
5.2 写操作约束关系(AXI3.0版)
其次我们讨论的是写操作的约束关系
这里涉及到了三个数据通路,来考虑约束关系,唯一的一个硬约束关系为,BVALID需要等到写数据通路完成握手后才能置高。
初学者在这里往往会感到迷惑
比如说BREADY跟WVALD与WREADY间有无关系?BVALID和AWVALID与AWREADY有无关系?实际上是,只要图中的线没有进行相连,就是没有关系,针对于AXI而言,甚至可以BREADY信号第一个拉高,再去考虑其他信号的关系,唯一需要满足的即为写回复通路与写数据通路之间的约束,剩下的信号都是自由的。
5.3 写操作约束关系(AXI4.0版)
5.2讨论的是AXI3.0写操作的约束关系,这里直接放出AMBA4.0版的约束关系,很好理解,不再多做解释,不过需要强调的是,AMBA4在兼容AMBA3的基础上更为严格,目的是保证写地址和写数据均能强约束写响应。
二、burst突发传输机制解读
1.什么是burst传输
简单来说,burst传输是一种适用于AMBA协议的规则形式,通过这种规则,我们可以控制AMBA进行具体的数据传输活动,在这种规则下,主设备发送控制信息和首地址信息,从设备根据这些信号计算接下来的地址信息。
换言之,在这种规则下,主设备只需要发送一拍信息,就可以通过计算,决定未来数拍,写入或读出的地址。
下图中的读操作就生动形象的描述了这种Burst传输,一拍的地址和控制信号,操控了四拍的读出数据。
通过这种形式,控制信号的效率大大提升。
2.AXI4.0突发传输要求
burst传输不能超过4KB的地址边界,同时burst传输一旦开始,不允许中止。
3.信号列表
以下的信号描述,采用英文直译的方法进行,有些读者可能单看描述会觉得有些困惑,什么长度?什么大小?作者贴心的在后面进一步做了相关解释,所以,往后继续看即可。
读行为的信号列表
读操作信号 | 信号描述 |
---|---|
ARLEN[7:0] | 读操作burst传输长度 |
ARSIZE[2:0] | 读操作burst传输大小 |
ARBURST[1:0] | 读操作burst传输类型 |
ARADDR | 读操作的首地址 |
以上的前三个信号为决定burst传输的最重要的三个控制信号,一次完整的burst传输当然还需要“数据信号、LAST"等其他信号,但是作者希望尽量剥离“次相关内容”,不再这里进行讲解,等最终汇总AXI时再行说明”。
写行为的信号列表