赞
踩
MFIFO(Multi-Channel FIFO,多通道FIFO)是一个共享资源,当前所有活动的通道都按照先到先服务(First-Come, First-Served, FCFS)的原则来使用它。对于程序来说,MFIFO表现为一组可变深度的并行FIFO,每个通道对应一个FIFO,但有一个限制,即所有FIFO的总深度不能超过MFIFO的大小。DMAC(Direct Memory Access Controller,直接内存访问控制器)的最大MFIFO深度是128个(64位)字。这意味着,尽管每个通道可以分配不同数量的FIFO深度,但所有通道FIFO的总深度加起来不能超过128个64位字。
这个控制器具有将源地址的数据重新对齐到目标地址的功能。例如,当控制器从地址0x103
读取一个字(word,通常是16位、32位或64位,具体取决于系统架构)并写入到地址0x205
时,它会对数据进行重新对齐,具体表现为在数据传输过程中将数据移动两个字节(byte lanes)。
MFIFO中的数据存储和打包方式由目标地址和传输特性决定。这意味着,当数据被写入MFIFO时,它会根据最终的目标地址和传输要求来重新排列和打包这些数据。这可能包括改变数据的字节顺序、组合或拆分多个数据单元以适应目标地址的特定格式或大小要求。
当程序指定对目标地址执行递增内存传输时,DMA控制器(DMAC)会将数据打包进MFIFO以最小化MFIFO条目的使用。这种打包策略旨在提高数据传输的效率,减少不必要的内存访问和MFIFO的使用。例如,当DMAC拥有一个64位的AXI数据总线,并且程序使用源地址0x100
和目标地址0x200
时,DMAC会将两个32位字打包进MFIFO的一个条目中。这是因为64位AXI数据总线一次能够传输64位(即8字节)的数据,而两个32位字加起来正好是64位,可以充分利用AXI总线的带宽。
在某些情况下,存储从源加载的数据所需的条目数不是源数据量除以MFIFO宽度的简单计算。当出现以下任何情况时,所需条目数量的计算并不简单:
在特定情况下,计算从源加载数据所需的条目数并不是简单地通过源数据量除以MFIFO(多功能先入先出队列)宽度来得出的。当以下情况之一发生时,计算所需条目数的过程会变得复杂:
DMALD (DMA Load) 和 DMAST (DMA Store) 指令用于指定执行AXI总线事务。AXI总线事务传输的数据量取决于编程到CCRn(Channel Control Register n)寄存器的值以及事务的地址。当涉及非对齐传输时,需要考虑一些额外的因素。
在AMBA AXI协议规范中,非对齐传输通常指的是源地址或目标地址不是AXI总线宽度的整数倍的情况。非对齐传输可能导致效率降低,因为AXI接口可能需要执行额外的操作来确保数据的正确传输。这可能包括从多个不同的地址读取数据片段(对于读操作)或将数据分散到多个不同的内存位置(对于写操作)。
DMAC控制器包含一个AXI主接口来访问PS(处理系统)中的存储器,如OCM(片上存储器)和DDR(双倍数据速率同步动态随机存取存储器)。通过相同的AXI中央互联,这个控制器可以潜在地访问大多数外设子系统。
如果目标外设可以被视为一个内存映射区域(或内存端口位置),且不需要FIFO或流控制,那么DMAC(直接内存访问控制器)就可以用来读取和写入该外设。典型的例子包括:
在这些情况下,DMAC能够直接处理内存到内存的数据传输,因为目标外设被映射到处理器的内存空间中,并且其访问方式类似于常规的RAM。DMAC可以有效地将数据从源地址传输到目标地址,无需CPU的干预,从而大大提高数据传输的效率。
需要注意的是,虽然DMAC可以处理许多类型的内存映射外设,但并非所有外设都适合使用DMAC进行数据传输。例如,某些外设可能需要特定的协议或流控制机制来确保数据的完整性和准确性。对于这些外设,可能需要使用更复杂的DMA控制器或专门的驱动程序来处理数据传输。
此外,使用DMAC进行数据传输时,还需要注意一些潜在的问题,如内存对齐、数据宽度和传输大小等。这些问题可能会影响数据传输的效率和正确性,因此需要在设计和实现时予以充分考虑。
当PL中的大多数外设通过FIFO传输数据时,必须管理这些FIFO以避免溢出和下溢的情况。为此,提供了四个特定的外设请求接口来连接DMAC到PL中具有DMA能力的外设。这些接口中的每一个都可以分配给任何DMA通道。
DMAC被配置为可以接受每个PL外设接口最多四个活跃(active)请求。一个活跃请求是指DMAC还没有开始请求的AXI数据事务。
对于每个PL外设接口,DMAC都有一个请求FIFO,用于捕获来自PL外设的请求。当请求FIFO满时,DMAC会将对应的DMA{3:0}_DRREADY信号拉低,以指示DMAC无法接受来自该PL外设的任何新请求。
注意:
对于PS中的I/O外设(IOP),并没有直接指向它们的外设请求接口。这意味着当需要访问PS中的目标外设的FIFO时,避免FIFO的下溢或溢出需要处理器的介入。当涉及到处理系统中的目标外设FIFO时,确实需要处理器的介入来避免FIFO的下溢或溢出。
在处理DMAC和PL外设之间流动的数据量时,有两种不同的方法:
这两种方法的选择取决于系统的具体需求和架构。在某些情况下,PL外设可能需要精确地控制数据传输量,以确保其内部数据流的稳定性。在其他情况下,处理器或软件可能需要更灵活地控制数据传输,以适应不同的应用或工作负载。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。