当前位置: 首页 > 范文大全 > 公文范文 >

基于FPGA的PCI,Express,3.0高速DMA控制器设计

时间:2022-03-23 09:26:45  浏览次数:

申请物理地址连续的一段内存空间(注:scatter/gather方式为非连续地址),然后将这段空间锁住以防止其他程序占用。

(2)FPGA内用户的数据达到一定规模后向PC发送中断,通知PC读取这些数据。

(3)PC接收并分析该中断,写BAR0空间内寄存器,包含上述物理地址的起始地址、空间大小,然后启动 DMA。

(4)FPGA内的DMA引擎接收到启动DMA的命令后,主动组织PCI Express 存储器写TLPs包发送到 PC,其中包的数据即用户需要发送到PC的数据。DMA引擎会自动填充TLP包逐一增加的地址等信息,直到达到用户设定的长度。此时,上述物理内存均为用户需要的数据。在此过程完成后,FPGA向主机发送一个中断。

(5)PC 接收到中断后,然后读取BAR0空间状态寄存器判断是中断类型,然后做相应的判断。将这段物理地址的数据拷贝到用户程序能够访问的空间中,然后回到步骤2)。

数据从PC传输到板卡的过程为:

(1)PC申请物理地址连续的一段内存空间(注:scatter/gather方式为非连续地址),然后将这段空间锁住以防止其他程序占用。

(2)FPGA内空闲的数据空间达到一定量后,向PC发送中断,通知PC发送数据。

(3)PC接收并分析该中断,写BAR0空间内寄存器,包含上述物理地址的起始地址、空间大小,然后启动DMA。

(4) FPGA内的DMA引擎接收到启动DMA的命令后,主动组织PCI Express存储器读TLP包发送到PC,其中包的数据即用户需要发送到PC的数据。DMA引擎会自动填充TLP包逐一增加的地址等信息,直到达到用户设定的长度。PC收到读请求,会自动将上述物理空间的数据组织成完成TLP回送给FPGA,FPGA接收分析后按顺序存放在相应的缓冲内。在此过程完成后,FPGA向主机发送一个中断。

(5)PC接收到中断后,然后读取BAR0空间状态寄存器判断是中断类型,然后做相应的判断。将这段用户程序中新的数据拷贝到物理空间中,然后回到步骤2)。

4 DMA控制器设计

根据上文的DMA传输过程,本节详细描述了DMA控制器的设计,其中,DMA主模块主要用于建立DMA数据通道及发送DMA读写请求,DMA从模块主要用于传输DMA控制指令信息,命令传输单元模块主要用于传输用户自定义的控制指令。下面对主要模块的详细设计展开介绍。

4.1 DMA主模块设计

DMA主模块提供2个DMA通道,如图4.1所示。DMA通道0为PC机从PCI Express接口读取数据的DMA;DMA通道1为PC机往PCI Express接口发送数据的DMA;每个通道都可以支持单独编程、控制和状态检测,具有很高的灵活性。Request & Completion控制逻辑主要负责处理DMA通道的读/写请求,同时也接收来自硬核的读完成包。其中Request逻辑负责接收PCI Express IP硬核的Completer reQuest模块的消息中断请求,同时将来自用户应用层存储器读/写请求并将其发送到Requester reQuest模块。当出现一个或多个通道请求时,DMA读写请求逻辑需要屏蔽掉那些没有足够Credit的请求,再根据循环优先级机制去筛选请求。Completion逻辑接收来自PCI Express IP硬核Requester Completion模块的存储器读完成包,匹配相应的完成者资源、DMA通道、完成者映射的本地地址和通知相应的DMA请求通道准备接收读完成包、并将数据包内的有效Payload传送给应用层。Completion 0、Completion 1管理Non_Posted请求,当在给定时间里若没有接收到完成包,其中的超时错误检测逻辑则发出终止传输的标记信号,每个Completion均分配tag号,范围从0到7。另外,外部数据接口也由主模块控制,以标准FIFO接口的形式提供输入输出数据接口。

4.2 DMA从模块设计

从模块接收来自Xilinx PCI Express IP硬核的数据传输请求并提供用户应用层数据包需要的控制信息,如初始地址,基地址寄存器(BAR)和数据包长度等信息。当应用层接收到从模块的信息之后,决定是否继续正常传输,或者是抛弃该数据包。从模块中含有PCI Express的配置信息,PC终端发起的读取配置信息请求是在从模块中得到响应;同时,上位机发出的配置信息写入请求也是将指令写入从模块中。状态操作过程如图4.2所示:

4.3 命令传输单元设计

除了基本的读写数据操作之外,为了方便本设计中的FPGA与PC机进行通信,提高系统的灵活性,还提供了一组命令控制总线。命令的读写是以寄存器的形式进行的。在配置信息表中单独划分了一块空间作为命令寄存器,PC机可以通过基本的写配置信息和读配置信息操作通过PCI Express表访问该块地址。在DMA控制模块中将该块寄存器的信息引出为一组命令控制总线,可以为PC机和FPGA的自定义通信提供良好的支持。

