基于现场可编程逻辑阵列的高性能PCIe直接存储器存储接口外文翻译资料

 2022-08-31 17:05:32

英语原文共 5 页,剩余内容已隐藏,支付完成后下载完整资料


基于现场可编程逻辑阵列的高性能PCIe直接存储器存储接口

摘要:我们设计一套用于南极Icecube中微子观测站的履带引擎触发器的数据传输设备。这套设备适用于一切通过PCIe在可编程逻辑器件和主机的系统存储间的双向直接存储的数据传输。设备包含一个DMA控制固件,若干检查工作台,一个Linux驱动以及一个关于DMA ,可编程逻辑器件寄存模块的PIO传输器以及FIFO的用户应用。利用Xilinx总线控制的DMA使用Xilinx VC707 Virtex-7主板提供达到748MB/s的读写速度。硬件部分已证实不同的FPGA要配合使用不同的电路。

关键词:数据采集,数据交流,数据传输,FPGA,linux,电子读出器,触发器

一 简介

使用专门的硬件是一种常见的提升实时计算速度的方法。这通常是一种复杂但是实际可行的方法。例如在逻辑在FPGA中执行时。当PC中执行的计算要求硬件加速,通常外部安装的印刷电路板形式的FPGA就需要一个合适的接口和计算机的主板连接在一起。这个接口通常是这类系统最关键的部分,而对这部分设计的努力会很明显地表现在可以数据交流的效率提高中。最简单的解决方法通常是利用一个安装在PC机箱中的FPGA评估板通过PCIe总线进行交流。这些板可以从多家厂商处得到。其他的传输连接也是可行的,特别是在FPGA电路外接在计算机上,例如以太网,千兆以太网等。但是他们都增加了等待时间和传输费用,导致传输速度的明显下降,除非数据容量很大。

虽然我们的主要应用,Track Engine,只需要60MB/s的传输速度,但是我们的目的是从一个可用资源中获得可以实现的最大速度。而这个通常受限于应用的逻辑需求(大于50%)。利用带有DMA的PCIe可以达到我们的目的,同时为了提高传输效率,我们使用一个置于FPGA中的总线控制DMA。一个置于PC主板上的系统DMA需要两个步骤从主存储器到临时DMA本地寄存器取得数据并且将他们发送到目的地,而总线控制着DMA可以仅以一步做到同样的事情从而节省宝贵的时间并且同时减轻系统DMA的工作量。

我们建立了一个包含一个DMA控制固件,若干检查工作台,一个Linux驱动以及一个用户应用的设备。目的是设计一个高负载的系统,在这个系统中主机的处理单元高负载(95%的CPU负载)并且FPGA的硬件资源被大量使用(几乎所有资源在50%以上并且几乎不会遇到时序约束)以及在同时允许高带宽(最低60MB/s)。建立一个可以易于移植给其他FPGA和用于其他应用的系统也是我们的目的。

在多曲柄式发动机,分散/聚集DMA被使用的地方有几种DMA解决方法在商业上是可行的。在一个多曲柄式发动机DMA中,多个DMA进程并行,每个进程使用自己的PCIe链接,用于提高资源的使用率。分散/聚集DMA从一个缓冲区的链接表中收集数据而不是像传统的DMA一样只能从一个物理存储器中一个连续的部分中读取数据。这个缓冲区的链接表由存储器中多个不连续的部分组成的。通过这个方法,分散/聚集DMA可以比传统方式传输更大量缓冲区的数据,因此减少了给定传输量所需求的DMA的数量从而明显的提升了各方面的性能。其他的方式也是可行的,但是他们中们有一种可以在减少主机负载以及FPGA的资源利用上提供更简洁的设计。

二 主应用

在南极洲冰层的深处,一个三维数组存储了超过5000台相机观测器的数据。相机用于记录在冰层中运动的相对带电粒子运动所发射的切伦科夫光来确定他们的运动轨迹。相机检测器将观测数据以及其时间邮戳一同发送,持续通过线缆传输到线缆集线器(the StringHub)处。来自于每个StringHub的数据流之后会被融合在一起,按时间排序并发送到Global Trigger(一个用来将引人关注的数据从噪声中区分出来的单元)。即使这样合并,排序这些数据,当前也不可能实时地呈现这组数据(大约500MB/s)并且给这组数据施加本地约束。这意味着碰撞信息只有在同一线缆上的相邻或次相邻的相机检测器被激活时才会被考虑。演变成数据数量降低至原费率的五分之一。Monte Carlo研究表明对于高能事件(通常包含具有能量超过100GeV的介子)实验中的主要目标这类滤除对触发的效率几乎没有影响。但这不是对于低能事件(10-100GeV)的情况。这种情况在其他的研究(例如暗物质的研究)中引人关注,并且我们致力于在这一能量范围内恢复出发效率。

