Zynq7000系列FPGA中的DMA控制器简介(一)

DMA控制器(DMAC)使用64位AXI主接口来执行与系统存储器和PL外围设备之间的DMA数据传输,操作频率同CPU_2x的时钟速率。传输由DMA指令执行引擎控制。DMA引擎运行在一个小指令集上,该指令集提供了一种灵活的指定DMA传输的方法。这种方法提供了比DMA控制器方法的能力更大的灵活性。

DMA引擎的程序代码由软件写入系统存储器的一个区域,该区域由控制器使用其AXI主接口访问。DMA引擎指令集包括用于DMA传输的指令和用于控制系统的管理指令。

控制器最多可配置八个DMA通道。每个通道对应于DMA引擎的处理器上运行的一个线程。当DMA线程执行加载或存储指令时,DMA引擎将内存请求推送到相关的读或写队列。DMA控制器使用这些队列来缓冲AXI读/写事务。控制器包含一个多通道FIFO(MFIFO),用于在DMA传输期间存储数据。

DMA引擎处理器上运行的程序代码将MFIFO视为包含一组用于DMA读写事务的可变深度并行FIFO。程序代码必须管理MFIFO,以便所有DMA FIFO的总深度不超过1024字节的MFIFO。
DMAC能够在没有处理器干预的情况下移动大量数据。源存储器和目标存储器可以位于系统中的任何位置(PS或PL)。DMAC的内存映射包括DDR、OCM、线性寻址Quad SPI读取内存、SMC内存和PL外围设备或连接到M_GP_AXI接口的内存。

用于与PS存储器进行传输的流控制方法使用AXI互连。使用PL外设的访问可以使用AXI流控制或DMAC的PL外设请求接口。没有指向PS I/O外设(IOP)的外设请求接口。对于PL外围AXI事务,在使用中断或状态轮询的编程IO方法中使用在CPU上运行的软件。

控制器有两组控制寄存器和状态寄存器。一组在安全模式下可访问,另一组在非安全模式下可以访问。软件通过控制器的32位APB从接口访问这些寄存器。整个控制器要么以安全模式操作,要么以非安全模式操作;不存在基于信道的模式混合。安全配置更改由slcr寄存器控制,需要重置控制器才能生效。

特征

DMA控制器提供:

  • DMA引擎处理器,具有用于DMA传输的灵活指令集:
  1. 灵活的分散-聚集内存传输
  2. 完全控制源和目的地的寻址
  3. 定义AXI事务属性
  4. 管理字节流
  • 八条缓存线,每条缓存线有四个字宽
  • 八个并发DMA通道线程
  1. 允许多个线程并行执行
  2. 发出最多8个读取和最多8个写入AXI事务的命令
  • 对PS中断控制器和PL的八次中断
  • DMA引擎程序代码中的八个事件
  • 128(64位)字MFIFO,用于缓冲控制器在传输过程中写入或读取的数据
  • 安全性
  1. 用于安全寄存器访问的专用APB从接口
  2. 整个控制器配置为安全或非安全
  • 内存到内存的DMA传输
  • 四个PL外设请求接口,用于管理进出PL逻辑的流量控制:每个接口最多可接受四个活动请求

DMA控制器的系统视图如图9-1所示。

9e65f935a9ac4b8da3e2caf3afbe9c5d.png

方框图

DMA控制器的框图如图9-2所示。

520018d7584949329593e0abea8407da.png

DMA指令执行引擎

DMAC包含一个指令处理块,使其能够处理控制DMA传输的程序代码。DMAC为每个线程维护一个单独的状态机。

  • 渠道仲裁
  1. 为活动DMA通道提供服务的循环方案
  2. 在为下一个DMA通道提供服务之前,先为DMA管理员提供服务
  3. 不支持更改仲裁程序
  • 渠道优先级
  • 以同等优先级响应所有活动(active)DMA通道
  • 不支持对DMA通道的优先级进行相对于其他DMA通道的任何更改

指令缓存