4.4 DMA通道控制状态机设计

结合前文中所述的DMA位于从控的从模式工作模式和DMA位于主控的主模式工作方式,得到DMA的整体工作流程图,如图4.3所示,

初始IDLE状态,等待寄存器值载入,进入RUN状态。在RUN状态时,若有数据发送请求则进入DATA REQUEST状态发送请求;此时若应用层发送停止指令,则进入CPL ABORT状态;若收到结束信号完成请求则进入WAIT COMPLETION;若收到结束信号且无完成请求则进入COMPLETE。

值得指出的是,虽然DMA控制单元具有2个DMA模块分别工作,但是每一时刻只能支持一个DMA模块在工作,也就是说,DMA控制器是提供的半双工接口,不能同时进行读写操作,只能在不同时刻进行读写操作。PCI Express IP硬核在彻底结束一次传输之前,必须收到所有的完成包,并且保证所有的完成包的状态都是正常的情况,才能彻底结束传输。如果应用层要求提前中断完成包的接收,会导致数据的不可控情况产生,导致异常错误。

为了方便用户和数据采集/回放系统连接,我们在DMA的收发终端分别加入了一级FIFO作为数据缓存。最终实现的DMA控制器的总体架构如下图4.4所示。

5 系统测试与验证

系统验证采用的是Xilinx VC709 FPGA开发板,计算机主板采用华硕的X99-DELUXE 主板,PCI Express时钟由主板提供的100MHz,经过IP硬核中的时钟模块生成250MHz用户时钟,用户数据宽度256bit(X8通道),因此理论上单工带宽最大可达8GBytes/s。FPGA芯片采用Xilinx公司的XC7VX690T-2FFG1761C。FPGA开发环境采用的是Xilinx Vivado 2014.4。

实验测试目的是为了验证设计功能的正确性以及系统的性能可靠性。功能检测方面,数据从FPGA到PC传输时,FPGA内部产生递增数据,PC端完成数据的检测。而数据从PC到FPGA传输时,PC端产生递增数据,FPGA完成数据检验检测。经过大量的测试表明,数据从PC到FPGA以及从FPGA到PC的传输,数据没有发生传输错误,因此DMA控制器功能测试正确。

性能测试,主要衡量的是传输带宽的大小,这项指标是系统设计的重点。我们通过在PC端上位机端里加入计时模块,来测定传输的速度。如图5.1所示,在DMA大小不同时,传输速度的大小。当DMA大小16MBytes时,DMA读/写速度均在4900MBytes/s以上。满足设计性能指标。

可靠性测试,主要衡量的是系统在长时间工作时的稳定性。测试时通过PC端上位机每隔10分钟记录当前传输速度,绘制了图5.2时间-速度图。经过测试表明,无论是数据从FPGA 到PC传输方向还是从PC到FPGA方向,速度均稳定保持在4900MBytes/s以上,达到了系统设计指标。

6 结语

本文首先阐述了PCI Express的技术特点,重点介绍了DMA控制器设计与实现过程。为了测试设计的功能、性能指标及稳定性,本文搭建了PCI Express 3.0 X8通道的传输系统,并且测试了半双工传输条件下的各项指标。从实验结果看,本文设计的DMA控制器能够稳定的工作,且DMA读/写设计带宽可以达到4900 MBytes/s以上,经过长时间的测试,速度没有下降,可靠性也达到设计指标。本文设计可以广泛应用与雷达、通信、测试测量仪器等需要高性能传输的应用系统中,具有较高的应用价值。

参考文献

[1]Ravi Budruk 等著,田玉敏,王崧,张波(译).PCI Express 系统体系结构标准教材 [M].北京:电子工业出版社,2005.

[2]马鸣锦,朱剑冰,何红旗,杜威.PCI、 PCI-X 和 PCI Express 的原理及体系结构 [M].北京:机械工业出版社,2006.

[3]王齐.PCI Express体系结构导读[M]机械工业出版社 2011.9

[4]Xilinx Inc. PG023:Virtex-7 FPGA Gen3 Integrated Block for PCI Express v3.0 November 19 2014.

[5]Hossein Kavianipour, Christian Bohm. High Performance FPGA-based Scatter/Gather DMA Interface for PCIe. IEEE: Nuclear Science Symposium and Medical Imaging Conference,2012.

[6]Sarun O.S. Nambiar, Yogindra Abhyankar, Sajish Chandrababu. Migrating FPGA based PCI Express Gen1 design to Gen2.IEEE:2010.

收稿日期:2015-07-14

作者简介:业青青(1987—),男,汉族,江苏南京人,硕士研究生,学生,研究方向:嵌入式系统与固态存储技术。

推荐访问: 控制器 设计 PCI FPGA Express