其中一个尝试便是Track Engine Trigger。方法是从各个StringHub中收集没有过滤掉的数据,合并并按一个时间流为他们排序,在这之后计算出可能的轨迹。通过在一个短滑行时间窗口内配对碰撞并找出持续更新的两个空间方向柱状图中的峰值的方式寻找轨迹(见fig1)。这个方法不仅使用了全部组采集的数据,并且有效除去背景噪音(在Monte Carlo研究中表明)。

合并排序将在PC中处理,在这里排序过的数据中与轨迹寻找无关的信息也会被去除。这个行动将带宽需求减少至60MB/s。结果的数据流在这之后发送到FPGA中,在这里进行角度数据的评估以及触发信号的生成。结果在之后送回PC并发送到Global Trigger。

PC的规格事先由Icecube Collaboration决定。为实现对原数据的实时排序,合并,过滤,12种可以得到的核心中只有一个可以分出用作同FPGA和Global Trigger进行数据交流。FPGA同时具有内部和外部的约束条件。它必须安装在一个开发好的板上(为了减少费用以及建立所耗费的时间),必须有正确的规格(为了匹配安装在机架上的pc)以及足够大的空间去包含轨迹算法逻辑电路,DMA,PCIe接口逻辑电路。在调查中只有一个主板和FPGA的组合符合我们的要求。

对于DMA以及PCIe的选择基于测量的结果。这个结果要显示在主板上的通过PCIe的程序规划输入输出没有表现足够的性能也没有通过以太网和嵌入式系统进行交流。一个嵌入式设计也很难去匹配一个包含DMA,PCIe接口逻辑电路和轨迹寻找算法逻辑电路的FPGA。

排序好的数据流包括碰撞的时序信息被发送到FPGA中,在这里每个碰撞的信息有11B的空间。为了进行双字节排列,它会被排列进3个双字节中。这样做是为了简化在数据通过PCIe总线被分解成双字节时的故障检查。

典型的传输大小在960点或是2880双字节。在FPGA中的轨迹寻找算法同时也需要一个双字节。

目前,一个带有安装好的FPGA和空置的FPGA的PC已经在南极配置完成。那里同时也有一个用同美国Madison的测试设备相同组件的测试安装。

三 设计

通过PCIe连接进行的数据交流遵循PCIe标准。串行总线有一层,在这层中根组件和几个终端不论是直接还是使用开关都要通过PCIe点对点连接相连。根组件也负责总线层和CPU以及主存储器的连接。

在PCIe规范中,数据交流有三个抽象层(传输层,数据链路层,物理层)具有灵活性和鲁棒性。传输层的主要任务是管理数据打包以及数据包流的控制。数据链路层负责其他两层间的连接和错误管理。而物理层控制物理连接,8b/10b编码,加扰,接口初始化。(见fig2)

在FPGA中这三个抽象层在Xilinx PCIe端点模块中执行。物理层和数据链路层只在内部应用而传输层界面用于到用户硬件的接口。这种类型的接口连接通常用于使用软核CPU的嵌入式系统(例如Microblaze系统)。然而嵌入式系统需要大量的片上资源,限制了宝贵的用户逻辑指令的空间。而我们的解决方法是接口直接连向终端,因此嵌入式系统在FPGA上只占用一小部分资源。为占用的部分就可以提供给用户应用。

简易图解fig3展示了在主机上运行的用户应用如何管理置于FPGA上的DMA控制器。用户应用将请求发送到驱动器。在这里执行任务请求并将结果反馈给用户应用。

四 固件

固件是一个基于Xilinx总线控制DMA的DMA控制器,并且为了可以容易满足严格的时间要求以及可以易于同将来的设计合并,固件设计使用最低限度的引脚。它使用传输层的控制信号和流控制销将数据传输至双钟FIFO或是存储卡插槽中。它当前拥有64位的接口并使用4时代2通道(见fig5)。用户接口逻辑严格控制数据通过双钟FIFO和控制信号进入双触发器同步装置(在我们的情况中是重置按键)。对于传输至用户逻辑的数据,FIFO起初使用先入后出的方案,但是在需要的时候可以改变方案。任何附加的控制信号可以很容易的由同步装置传送进去。(见fig4)

一些策略采用提高固件的资源效率从而得到更好的时间结果。数据流在资源和目的地间的短距离内必须遵守一个传输规则,特别是目的地有多个的情况下。一个短距离是个相对项并且和一个时钟周期的一小部分同步。通常拥有高时钟速率的关键路径必须要看尽可能的使用较少的逻辑电平以及尽可能的短一些。非超频过程和状态机必须按照说明去检查是否又不完备的地方以防合成装置误动并影响时间结果。用于读取非动态的不同设置的值被去除掉。流量控制的信贷信号在DMA配置成流模式时也会被去除。时间要求不严格或是不经常执行的计算会从硬件移到软件,在这里驱动器会执行计算并将结果存储到相应的寄存器。根据区域(资源采用地点)合并和实现选项会重复依照经验改动直到获得最好的配置,并且速度(定时性能)也被设定。

