长期使用AHB总线,AXI甚至有些遗忘,最近复习下。
1. handshake process
AXI是一种基于握手VAILD/READY的总线传输协议,在source端的写过程中,会先发送VALID信号,等到destination回应READY,transfer 才会开始:






- write_addr: master在写地址有效期间需要拉高AWVAILD信号,并且一直保持到slaver响应AWREADY。协议推荐的AWREADY默认为拉高的,表示slaver一直可以响应master的写请求。
- write_data: 和write_addr相同,这里WLAST和WSTRB[3:0]分别表示最后一次写入的数据和写数据选通信号。
- write_response:在master完成对slaver的写操作后,slaver需要给出response,BRESP[1:0],其值分别有OKAY, EXOKAY, SLVERR, and DECERR.随后需要在给出response后在给出一个response_valid信号:BVALID,同样的master也会回应一个BREADY。
- read_addr:handshake过程类似,master-ARVALID/slaver-ARREADY。
- read_data:slaver向master传输数据时,给出RVALID,在master收到RVALID后会拉高RREADY来表示其收到数据,slaver必须给出RLAST信号指示最后一位。
2. Burst length
- Burst_length: burst的单位为byte,ARSIZE[2:0]和AWSIZE[2:0]分别定义的burst_len如下:
Image - Burst type: AXI支持以下三种burst_type:
Image
- Fixed burst表示固定地址burst传输,每次从固定的地址上传输数据。
- Incrementing burst 表示地址递增burst ,每次累加的数值取决于burst的长度,如果每次burst传输4byte,则累加的数值也为4。
- Wrapping burst顾名思义,会在地址递增到边界的时候进行回环。
理解了AXI这个addr/data/response的信号都需要进行handshake的过程后,我们在来看一次完整的AXI传输,写操作如下:




本文使用 Zhihu On VSCode 创作并发布