简介
ZYNQ 将高性能 ARM Cotex-A 系列处理器与高性能 FPGA 在单芯片内紧密结合,为设计带来了如减小
体积和功耗、降低设计风险,增加设计灵活性等诸多优点。在将不同工艺特征的处理器与 FPGA 融合在一个芯片上之后,片内处理器与 FPGA 之间的互联通路就成了 ZYNQ 芯片设计的重中之重。如果 Cotex-A9 与FPGA 之间的数据交互成为瓶颈,那么处理器与 FPGA 结合的性能优势就不能发挥出来。
我们在前面的实验中介绍了一些 ZYNQ PS 与 PL 交互所使用的接口,比如《EMIO 按键控制 LED 实
验》中的 EMIO,以及《AXI GPIO 按键控制 LED 实验》中的 AXI4-Lite 接口等。其中 AXI4-Lite 接口属于AXI4 总线协议,接下来我们将对该协议作一个更具体的介绍。AXI 的英文全称是 Advanced eXtensible Interface,即高级可扩展接口,它是 ARM 公司所提出的 AMBA(Advanced Microcontroller Bus Architecture)协议的一部分。在介绍 AXI 协议之前,我们首先要对通信协议有一个基本的概念。
AXI 协议是一种高性能、高带宽、低延迟的片内总线,具有如下特点:
1、总线的地址/控制和数据通道是分离的;
2、支持不对齐的数据传输;
3、支持突发传输,突发传输过程中只需要首地址;
4、具有分离的读/写数据通道;
5、支持显著传输访问和乱序访问;
6、更加容易进行时序收敛。
在数字电路中只能传输二进制数 0 和 1,因此可能需要一组信号才能高效地传输信息,这一组信号就组
成了接口。AXI4 协议支持以下三种类型的接口:
1、 AXI4:高性能存储映射接口。
2、 AXI4-Lite:简化版的 AXI4 接口,用于较少数据量的存储映射通信。
3、 AXI4-Stream:用于高速数据流传输,非存储映射接口。
在这里我们首先解释一下存储映射(Meamory Map)这一概念。如果一个协议是存储映射的,那么主机
所发出的会话(无论读或写)就会标明一个地址。这个地址对应于系统存储空间中的一个地址,表明是针对该存储空间的读写操作。AXI4 协议支持突发传输,主要用于处理器访问存储器等需要指定地址的高速数据传输场景。AXI-Lite为外设提供单个数据传输,主要用于访问一些低速外设中的寄存器。而 AXI-Stream 接口则像 FIFO 一样,数据传输时不需要地址,在主从设备之间直接连续读写数据,主要用于如视频、高速 AD、PCIe、DMA 接口等需要高速数据传输的场合。
在本章我们重点介绍 AXI4 接口,它由五个独立的通道构成:
1、 读地址
2、 读数据
3、 写地址
4、 写数据
5、 写响应
下面是使用读地址和读数据通道实现读传输过程的示意图:
BD设计
这里的PL_DDR3_TEST只需要用创建的AXI总线的IP原来的例程就可了。
软件设计
#include <stdio.h>
#include "xil_cache.h"
#include "xparameters.h"
#include "xparameters_ps.h"
#include "xil_printf.h"
#include "xil_io.h"
#define DDR_BASEARDDR 0x10000000 //从设置基地址开始读取
#define DDR_HIGHADDR XPAR_DDR_MEM_HIGHADDR
int main()
{
int i=0;
char A;
int rev;
Xil_DCacheDisable();
print("PL RW DDR TEST!\n\r");
print("Please input A to get data\n\r");
while(1){
scanf("%c",&A);
if(A=='A'){
printf("start\n\r");
while(i*4<4096){
rev = Xil_In32(DDR_BASEARDDR+i*4);
xil_printf("the address at %x data is : %d \r\n" ,DDR_BASEARDDR+i*4, rev);
++i;
}
i=0;
}
}
return 0;
}
AXI总线读写ddr时序
可以看到这里是突发传输,每次突发64个字节。