为了在不同的最先进的FPGA上测试设备同时扩大其应用范围设备采用Xilinx 7系列的FPGA。主要的不同是新的更大的终端以及用于它的新的接口。一个典型的7系列终端需要两倍于6系列的资源(在触发器和块随机存取存储器中测定)。新接口是AMBA AXI4总线。迁移包括协议转换和数据记录。

五 软件

驱动是为linux内核设计并且表现为一个标准PCI设备。标准读写以及输入输出控制代码控制输入和输出。矢量写入功能以先将缓冲区链表合并至一个单独缓冲区再使用标准写入的方式实现。驱动类似于一个联锁装置,它允许进程在一个写或读的请求到达时停止以及让中断子程序启动进程和处理数据。(见fig6)

信号,自旋锁和内存屏障用于处理竞态条件并为一个可靠的稳定的传输留有余地。由于低负载对于我们的应用的限制,我们需要一个尽可能高效的驱动。我们要对这些条件做相应的准备。

首先,使用中规模集成电路给中断处置加速。通常一流中断使用是与其他设备共享的。每当一个中断引脚处于高电平,终端处理程序要循环访问所有设备的状态寄存器,共享那个引脚用于找出中断源然后仅仅报告收到信息。除了这个程序中的竞态状态的风险,这个方法也对系统性能有着消极影响。MSI虽然是点对点的并且是原始的在PCIe层中断信号化的方法,它不需要识别和确认,因而提高了性能。

第二个需要考虑的是驱动的内存分配。人工确认所需要的内存空间并限制内核子程序所需要的最大内存空间,这样可以避免额外的花费。这里我们使用子程序get_free_pages()并保持内存大小是4KB的倍数。

第三个考虑也是关于内核空间的内存分配。系统内存以不同的硬件性能被分成几个不同的区域。Linux内核支持三个区域,普通内存,DMA内存,高端内存。普通内存来自于普通的内核内存分配。DMA内存用于保证可以映射到物理连续内存。而高端内存主要用于用户空间分配。一些处理器(例如x86)无法在普通内存中使用DMA并且大部分处理器在高端内存中不支持DMA。当一个不支持DMA的驱动器要在DMA区域外使用DMA处理内存,一个叫做回弹缓冲区的临时缓冲区将来回进行所需数据的复制。通过积极地界定和控制内存分配,我们可以可以避免回弹缓冲区并促进提高吞吐率。

最后的考虑是分配好的内存映射到DMA的方式。通常缓存一致用于映射执行于驱动安装的时候并在退出时去除的场合。这个模型很直接并易于使用但是它同样需要总线上的影射的寄存器一直被占用以及高速缓存存储器中全部的缓存区。它同样倾向于最优化以支持大部分的处理器系统和操作系统。这被使用流映射的方式避免。这种方式中应设置在传输是暂时执行,并在传输间停止。

六 测试

交流设备已经被普遍地测试证实。固件的独立部分已经用随机输入数据的波形旋回仿真测试。PCIe总线连通性,数据传输和DMA功能实时性已经用Chipscope Pro(一个芯片上的逻辑分析固件)证实。Chipscope有两种使用方式,在综合启动前像内置固件一样或在合并后像内置的分别合成快。在我们的实验中我们发现后者更易出现错误,所以我们选择前一个方式。另一个问题来自于Chipscope模型的尺寸。为了保持实验结果的可靠性必须要符合时序,只有一个大型的Chipscope模块是不可能的。作为替代,我们要使用复数的有着最小数据深度(数据样本)和广度(数据输入)的模块。为了避免每个模块的重复触发功能,一个单独的模块作为星型拓扑中的主触发器并且输出信号在所有其他模块之前。

软件由/proc接口和缓冲比较测试进行验证。性能测试由缓冲比较测试和同时chipscope数据验证进行。设备在Xilinx VC707(Virtex-7)评估板,Xilinx KC705(Kintex-7)评估板,HTGlobal Virtex-6(-2)评估板和Xilinx ML605(Virtex-6)评估板上进行以确保可移植性和可以处理系统错误的能力。结果将和在Virtex-5上运行的MPRACE框架进行对比。主机使用GA-H55M-UD2H,Intel i3-530和4GB DDR2的linux内核2.6.34.9-69。

七 结果

测试获得的最高传输速率是784MB/s的读速度和748MB/s的写速度(见f

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[147770],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。