AXI4总线(1)
(1)五个通道:写地址通道,写数据通道,写响应通道,读地址通道,读数据通道
每一个通道都有握手信号vaild,ready信号
必须检测到vaild,ready信号同时都为高电平,即握手成功的时候,数据输出

(2)通道信号列表
全局信号:ACLK / ARESETn
写地址通道:
M_AXI_AWID [ 3: 0],
M_AXI_AWADDR [ 31: 0]的最高四位表示的AXI主机的ID号码
M_AXI_AWLEN [ 7 : 0]表示突发长度,0-255表示的1到256个数据的突发长度
M_AXI_AWSIZE [ 3 : 0]表示写数据通道的数据位宽,此数据为0011的,写数据位宽8字节
M_AXI_AWSIZE [ 3 : 0]数据在以前的版本最大128字节,AXI版本有所拓宽

M_AXI_AWBURST [ 1 : 0] = 2'b01表示自增突发模式
需要注意的是自增突发模式的突发长度只能支持1-256的突发长度
使用突发传输,必须要使用自增的地址突发模式,
即一次突发只需要给一个头地址,后续操作,会默认地址自增1

M_AXI_AWVAILD
S_AXI_AWREADY
写数据通道:
M_AXI_WID[3:0]
M_AXI_WSTRB数据掩码信号,其位宽和M_AXI_WDATA位宽有关
写地址通道的M_AXI_AWSIZE决定的写数据的字节,多少字节,M_AXI_WSTRB 就多少bit
M_AXI_WSTRB信号每一个bit控制M_AXI_WDATA每一个字节的数据掩码。
M_AXI_WLAST信号在写数据通道握手过程中的最后一个数据拉高一个周期。
M_AXI_WVAILD
S_AXI_WREADY
写响应通道:
S_AXI_BID[3:0]是写响应通道的ID,属于从机控制的信号
S_AXI_BRESP[1:0]是写响应通道的结果
S_AXI_BVAILD
M_AXI_BREADY

读地址通道:
M_AXI_ARID[3:0]
M_AXI_ARADDR[31:0]
M_AXI_ARLEN [ 7 :0]
M_AXI_ARSIZE[ 3 :0]
M_AXI_ARBURST[1 :0] = 2'b01表示突发时候,地址自增模式
M_AXI_ARVAILD
S_AXI_ARREADY
读数据通道:
S_AXI_RID[3:0]
S_AXI_RDATA[ :0]
S_AXI_RLAST
S_AXI_RVAILD
M_AXI_RREADY
(3)传输数据顺序
对于写数据,握手的顺序必须是
写地址通道握手->写数据通道握手->写响应通道握手
对于读取数据,握手的顺序必须是
读地址通道握手->读数据通道握手
如果不按照顺序传输数据,极有可能造成AXI死锁
(4)AXI传输重点问题
1)AXI突发传输,自增模式,支持的突发传输长度为1-256
2)AXI突发传输,Fixed模式,每一次突发传输的模式的地址都一样,类似FIFO
3)AXI突发传输,WRAP Type模式,突发地址经过一个圈之后回到源地址
4)AXI必须满足对应的读写时序,否则会进入死锁
5)AXI4总线已经将WID信号删除,
(5)AXI的OutStanding
1)写地址通道首先连续写多个写地址,然后写数据通道再连续发送写数据
2)读地址通道首先连续写多个读地址,在读数据通道再连续接收读数据

3) 假设没有outstanding,必须要等到地址握手成功了才可以传输数据 ,
4)难以实现真正的全流水和满性能。
5)outstanding就是发出去的地址数量,未处理的地址可以先存放在AXI总线的缓存里。
6)等完成一次传输事物之后,无需再握手传输地址,即可立即进行下一次的数据传输
7)AXI协议真是因为存在outstanding和burst传输才比AHB/APB的传输带宽大很多。
8)有了outstanding的支持,master可以不用等待上一笔transaction结束,就直接连续发送多笔请求。
(6)AXI乱序
1)AXI的乱序是对应的单主机对应的单一从机的情况
2)AXI4将WID信号删除,默认数据在outstanding下,写地址和写数据是顺序发送的
3)但是伦理上说写响应通道,接收的BID数据可以是乱序的,对应BID即可
4)但是写地址通道的同一个ARID的不同数据包,BID必须要按照时间顺序接收
3)AXI4读地址通道ARID和读数据通道RID对应,即ARID为0的地址,接收RID为0的数据
4)AXI的乱序表示同一个ARID序号需要按照发射顺序返回读取的值,不同的ARID序号可以以任意顺序返回值

(6)AXI交织
1)AXI4没有WID,所以不支持交织
2)AXI有WID,支持交织,意思就是每一个AWID和WID对应,即可以先连续发送两个写地址通道的数据,再通过outstanding(带突发模式),交织发送不同地址的数据,读数据的时候就是交织读取不同通道的数据。类似下图。

(7)AXI死锁
单主机单从机死锁
1)AXI4没有WID,所以比较严格,即写数据通道的数据必须严格的按照写地址通道的数据顺序传送,比如AW通道发送ADDR0,ADDR1,ADDR2三笔写操作,每个写操作burst length=2,那么W通道的顺序在AXI4协议的规定下必须为:WDATA0_0,WDATA0_1,WDATA1_0,WDATA1_1,WDATA2_0,WDATA2_1;
2)AXI3协议WID,所以可以交织发送,时序比较灵活,但是第一帧数据必须按照写地址顺序来,即交织的第一帧数据必须按照写地址数据顺序来传输,同样上述的例子,AXI3的写数据通道就可以为WDATA0_0,WDATA1_0,WDATA2_0(前三个顺序不可以换),WDATA0_1,WDATA1_1, WDATA2_1
如果违反了上述操作就会造成死锁
多主机多从机典型的蝴蝶结死锁
这一段参考CSDN大神文章



常碰到的死锁
1)在写地址-写数据的时候,将bready信号直接全程拉高,方便操作,但是会造成死锁
2)因为Xilinx 的IP核在写数据的时候就将bvaild拉高
3)这样就造成了数据还没有传输完,就造成写响应先握手了,死锁。