zedboard如何从PL端控制DDR读写(二)——AXI总线

 虽然Xilinx已经将和AXI时序有关的细节都封装起来,给出了官方IP和向导生成自定义IP,用户只需要关注自己的逻辑实现,但是还是有必要简单了解一下AXI的时序,毕竟咱是做硬件设计的。

  AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。它的地址/控制和数据相位是分离的,支持不对齐的数据传输,同时在突发传输中,只需要首地址,同时分离的读写数据通道、并支持显著传输访问和乱序访问,并更加容易就行时序收敛。AXI 是AMBA 中一个新的高性能协议。AXI 技术丰富了现有的AMBA 标准内容,满足超高性能和复杂的片上系统(SoC)设计的需求。

  AXI总线是一种基于burst的传输总线,分为5个通道:read address, read data, write address, write data, write response。

  •   read data channel是一种从slave到master的传输,在一个读操作中,response与read data同一通道,分别为transfer返回response  

  

  •   write data channel是一种从master到slave的传输,在一个写操作中,返回一个整体的response。

  

  •   AXI中的每个通道都包含一个信息信号和一个双路的VALD、READY握手机制。信息源通过VALID信号来指示通道中的数据和控制信息什么时候有效。目地源用READY信号来表示何时能够接收数据。读数据和写数据通道都包括一个LAST信号,用来指明一个事物传输的最后一个数据。
  •   写数据通路传送着主机向设备的写数据。每八个数据都会有一个byte lane ,用来指明数据总线上面的哪些byte有效。写响应通道提供了设备响应写事务的一种方式。这完成信号每一次突发式读写会产生一个。
  •   主机和设备的接口和互联图如下:

  

  •   传输地址信息和数据都是在VALID和READY同时为高时有效。
  •   突发式读的时序图如下:

  

  当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持VALID为低直到读数据有效。为了表明一次突发式读写的完成,设备用RLAST信号来表示最后一个被传输的数据。

  •    重叠突发式读时序图如下:

  

  设备会在第一次突发式读完成后处理第二次突发式读数据。也就意味着,主机一开始传送了两个地址给设备。设备在完全处理完第一个地址的数据之后才开始处理第二个地址的数据。

  •    突发式写时序图如下:

  

  这一过程的开始时,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中。当主机发送最后一个数据时,WLAST信号就变为高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成。

  •   AXI协议支持乱序传输。他给每一个通过接口的事务一个IDtag。协议要求相同ID tag的事务必须有序完成,而不同ID tag可以乱序完成。

信号说明:

1、全局信号


信号



描述


ACLK


Clock source


全局时钟信号


ARESETn


Reset source


全局复位信号,低电平有效

2、写地址通道信号


信号



描述


AWID[3:0]


主机


写地址ID,这个信号是写地址信号组的ID tag。


AWADDR[31:0]


主机


写地址。


AWLEN[3:0]


主机


突发式写的长度。此长度决定突发式写所传输的数据的个数。


AWSIZE[2:0]


主机


突发式写的大小。


AWBURST[1:0]


主机


突发式写的类型。


AWLOCK[1:0]


主机


锁类型。


AWCACHE[3:0]


主机


Cache类型。这信号指明事务的bufferable、cacheable、write-through、write-back、allocate attributes信息。


AWPROT[2:0]


主机


保护类型。


AWVALID


主机


写地址有效。

1 = 地址和控制信息有效

0 = 地址和控制信息无效

这个信号会一直保持,直到AWREADY变为高。


AWREADY


设备


写地址准备好。这个信号用来指明设备已经准备好接受地址和控制信息了。

1 = 设备准备好

0 =  设备没准备好

3、写数据通道信号


信号



描述


WID[3:0]


主机


写ID tag,WID的值必须与AWID的值匹配


WDATA[31:0]


主机


写的数据。


WSTRB[3:0]


主机


写阀门。WSTRB[n]标示的区间为WDATA[(8*n)+7:(8*n)]


WLAST


主机


写的最后一个数据。


WVALID


主机


写有效

1 = 写数据和阀门有效

0 =  写数据和阀门无效


WREADY


设备


写就绪。指明设备已经准备好接受数据了

1 = 设备就绪

0 = 设备未就绪

4、写响应通道信号


信号



描述


BID[3:0]


设备


响应ID , 这个数值必须与AWID的数值匹配。


BRESP[1:0]


设备


写响应。这个信号指明写事务的状态。可能有的响应:OKAY、EXOKAY、SLVERR、DECERR。


BVALID


设备


写响应有效。

1 = 写响应有效

0 = 写响应无效


BREADY


主机


接受响应就绪。该信号表示主机已经能够接受响应信息。

1 = 主机就绪

0 = 主机未就绪

5、读地址通道信号


信号



描述


ARID[3:0]


主机


读地址ID。


ARADDR[31:0]


主机


读地址。


ARLEN[3:0]


主机


突发式读长度。


ARSIZE[2:0]


主机


突发式读大小。


ARBURST[1:0]


主机


突发式读类型。


ARLOCK[1:0]


主机


锁类型。


ARCACHE[3:0]


主机


Cache类型。


ARPROT[2:0]


主机


保护类型。


ARVALID


主机


读地址有效。信号一直保持,直到ARREADY为高。

1 = 地址和控制信息有效

0 = 地址和控制信息无效


ARREADY


设备


读地址就绪。指明设备已经准备好接受数据了。

1 = 设备就绪

0 = 设备未就绪

6、读数据通道信号


