在FPGA中实现一个PCIe接口时,为了确保系统效率,系统抖动,数据时钟开销以及必须满足的端到端总带宽需求,设计师必须考虑数据传输的方式。将一个散/聚DMA(SGDMA)与一个PCIe接口结合起来,通过从本地处理器上卸载一些数据传输负担,以及均摊多通道间的硬件延迟,非常有助于软硬件设计师满足他们的设计需求。本文将讨论采用基于FPGA的SGDMA与PCIe相结合的一些优点。
绝大部分的新型DMA控制器都支持散/聚功能,这里,硬件负责数据的转移,驻留在不连续的物理存储器中,不需要主处理器来处理模块间的数据转移。这是通过将DMA缓冲器描述符“链接”到一起来实现的,每个描述符中都含有使SGDMA自动执行数据转移所需的所有信息。当处理支持虚拟存储器的 *** 作系统时,SGDMA得到最普遍的采用。
直接存储器访问实现方案
衡量DMA控制器的收益有以下几种方法:通过定量分析究竟重新获取了多少时钟周期?相关设备驱动的复杂度减少了多少?或者由于“隐藏”数据分发的开销使DMA引擎增加了多少系统总吞吐量?增强型DMA引擎支持的一些功能包括:
* 在线分组缓冲存储
* 本地和前端总线的同时传输
* 延时处理
* 终端事物处理抢断
* 为DMA控制器连接的每条总线提供独立仲裁
当前端和本地总线处于超高负载条件下且传输数据前DMA控制器必须竞用并获取总线占有权时,可以采用在线数据缓冲器。
图1:虚拟存储器环境中的SGDMA控制器。
在FPGA中使用块存储始终是下面几方面的折中,即由于总线占用究竟需要多少临时缓冲器?FPGA中的功能是否需要存储器?使用中间数据存储所导致的附加延迟的代价如何?如果可能的话,在线分组缓冲器可以减少一些系统延迟,即用一条总线去读取数据,而“存储”总线不转送数据。
在PCIe中,通过分割处理来支持读 *** 作,当读请求发出时,PCIe链路上将要传输的数据不会立即得到。在这种情况下,支持延迟处理的DMA控制器将自动放弃总线控制,并允许DMA中任何其他被激活的通道来竞用总线控制。
图2:具有DMA高层架构的PCIe。
实时处理方面获得的好处
PCIe串行协议的一些最苛刻的应用是那些要求实时或准实时的数据传递。在这类系统中,像语音和视频处理,需要采用运算增强引擎来满足数据块严格的处理时间要求。这些硬限制不仅增加了运算增强芯片内部的软件工作的数据处理和减小延迟的负担,而且也增加了流处理硬件的负担。一种提供较小的数据包延迟和较高的系统吞吐率的方法是在数据进入系统背板上传输之前,将数据块分成较小的数据包。这样,可以采用较小的接收缓冲器,并确保不会出现哪个数据引擎的负荷过重的问题。
采用较小数据包时必须处理好以下几个问题:
1. PCIe用在所有的事务层分组(TLPs)方面的开销相对固定;较多的数据包则需要较多的处理开销
2. 较小的数据包通常需要的处理时间也少,于是就增加了由数据引擎和PCIe接口发起的并发中断的次数
3. 为了维持适当的负载均衡,较小的数据包会增加本地处理器的负荷
4. 本地主处理器必须花费较多的时间来生成PCIe协议所用的数据转移TLP
上面的几点意味着本地主处理器将会损失更多的原本用于其他功能的时钟周期。因此,较小的数据包有助于减小物理接口的处理延迟,但代价是增加了终端系统的负荷,这有可能降低总的系统性能。虽然PCIe TLP开销处理延迟无法完全消除,但通过采用一个多通道散/聚DMA引擎,基于灵活的仲裁机制,将数据块请求分成较小单元的可变大小的数据包,以及在DMA控制器自身中设计事务分割支持能力,可以摊薄每隔通道上与每个流等级(TC)相关的延迟。此外,设计一个较小的TLP事务IP核,通过生成/终接PCIe TLP,有助于提高软件的效率。
图3:带有DMA的PCIe读/写处理。
对于PCIe,存储器读取(MRd)不是优先的,是作为一个分割事务执行的,而存储器写(MWr)则是优先的。对于读取,请求者先发送一个MRd TLP来请求completor算法发送大量的数据(通常最大的读取请求为512字节),然后专门等待发送过来的数据。PCIe MWr TLP中包含将被写入(通常最大为128字节)的满载荷。因此,MLRd TLP在发送方向上,就像MWr TLP那样,也需要一段带宽。通过向MW通道分配更多的资源,在发送(Tx)方向上管道将保持在满状态,而接收(Rx)管道则用响应MRd请求的数据TLP来填满,见图2。
软件执行时间方面获得的好处
一个功能丰富的散/聚DMA控制器通过实现其他方案中需要复杂的算法和/或大量中断的功能,还能够减少软件开发的工作量和CPU的执行时间:
* 所有最先进的处理器和 *** 作系统,包括实时性能最好的 *** 作系统(RTOS),都采用MMU和虚拟存储器。乃至内核都采用虚拟地址。这意味着DMA不能线形地访问系统存储器中的缓冲器。当该缓冲器接近处理时,事实上它被散布到PAGE_SIZE模块中的各个物理存储器中。一个散/聚DMA通过允许每个缓冲器描述符被映射到存储器的物理页中,来帮助处理器和软件驱动器。在本地缓冲器描述符中没有散/聚列表,驱动器一次只能移动一页的数据,然后才能重新启动DMA进行下一页的移动,这样将很大程度上影响系统性能。
* 通常,一个系统由多个执行线程组成。这些线程可能都要转移数据。如果一个DMA由多个通道,并为每个通道都分配一个线程,就能通过这些更多的并行处理来改善系统性能。
* 如果CPU工作在little-endian模式并转移TCP/IP数据包到MAC,通常被迫利用软件例程来与网络order(big-endian)交换字节。一个能够在硬件中以即时模式实现这种转换的DMA,能够降低软件的复杂度并缩短系统设计时间。
* 为了提高效率,PCIe总线接口应该尽可能宽(64位),不过许多外设却只具有窄带宽(16或32位)。如果用DMA进行总线重新适配,则对PCIe接口的性能没有影响,在构建高带宽转移到PCIe接口逻辑之前,DMA可以对较小的外设进行2重或4重访问。
* 它提供了一个适配层,将基于分组的TLP数据流转换成对线形存储器的并行总线访问。这对于复用已经带有存储器接口(地址总线,数据总线,控制线)的IP模块的设计师来说将带来巨大的收益。他们能够非常容易地将IP模块配置到DMA服务的总线上。
本文小结
利用像散/聚DMA控制器这类先进的载荷存储数据引擎控制器,FPGA系统设计师能够改进与基于PCIe的系统设计相关的软硬件中普遍存在的吞吐率和延迟方面的缺陷。
作者:Cort Lansenderfer
LatTIce公司
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)