基于PCIe总线的多路复用DMA高速传输系统的设计
摘要:文章针对双处理器设备问的数据通信提出了基于PCIe非透明桥的高速传输系统的设计方法。该方法应用于视频转码设备,实验结果表明当转码设备作为外设与PC主机进行通信时,采用多路虚拟DMA方法的数据传输总带宽可以稳定的达到1100MB/s,为实现多路实时转码提供了前提保证。文中还重点介绍了虚拟DMA通道的实现、双系统问通信模型的设计及传输系统性能优化分析。
关键词:PCIe总线 DMA传输 非透明桥 虚拟通道
0 引言
两个处理器系统的数据通信方式可以采用网络通信方式或者总线连接通信方式等。网络通信的带宽约为1Gbps~4Gbps即 128MB/s~512MB/s,在不同的工作条件下,网络带宽不同,网络信号存在不稳定性,这使得系统问建立的通信系统存在影响传输速率的不可控因素。 PCI Express作为目前使用最流行的总线,广泛用于主机与外部设备间通信,16bit总线宽度的PCI Express2.0速率达到16GB/s(双工),远远超过了网络通信速率且不需要配置网络环境。
本文设计的传输系统应至少提供8路传输通道供转码设备与主机进行通信,然而在以PCIe接口芯片设计传输系统时,芯片中有限的DMA通道(一般为4路)难以满足转码设备多路实时转码的传输要求。因此,如何实现多路虚拟DMA通道、传输速率满足要求且保证各通道传输速率均衡是软件设计的重点。在此之上,文中将进一步探讨如何降低传输系统对处理器系统CPU资源的占用率。
1 系统模型设计及系统通信机制
1.1 系统模型设计
数据传输系统软件模型可分为3个层次,包括设备驱动层、系统应用层和用户接口层。系统结构如图1所示。
薛巨峰,副教授/硕士,主研领域:自动化控制技术和加工工程自动化技术。黄爱娟,硕士生,研究方向:计算机应用技术。
由图1可知传输系统由设备驱动模块、DMA管理模块、系统通信模块、客户端通信模块和客户端API组成。
设备驱动程序用于在处理器系统中识别PCIe接口芯片设备;DMA管理模块(只在主机端存在)用于管理和分配处理器系统需要进行数据传输时对DMA通道的使用请求并完成数据传输功能;系统通信模块用于处理器系统间的消息传递;客户端通信模块负责响应客户端与传输系统的链接请求和数据传输请求;客户端 API(Client Register)是提供给用户进行链接和传输请求的函数接口。
1.2 系统通信机制
在主从机端分别运行传输系统应用程序(Plx_Server)完成传输系统的建立,Plx_Server等待客户端调用Client Register进行链接请求。当主从机端的Plx_Server都有可配对的客户端链接请求,则为可配对客户端建立1路虚拟DMA传输通道。客户端使用Plx_Server为其分配的传输句柄(Client Socket)即可实现数据收发和断开传输链接。
2 系统硬件设计
开发PCIe接口可以采用FPGA设计PCIe接口,但由于PCIe总线规范较复杂,这种开发方法难度很大;而采用专用PCIe接口芯片,可以免除繁琐的时序分析,缩短开发周期,降低开发成本。本系统选择后者,PCIe接口芯片选择为PLX公司开发的PEX8619接口芯片。
PCIe桥连接方式有2种:透明桥(Transparent Bridge)和非透明桥(Non-Transparent Bridge)。总系统中存在两个独立的处理器,此时使用透明桥方式不利于整个系统的配置与管理,可能出现PCIe总线地址的映射冲突,此外不能使用PCIe透明桥连接两个PCIe Agent设备,如x86处理器。采用非透明桥可有效的解决这些问题,提高PCIe传输系统的可移植性。非透明桥不是PCIe总线定义的标准桥片,但是这类桥片在连接两个处理器系统中得到了广泛的应用。
PEX8619支持NT桥功能,芯片在智能配置器模式下的软件模型如图2所示。
在图2中有两个用于设备识别的配置空间寄存器(CSR),离内部虚拟PCIe总线较近的称之为虚拟接口(Virtual Interface),离得较远的称之为链路接口(Link Interface)。
在智能配置器模式中,NT桥链路端口连接的是从机的地址域,从机系统只管理NT桥链路接口Type 0功能(NT设备功能)。NT桥虚拟端口连接的是主机的地址域,主机管理所有NT桥虚拟接口Type 0功能和Type 1功能(DMA引擎功能)。跨域传输是通过地址转换机制的路由来完成的。
3 系统软件设计
3.1 设备驱动程序
主从机端分别安装PLX公司提供的PLX_SDK_v7_11_Final设备驱动程序,从机端识别出NT桥的NT设备,主机端识别出NT桥的NT设备和DMA引擎。
3.2 系统应用程序
PCIe传输系统Plx_Server与客户端API(Client_Register)是一对多的关系,传输系统最多允许128对客户端进行链接和数据传输,传输系统的函数关联图如图3所示。
3.2.1 系统初始化
系统初始化主要是对PCIe设备进行初始化配置 和地址映射等工作。调用系统
- STM32 八路AD转换用DMA传输调试成功,DMA传输不错位(11-23)
- 视频并行处理系统分析与设计(08-06)
- 一种具有主从自适应功能的CPCI通用处理模块设计(01-18)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)