处理器内部通常包含一个或多个缓存,用于存储从主存中取出的指令和数据。缓存的目的是为了加速处理器访问这些指令和数据,因为从缓存中读取数据通常比从主存中读取要快得多。当一个线程(在处理器中执行的程序的一部分)请求从一个特定地址读取指令时,缓存首先会尝试查找这个地址是否在其存储的数据中。如果缓存中存在所请求的指令(即缓存命中),那么缓存会立即提供这个指令的数据给处理器,而不需要从主存中读取。这大大减少了处理器的等待时间。如果缓存中没有所请求的指令(即缓存未命中),那么线程会被暂停(stall),直到控制器使用AXI接口从主存中读取该指令并将其放入缓存中。这个过程被称为“缓存行填充(cache line fill)”。如果一条指令的大小超过四个字节,或者它跨越了缓存行的末尾(即这条指令的一部分在一个缓存行中,另一部分在另一个缓存行中),那么处理器需要执行多次缓存访问来获取这条完整的指令。这是因为缓存通常以固定大小的“缓存行”(cache line)为单位来存储数据,这些缓存行的大小通常是固定的,例如64字节或128字节。

当控制器正在通过AXI接口从主存中读取数据以填充缓存行时,它允许其他线程访问缓存。然而,如果在这个过程中另一个线程尝试访问的指令或数据不在缓存中(即发生另一个缓存未命中),那么该线程的指令流水线(pipeline)会被暂停(stall),直到第一个缓存行填充完成。

当指令缓存需要从系统内存中读取指令以填充其缓存行时,这个填充操作的延迟(latency)取决于系统内存的读取延迟。换句话说,如果系统内存(比如DRAM)的读取速度较慢,那么指令缓存填充操作就需要更长的时间。DMAC的性能高度依赖于64位AXI主接口(AXI master interface)的带宽。

读/写指令队列

当通道线程执行加载或存储指令时,控制器将该指令添加到相关的读取队列或写入队列。在AXI互连上发布事务之前,控制器将这些队列用作指令存储缓冲区。

多通道数据FIFO

DMAC使用多通道先进先出(MFIFO)数据缓冲器来存储它在DMA传输期间读取或写入。

用于指令获取和DMA传输的AXI主接口

程序代码存储在系统存储器的一个区域中,控制器使用64位AXI主接口访问该区域。AXI主接口还使DMA能够将数据从源AXI从设备传输到目标AXI从机。

用于寄存器访问的APB从接口

控制器通过32位APB从接口响应下列两个地址范围,这两个地址范围被软件用作读取和写入控制寄存器。

  • 非安全寄存器访问
  • 安全的寄存器访问

中断接口

中断接口允许硬件事件或软件条件有效地将通知(或称为中断信号)传递给中断控制器(Interrupt Controller)。当这些事件或条件发生时,它们会触发中断,中断控制器随后会暂停当前正在执行的指令(如果处理器正在执行),并跳转到特定的中断处理程序(Interrupt Handler)或中断服务例行程序(Interrupt Service Routine, ISR)以处理该中断。

PL外设DMA请求接口

PL Peripheral DMA Request Interface 通常指的是在可编程逻辑中,用于支持具备DMA能力的外设与DMA控制器之间进行通信的接口。这个接口允许外设在不需要处理器干预的情况下,直接访问系统内存,从而大大提高数据传输的效率。

PL外部设备请求接口支持连接具有DMA功能的外部设备驻留在PL中。每个PL外围请求接口彼此异步,并且与DMA本身异步。

重置初始化接口

用于在设备退出复位状态后,由软件来初始化直接内存访问控制器(Direct Memory Access Controller,简称DMAC)的操作状态的一个接口。当系统启动、重启或经历某个特定的事件导致DMAC需要重置时,这个接口就非常重要。

 

