AXI学习记录(1)

AXI学习记录(1)------AXI握手规则介绍


前言

年后我就打算写点东西记录一下,然而由于各种原因导致今天才开始写(实际是因为拖延症。。。)。正好近期工作内容需要我学习一下AXI协议,那么就从现在开始吧。


1、AXI握手相关信号?

介绍AXI握手规则前,这里先介绍一下AXI握手相关信号(即VALID和READY)。在AXI写地址/数据/回复和读地址/数据这五个通道中,都有XXX_VALID和XXX_READY信号,如下图所示。
AXI握手对信号


2、Spec中基本的握手规则

在AMBA AXI Protocol Specification中,说明了会有3种情况出现,即VALID before READY、READY before VALID、VALID和READY同时出现。

2.1 VALID before READY

VALID before READY
上图表示Src的VALID信号早到了,但是在T2时刻没有见到Des的READY信号,只能在T3时刻才完成传输。

注意:VALID一旦拉高就不能随意拉低,必须等握手完成传输最少1 cycle数据之后才能拉低;发送方不能根据接收方的READY信号来产生VALID,通俗说就是发送方发数据根据自身需求发,接收方根据自身情况确认什么时候收。

2.2 READY before VALID

READY before VALID
上图中表示Des的READY信号早到了,但是在T2时刻没有见到Src的VALID信号,只能在T3时刻才完成传输。

注意:Spec中明确说明:接收方如果READY拉高时,而发送方没有拉高VALID,接收方可以拉低READY。那么问题来了,如果发送方在刚好在READY信号下一个Cycle拉高,会出现什么情况?------我能想到的就是影响传输效率,本来下一个Cycle就能完成握手,现在将READY拉低后,那就不知道会再多等多少Cycle了。

所以,这里应该怎么处理?不要随意把READY信号弄低。

2.3 VALID with READY

VALID with READY
这种情况就简单,T2时刻完成传输数据即可。


3、各通道握手规则

在第2节中只是简单描述了VALID和READY之间的关系,下面将详细描述5个通道中VALID和READY之间的关系。下面的描述中M表示Master,S表示Slave。

3.1 写地址通道

  1. AWVALID(M to S)信号默认为Low,即复位时为Low,只有在Master传输有效Address和控制信息时拉高(assert)。一旦拉高,该信号保持直到Slave assert AWREADY信号(拉低)。
  2. AWREADY(S to M)信号默认为High,当该信号为高时,Slave必须能够接收Master提供给他的任何Address。

3.2 写数据通道

  1. WVALID(M to S)默认复位时为Low,在Write Burst发起且Write Data有效时拉高(assert),直到Slave assert WREADY时拉低。
  2. WREADY(S to M)默认为High,什么时候拉低?完全由Slave确定吗?是不是当其Busy时拉低?
  3. 在Write Burst的Final Write时,需要assert WLAST信号(看起来像是指示突发写数据操作中写最后一个数据的标志位)。

3.3 写回复通道

  1. BVALID(S to M)默认复位为Low,Slave在Response有效时assert(拉高),直到Master assert BREADY时拉低。
  2. BREADY(M to S)默认为High,什么时候拉低?完全由Master确定吗?是不是当其Busy时拉低?

3.4 读地址通道

  1. ARVALID(M to S)默认复位为Low,只有在Master传输有效Address和控制信息时拉高(assert)。一旦拉高,该信号保持直到Slave assert ARREADY信号(应该是拉低)。
  2. ARREADY(S to M)信号默认为High,当该信号为高时,Slave必须能够接收Master提供给他的任何Address。

3.5 读数据通道

  1. RVALID(S to M)默认复位为Low,在Slave读Data有效时拉高assert,保持到Master assert RREADY才能拉低。
  2. RREADY(M to S)信号默认为High,当该信号为高时,Master必须能够接收Slave提供给他的任何Data。
  3. 在Read Burst的Final Read时,需要assert RLAST信号(看起来像是指示突发写数据操作中读最后一个数据的标志位)。

注意

  1. 发送方VALID信号的拉高不能通过接收方READY信号产生,很好理解,也就是我要向你发东西,我准备好了我就发,我不管你是否准备好了。
  2. 发送方VALID信号什么时候拉低?即发送方接收到接收方拉低READY信号之后拉低。
  3. 接收时,可以等检测到VALID信号再assert READY信号。这里解释了上面3.2和3.3中什么时候拉低READY信号。

4、通道间握手规则

通道间需要满足一定的约束关系:

  1. 写回复必须在一次写传输过程中最后一个写数据之后。
  2. 读数据必须在接收到读地址信号之后。
  3. 通道间握手必须遵守一定的规则(防止死锁,规则在下面有介绍)。

4.1 读事务

在读地址通道,Master发送读指令(发送方),从Slave中读取数据(接收方);而在读数据通道,Slave为发送方,Master为接收方。需要满足的关系如下:
读事务示意图

  1. 上图中单箭头表示箭头指向信号可以在箭头起始信号前/后断言。双箭头表示箭头指向信号必须在箭头起始信号断言后才能断言。有指向关系的信号看图即可,无需多赘述。
  2. 对于ARVALID和ARREADY,Master禁止将Slave置起ARREADY作为置起ARVALID的条件(即 if ARREADY then ARVALID=1这种写法禁止出现);Slave可以在Master置起ARVALID之前/后再置起ARREADY。
  3. Slave必须等到Master置起ARVALID和Slave置起ARREADY之后,才能置起RVALID(数据VALID)。
  4. Slave不能将Master置起RREADY作为置起RVALID的条件;Master可以在Slave置起RVALID之前/后再置起RREADY。
  5. 写事务流程为:Address->Data。

4.2 写事务

在写地址/数据通道,Master发Slave收;在写回复通道,Slave发Master收。需要满足的关系如下,图中从AWVALID->>BVALID和AWREADY->>BVALID这两条路径是AXI4和AXI5新增的(为什么新增这两项?写事务默认是地址->数据->回复,写回复通道的VALID信号默认就应该在写地址通道信号之后才能产生。),去掉后就是AXI3。
写事务

  1. Master不能将Slave的AWREADY或WREADY拉高作为拉高AWVALID或WVALID的条件。
  2. Slave可以在Master拉高AWVALID或WVALID之前/后再拉高AWREADY。
  3. Slave可以在Master拉高AWVALID或WVALID之前/后再拉高WREADY。
  4. Master置起WVALID、WREADY、(AWVALID和AWREADY,AXI4,5新增)之后,Slave才能置起BVALID;且Slave置起WLAST之后,才能置起BVALID。
  5. Slave不能将Master置起BREADY作为置起BVALID的条件;但是Master可以在Slave置起BVALID之前/后再置起BREADY。
  6. 写事务流程为:Address->Data->Ack。

参考文档

  1. ARM AXI Spec

总结

本文简单介绍了AXI握手规则,真的能只看本文就能写RTL吗?有点悬吧。

第1篇博客,惨不忍睹,而且看上面写的内容好像就是把Spec翻译了一下,没啥技术含量。。。希望自己能越写越好吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值