信号



描述


RID[3:0]


设备


读ID tag。RID的数值必须与ARID的数值匹配。


RDATA[31:0]


设备


读数据。


RRESP[1:0]


设备


读响应。这个信号指明读传输的状态:OKAY、EXOKAY、SLVERR、DECERR。


RLAST


设备


读事务传送的最后一个数据。


RVALID


设备


读数据有效。

1 = 读数据有效。

0 = 读数据无效。


RREADY


主机


读数据就绪。

1 = 主机就绪

0 = 主机未就绪

7、低功耗接口信号


信号



描述


CSYSREQ


CLOCK controller


系统低功耗请求。此信号来自系统时钟控制器,使外围设备进入低功耗状态。


CSYSACK


外围设备


低功耗请求应答。


CACTIVE


外围设备


Clock active

1 = 外围设备时钟请求

0 = 外围设备时钟无请求

时间: 2024-10-05 23:09:10

zedboard如何从PL端控制DDR读写(二)——AXI总线的相关文章

zedboard如何从PL端控制DDR读写(五)

有了前面的一堆铺垫.现在终于开始正式准备读写DDR了,开发环境:VIVADO2014.2 + SDK. 一.首先要想在PL端通过AXI去控制DDR,我们必须要有一个AXI master,由于是测试,就不自己写了,直接用package IP生成,方法如下: 1.选择package IP工具 2.创建新的AXI外设 3.接口类型选择Full,模式选择master,如果你不关心里面的详细实现过程,那么直接finish就好了.(后面我们会继续分析里面的过程) 二.创建好了IP,自然要加入到IP库里,如图

zedboard如何从PL端控制DDR读写(六)

上一节说到了DDR寻址的问题,如下图: 从官方文档上我们看到了DDR的地址是从0008_0000开始的,那么我们开始修改Xilinx给我们提供的IP核代码.其实很简单,上一节已经分析了地址停留在0000_1000的原因,现在我们只需要把write_burst_counter的位宽变大就可以了. 从上表看到地址范围由全0到全1,计算一下就知道需要的宽度为27,即 C_NO_BURSTS_REQ = 26; 重新打包IP核,生成比特流.开始调试 由于从0003_0000开始的地址是保留位,理论上来说

zedboard如何从PL端控制DDR读写(一)

看了一段时间的DDR手册,感觉大体有一点了解了,想要实际上板调试,然而实验室可用的开发板不多,拿了一块zynq板看了看,DDR确实有,但是已经集成了控制器,而且控制器还放到了PS端,PL只能通过AXI接口访问.     无奈另外两块开发板也这样,索性就用AXI去控制吧,正好还能再复习一遍AXI. 先简单介绍一下zynq,其全称是ZedBoard Zynq Evaluation and Development Kit  , FPGA芯片型号为xc7z020clg484-1. 片内包含一个丰富特性的

【zedboard】在PL端实现流水灯

开发环境:win 10 开发平台:vivado 2015.4 目的:在zynq7000的基础上以zedboard为硬件平台实现流水灯,zynq7000系列有一个硬件FPGA和两个ARM-A9硬核,FPGA部分被称为PL(Programmable Logic),不使用SDK来进行实验. 流程: 正式开始建立工程和编写代码之前我们需要先看懂原理图,下面我们看一下zedboard的LED所对应的原理图. 这是LED部分的原理图,在找到对应的FPGA引脚 LD0对应的T22 LD1对应的T21 LD2对

控制文件读写操作次数,提高程序执行的效率(经验)

编程时经常会遇到文件读写的操作,文件的读写相对于内存操作来说,速度非常慢.因此编程时,需要控制文件读写的次数,以提高程序执行的效率.以下列代码为例,进行说明. words = ['a', 'b', 'c', 'd'] for i in range(4): for line in file('file_read.txt'): if(words[i] in line): print(line) for line in file('file_read.txt'): for i in range(4):

摆脱学校机房教师端控制的方法汇总

先要弄懂原理,其实教师电脑能控制你就是通过网线把他的屏幕同步(发送)到你的屏幕,所以就算你的主机在运行的话也会被控制,不过你的主机里面还是在运行自己的东西,不过屏幕显示的界面是教师端的界面罢了. 分为几种情况, 一.如果你提前来到教室,电脑暂时未被控制不过上课就会控制,那么你可以不用通过拔掉网线这种麻烦的方法,而可以直接禁用掉网卡即可 或者如果这里没有的话可以在下面这里禁用 选择你想要禁用的网卡禁用即可,如果之后想要启用的话也是在这个位置启用. 还有一种方法:机房的电脑他都给我们分配了一个固定的

NTFS权限中完全控制与读写修改的区别

NTFS权限中,完全控制可以修改文件夹的所有者 NTFS配额不能和压缩功能共同使用 NTFS权限中完全控制与读写修改的区别

服务端控制各种浏览器禁止缓存页面资源 学习笔记

import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Demo2 extends HttpServlet { public voi

ZYNQ随笔——PL端按键中断之裸机设计

1. ZYNQ中断简述ZYNQ中断类型:普通中断请求(IRQ, Interrupt Request)和快速中断请求(FIQ, Fast Interrupt Request).ZYNQ中断源:软件中断(SGI, Software Generated Interrupt).CPU私有设备中断(PPI, Private Peripheral Interrupt)和共享设备中断(SPI, Shared Peripheral Interrupt).而PL端的按键中断属于共享设备中断.2. 硬件平台搭建在B