我使用通过PCI Express(PCIE)连接到计算机的Arria V GX FPGA入门套件。在套件中,我使用管道传输实现了直接存储器访问(DMA)读/写。 DMA从PC内存中读取数据,然后通过PCIE写入PC内存的另一个区域。
我使用的IP是用于PCIE的Avalon-MM Arria V硬IP,配置为:Gen1 x8,32位Avalon-MM地址宽度。 PC上的软件是C ++的Visual Studio编程和使用12.0.0 Jungo Windriver。
该项目工作正常,但转移速度,特别是阅读速度太慢。我用这个DMA完成了很多项目,所以我认为这个问题不是因为我的DMA。我检查了项目的Altera SignalTap,并发现: +(图1)自DMA开始读取(第一次“读取”信号被断言)到第一个返回数据(第一次'readdatavalid'信号被断言)以来,总是有超过100个时钟 +(图2)之后,两个返回数据之间总共有大约20到50个待机时钟,这太慢了。
我的设计需要从PC读取数据:(1)数据非常少(每次约5到10个数据); (2)随机访问(这就是我没有使用突发传输的原因)。但每次新的转移会话开始时,一开始就浪费了100多个时钟,我不知道为什么。总而言之,Avalon内存映射读取管道大约需要200个时钟才能通过PCIE从PC内存中读取5个数据。
我的问题是:(1)为什么通过PCIE在读取管道传输中浪费了这么多时钟? (2)我还能做些什么来加快转移率吗?
非常感谢
答案 0 :(得分:0)
PCIE的设计目的是最大化I / O带宽,但不能最大限度地减少延迟。在我的设计中,我经常看到系统内存的第一次读取响应有这么长的延迟,我对如何减少它没有任何建议。
要从PCIE获得性能,您必须使用突发传输和流水线请求围绕延迟进行设计,以便在飞行中保留许多请求以最大化带宽。