### 回答1: Zynq DMA(Direct Memory Access)数据回环是指将数据从一个片内存储器(例如PS端内存)传输到另一个片内存储器(例如PL端内存),然后再将数据从PL端内存传回到PS端内存的过程。 在Zynq SoCDMA是用于高效地进行数据传输的关键组件。它可以减轻处理器(PS)的负载,并且能够实现高速数据传输和并行处理。 进行Zynq DMA数据回环的步骤如下: 1. 配置DMA控制器:通过软件配置DMA控制器,定义数据传输的源地址、目的地址、传输大小等参数。可以通过PS端的DMA控制寄存器来设置这些参数。 2. 启动DMA传输:向DMA控制寄存器写入启动传输的命令,将数据从PS端内存传输到PL端内存。 3. PL端处理:在PL端接收到数据后进行处理,可以进行算法运算、滤波器操作等等。 4. 数据传输回PS端:将处理后的数据从PL端内存传输回PS端内存。同样,通过配置DMA控制器并启动传输命令来完成数据传输。 5. PS端处理:在PS端接收到数据后,可以对数据进行后续处理操作,例如进一步的分析、显示、存储等操作。 利用Zynq DMA数据回环,可以实现高效的数据处理和传输。数据回环常用于验证硬件设计的正确性和性能测试,也可以应用于各种需要高速数据传输和处理的应用,例如图像和视频处理、信号处理、音频处理等领域。 ### 回答2: Zynq DMA数据回环是一种在Zynq芯片上使用DMA(Direct Memory Access)模块实现数据传输的方法。DMA是一种可以直接在外部设备和内存之间传输数据的技术,可以降低CPU的负载,提高系统性能。 在Zynq芯片上,数据回环是将数据从输入端口传输到输出端口,再将传输的数据通过DMA模块回写到内存。整个过程通过DMA进行数据传输,减少了CPU的参与,提高了效率。该过程可以通过设置DMA控制寄存器和配置寄存器来实现。 首先,需要配置DMA的通道和传输模式,选择合适的通道和传输模式来满足要求。然后,设置源地址和目的地址,确定数据传输的起始位置和终止位置。接着,设置传输长度,确定要传输的数据长度。最后,启动DMA传输,等待传输完成。 在数据回环过程,可以对传输的数据进行处理和转换,以满足具体需求。比如,可以对传输的数据进行加密和解密、数据压缩和解压缩等操作。同时,可以通过DMA传输数据的速度和优先级进行调整,以满足不同应用场景的需求。 总之,Zynq DMA数据回环是一种通过使用DMA模块实现数据传输的技术,可以有效降低CPU负载,提高系统性能。通过合理配置DMA通道和传输模式,并对传输的数据进行处理和转换,可以满足不同应用场景的需求。 ### 回答3: Zynq DMA数据回环是指使用Zynq芯片内部的DMA模块实现数据的循环传输。DMA(Direct Memory Access)是一种数据传输方式,可以通过DMA控制器直接在外设和内存之间进行数据传输,而不需要CPU的干预。 在Zynq芯片,具有DMA模块的PS(Processing System)可以与PL(Programmable Logic)进行数据传输。实现DMA数据回环需要以下步骤: 1. 配置DMA控制器:首先,需要在PS配置DMA控制器。可以通过设置寄存器来配置传输模式、传输方向、传输长度等参数。还可以设置断使能来实现数据传输完成后的断功能。 2. 分配内存空间:在PS,分配一块内存空间作为DMA传输的缓冲区。可以通过动态内存分配函数malloc()来申请一块连续的内存空间。 3. 设置DMA传输:将DMA控制器的源地址设置为PS的内存缓冲区地址,目的地址设置为PL的内存地址,设置传输长度和传输方向。 4. 启动DMA传输:通过写入DMA控制器的寄存器来启动数据传输。 5. 等待传输完成:等待DMA传输完成的断或者轮询DMA控制器的寄存器来判断传输是否完成。 6. 检查数据:通过比较PS内存缓冲区和PL内存之间的数据,确认数据回环是否成功。 需要注意的是,对于Zynq DMA数据回环,PL开发人员需要实现对PL内存的访问,将传输的数据写入PL内存,并且在数据回环完成后将数据读取出来。此外,还需要确保DMA的传输速率满足需求,避免数据丢失或延迟。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值