FPGA中AXI协议的理解及接口信号的中文描述

AXI协议

AXI简介

AXI4 所采用的是一种 READY VALID 握手通信机制,即主从模块进行数据通信前, 先根据操作对各所用到的数据、地址通道进行握手。主要操作包括传输发送者 A 等到传输接受者 B READY 信号后, A 将数据与 VALID 信号同时发送给 B,这是一种典型的握手机制。

AXI总线支持burst传输。Burst传输(翻译成突发传输或者连续传输),指在同一行中相邻的存储单元可以连续传输的方式,只需要提供起始地址和突发长度,就可以自动的对后面同样数量的存储单元进行读/写操作,而不需要连续提供地址

FPGA中AXI协议的理解及接口信号的中文描述_第1张图片

图1 AXI4握手

AXI 总线分为五个通道:
· 读地址通道,包含 ARVALID, ARADDR, ARREADY 信号;
· 写地址通道,包含 AWVALID AWADDR, AWREADY 信号;
· 读数据通道,包含 RVALID, RDATA, RREADY, RRESP 信号;
· 写数据通道,包含 WVALID, WDATA, WSTRB(对应的字节有效位), WREADY 信号;
· 写应答通道,包含 BVALID, BRESP, BREADY 信号;
· 系统通道,包含: ACLK ARESETN 信号;

其中 ACLK axi 总线时钟, ARESETN axi 总线复位信号,低电平有效;读写数据与读写地址类信号宽度都为 32bit READY VALID 是对应的通道握手信号; WSTRB 信号为 1 bit 对应 WDATA 有效数据字节, WSTRB 宽度是 32bit/8=4bit BRESP RRESP 分别为写回应信号,读回应信号,宽度都为 2bit‘h0 代表成功,其他为错误。

FPGA中AXI协议的理解及接口信号的中文描述_第2张图片 FPGA中AXI协议的理解及接口信号的中文描述_第3张图片

AXI4读握手

AXI4写握手

github 上找到一个 AXI master 的代码,地址是https://github.com/aquaxis/IPCORE/tree/master/aq_axi_vdma。这个工程是一个自己写的VDMA,里面包含了大量可参考的代码。笔者这里主要使用了 aq_axi_master.v 这个代码用于AXI master 读写操作。

PL_WRITE_READ_PS_DDR

  1. 通过AXI4总线,需要编写pl端代码

AXI4的控制总线S00_AXI包含了写读数据的ADDR以及写读的数据DATA

FPGA中AXI协议的理解及接口信号的中文描述_第4张图片

  1. 通过AXI4总线,主要是软件编写ps端代码

Zynq7000HP0主要完成与ddr的高速数据交互,GP0完成AXI_LITE寄存器等控制

FPGA中AXI协议的理解及接口信号的中文描述_第5张图片

  1. ps将数据从emmc读取存入ddr,再通过dma将数据从ddr读取出来,通过M_AXIS_MM2S_0送出去

FPGA中AXI协议的理解及接口信号的中文描述_第6张图片

AXI接口

信号

可选/必选

默认值

描述

Write Address

M_AXI_AWID

写地址识别ID

M_AXI_AWADDR[31:0]

必须

写入数据的内存地址

M_AXI_AWLEN[7:0]

Burst Length写入数据的Burst个数 传输量= AWLEN+1

M_AXI_AWSIZE[2:0]

Burst Size  2^n字节 一个Burst数据量的大小3’b011即使2^3=8Byte

M_AXI_AWBURST [1:0]

2’b01

Burst Type 每次传输之间地址如何变化 2’b00:fixed(FIXED固定) burst 2’b01:incrementing burst(INCR递增突发)  2’b10:warpping burst(WARP回环突发,地址长度是器件决定还是人为设定?未验证)

M_AXI_AWLOCK

2'b00

定义主机访问从机是否独占0normal access  1exclusive(独占) access 

M_AXI_AWCACHE[3:0]

2'b0011

表示不同的内存类型[0]:bufferable[1]:modifiable[2]:other allocate[3]:allocate

M_AXI_AWPROT[2:0]

必须

2'b000

Protect Fixed 2'b000 写事务的保护属性

M_AXI_AWQOS [3:0]

2'b0000

Quality of service

M_AXI_AWUSER

可变位宽,一般不建议使用

M_AXI_AWVALID

必须

Valid

M_AXI_AWREADY

必须

Ready

Write Data

M_AXI_WDATA[63:0]

必须

= 2^AWSIZE * 8

M_AXI_WSTRB[7:0]

=数据总线位宽 / 8,具体的WSTRB [n]为高对应于WDATA [(8n+7) : 8n]这一字节的数据有效(多少个字节时有效的)

M_AXI_WLAST

必须

最后一次数据传输WLAST1,表明此时刻的数据是最后一份数据

M_AXI_WUSER

M_AXI_WVALID

必须

valid

M_AXI_WREADY

必须

ready

Write Response

M_AXI_BID

写响应ID,与AWID保持一致

M_AXI_BRESP[1:0]

必须

写完成响应 00: OKAY正常访问成功 01: EXOKAY独占访问成功10: SLVERR丛机反映错11: DECERR指示互连模块无法成功解码从属访问。

最后数据全部传输完成后才通过写应答知道传输是否有错误

M_AXI_BUSER

M_AXI_BVALID

必须

Valid

M_AXI_BREADY

必须

Ready

Read Address

M_AXI_ARID

M_AXI_ARADDR[31:0]

必须

M_AXI_ARLEN[7:0]

几个Burst,实际传输数据量 = ARLEN + 1

M_AXI_ARSIZE[2:0]

Burst size 一个burst大小

M_AXI_ARBURST[1:0]

01

Burst Type

M_AXI_ARLOCK[1:0]

00

M_AXI_ARCACHE[3:0]

0011

M_AXI_ARPROT[2:0]

必须

000

M_AXI_ARQOS[3:0]

0000

Quality

M_AXI_ARUSER

M_AXI_ARVALID

必须

M_AXI_ARREADY

必须

Read Data

M_AXI_RID

写数据识别ID, ARID保持一致用来对应地址和数据

M_AXI_RDATA[63:0]

必须

M_AXI_RRESP[1:0]

读响应 同写响应

M_AXI_RLAST

必须

M_AXI_RUSER

M_AXI_RVALID

必须

Valid

M_AXI_RREADY

必须

Ready

你可能感兴趣的:(Xilinx的IP核的使用,fpga开发)