建议读者参考"AMBA® AXI™ and ACE™ Protocol Specification:AXI3™, AXI4™, and AXI4-Lite™ ACE and ACE-Lite™"
下载地址链接:https://pan.baidu.com/s/1kHv2pp0FlrPwryrKJEKSZg 密码:2ld3
为了节省时间,可以不读红字~
AXI4协议是一套总线协议,是ARM AMBA(AdvancedMicrocontroller Bus Architecture)的一部分
其实,AXI4协议就是为了保证数据正确有效传输而定义的一套规则
AXI4协议中最基本的东西就是5种信道
★读地址信道(Read Address Channel)
★写地址信道(Write Address Channel)
★读数据信道(Read Data Channel)
★写数据信道(Write Data Channel)
★写响应信道(Write Response Channel)
还有两种Component
★ Master component
★ Slave component
通信由Master发起,Master要么想从Slave中读数据(read),要么想向Slave里写(write)数据。每次读写操作都需要一个地址,读地址信道(Read Address Channel)和写地址信道(Write Address Channel)就用来传输这个地址。在写完数据后,Master需要确认Slave有没有收完数据,Slave收到完整数据后,会通过写响应信道(Write Response Channel)给Master一个反馈(completion),表示写操作已经完成。
AXI Transaction:the complete set of required operations on the AXI bus form the AXI Transaction
AXI Burst:any required payload data is transferred as an AXI Burst
AXI Beats:a burst can comprise multiple data transfers, or AXI Beats
简单来说,AXI Transaction就是传输一段数据(AXI burst)所需要的一整套操作,而AXI burst就是待传数据,AXI burst由AXI Beats组成,一个Beat就是一个transfer。
AXI协议的一大特征,就是在五个信道通信之前,都需要使用VALID和READY信号进行握手,其中
★VALID表示发送端数据,地址或者控制信息已经准备就绪
★READY表示接收端已经准备好接收发送端将要传过来的信息
5个信道的VALID和READY信号表示如下:
其中,“A”前缀表示“Address”,“W”前缀表示“Write”,“B”前缀表示“Back(Response)”,“R”前缀表示“Read”。
在握手中,其实还有一个信号要用到,这个信号就是LAST信号。LAST信号存在于Write Data信道和Read Data信道中,按照上述命名规则,可以分别记为:WLAST和RLAST。LAST用于标记burst的最后一次数据传输,也就是说,只要接受端收到LAST信号,就说明本次transaction的数据已经传输完了。
▼在复位的时候,Master必须把ARVALID,AWVALID,WVALID拉低。
▼在复位的时候,Slave必须把RVALID和BVALID拉低
★Write Address信道
▼一旦Master声明了AWVALID信号,AWVALID必须保持被声明的状态,直到某个上升沿Slave声明了AWREADY信号。
▼默认的AWREADY可以为高也可以为低(建议为高)
★Write Data 信道
▼一旦Master声明了WVALID,WVALID就必须保持被声明的状态,直到某个上升沿Slave声明了WREADY信号。
▼默认的AWREADY可以为高
▼每个burst后,WLAST必须被声明
★Write Response 信道
▼一旦Slave声明了BVALID后,BVALID就必须保持被声明的状态,直到某个上升沿Master声明了BREADY.
▼BREADY可以默认为高。
★Read Address 信道
▼一旦Master声明了ARVALID信号,ARVALID必须保持被声明的状态,直到某个上升沿Slave声明了ARREADY信号。
▼默认的ARREADY可以为高或者低(建议为高)
★Read Data 信道
▼一旦Slave声明了RVALID信号,RVALID必须保持被声明的状态,直到某个上升沿Master声明了RREADY信号。
▼RREADY可以默认为高。
▼在一个burst中的最后一次transfer的时候,Slave必须声明RLAST信号。
★可以用两幅图来表示:
▼读transaction中的握手约束:
图解如下:
图中有两种箭头:
前一个箭头(单头)表示B可以在A前面声明,也可以在A后面声明
后一个箭头(双头)表示B只能在A后面声明
也就是说,读的数据必须在跟读的地址后面(对于读操作,没有地址,哪来的数据?)
▼写transaction中的握手约束:
也就是说:
◆写数据可以比写地址先传
◆但是BVALID必须在写地址和写数据都完成后才能被声明