欢迎光临散文网 会员登陆 & 注册

AXI4总线(1)

2023-08-11 23:24 作者:数字逻辑der  | 我要投稿

(1)五个通道:写地址通道,写数据通道,写响应通道,读地址通道,读数据通道

每一个通道都有握手信号vaild,ready信号

必须检测到vaild,ready信号同时都为高电平,即握手成功的时候,数据输出

(1)

(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版本有所拓宽

(2)

M_AXI_AWBURST [ 1 : 0]  =  2'b01表示自增突发模式

需要注意的是自增突发模式的突发长度只能支持1-256的突发长度

使用突发传输,必须要使用自增的地址突发模式,

即一次突发只需要给一个头地址,后续操作,会默认地址自增1

(3)

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)读地址通道首先连续写多个读地址,在读数据通道再连续接收读数据

读数据outstanding

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序号可以以任意顺序返回值

AXI乱序

(6)AXI交织

1)AXI4没有WID,所以不支持交织

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

AXI交织

(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大神文章

CSDN
CSDN
CSDN


常碰到的死锁

1)在写地址-写数据的时候,将bready信号直接全程拉高,方便操作,但是会造成死锁

2)因为Xilinx 的IP核在写数据的时候就将bvaild拉高

3)这样就造成了数据还没有传输完,就造成写响应先握手了,死锁。

AXI4总线(1)的评论 (共 条)

分享到微博请遵守国家法律