基于PCIe的FPGA与DSP间高速数据传输测试

引言

  结合我前面两篇文章对FPGA和DSP两边的实现,本文对整个测试结果做一个总结。我用的FPGA和DSP都是国产的,对标Xilinx的XC7VX690T FPGA和TI的TMS320C6678 DSP。DSP作为RC,FPGA作为EP,实现DSP通过PCIe接口读写FPGA外接的DDR。

FPGA接口写时序图

  总共的数据量是640×512×8bit,是一帧图像的大小。具体的数据是我生成的,不是真正的图像数据。DSP端这些数据是以字的方式存储的,一共有81920个字节,换算成16进制就是0x14000。下面的图是在PCIe IP的AXI接口处抓到的波形,可以看到最后一个写进去的数据是0x13FFF,说明数据都写进去了。
在这里插入图片描述
  下面的图是详细的写数据的波形,数据位宽是16字节,突发长度是8。在数据最终写入DDR之后,返回成功的写响应。
在这里插入图片描述

FPGA接口读时序图

  下图是连续的读时序图,可以看到最后一个读出来的数据也是0x13FFF,所以读的数据也是没有问题的。
在这里插入图片描述
  下面的图是详细的读数据的波形,可以看到在读地址的请求达到之后,过了一段时间有相应的读数据返回。每次读数据之间的间隔时间也比较长,这里的主要应该是访问DDR的时间限制了传输速率。
在这里插入图片描述

DSP PCIe DMA速率测试

在这里插入图片描述
  上图是DSP端的传输速率测试结果。为了让测试的结果更加准确,在每次大批量数据传输之前我都先传1字节数据,用来计算一些函数调用、中断服务之类的额外开销,然后在后面的计时结果中减去这部分额外的时间。
  PCIe DMA的有效写速率和有效带宽占比:
640 × 512 × 8 b i t 205200 n s = 12.775 G b p s \frac{640\times512\times8bit}{205200ns} = 12.775Gbps 205200ns640×512×8bit=12.775Gbps
12.775 5.0 × 4 × 100 % = 63.88 % \frac{12.775}{5.0\times4}\times100 \% = 63.88\% 5.0×412.775×100%=63.88%
  PCIe DMA的有效读速率和有效带宽占比:
640 × 512 × 8 b i t 819888 n s = 3.197 G b p s \frac{640\times512\times8bit}{819888ns} = 3.197Gbps 819888ns640×512×8bit=3.197Gbps
3.197 5.0 × 4 × 100 % = 15.99 % \frac{3.197}{5.0\times4}\times100 \% = 15.99\% 5.0×43.197×100%=15.99%

DSP EDMA速率测试

在这里插入图片描述
  上图是利用EDMA进行读写测试,测试结果如下:
  EDMA的有效写速率和有效带宽占比:
640 × 512 × 8 b i t 203003 n s = 12.913 G b p s \frac{640\times512\times8bit}{203003ns} = 12.913Gbps 203003ns640×512×8bit=12.913Gbps
12.913 5.0 × 4 × 100 % = 64.57 % \frac{12.913}{5.0\times4}\times100 \% = 64.57\% 5.0×412.913×100%=64.57%
  EDMA的有效读速率和有效带宽占比:
640 × 512 × 8 b i t 789756 n s = 3.319 G b p s \frac{640\times512\times8bit}{789756ns} = 3.319Gbps 789756ns640×512×8bit=3.319Gbps
3.319 5.0 × 4 × 100 % = 16.60 % \frac{3.319}{5.0\times4}\times100 \% = 16.60\% 5.0×43.319×100%=16.60%
  整体来说,EDMA和PCIe的DMA,传输速率都受到DDR的访问限制,因此两者的性能是非常接近的。但是EDMA更加灵活,所以我个人还是比较推荐用EDMA。

MSI中断

  DSP的MSI中断就有点奇怪了。我做了一个简单的发送MSI中断的控制器,就是我前面提到的PCIe中断控制器。当DSP向它写入MSI中断向量号,并且将使能位置一之后,它就会通过PCIe发送指定的MSI中断。下图是它发送16号MSI中断的时序图。
在这里插入图片描述
  DSP端确实是收到了MSI中断,但是跟文档描述的不符。文档说核0只能收到0、8、16、24号中断,但是我却也能收到1号和2号中断,查询MSI的中断向量号,结果都是0号MSI中断。只能说它实现了接收MSI中断的功能,但是无法区分不同的MSI中断。
在这里插入图片描述

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它可以实现高速数据采集的功能。您可以使用FPGA来构建数据采集系统,通过其并行处理和硬件加速的特性,实现对高速数据的快速处理和存储。 在FPGA中,您可以使用硬件描述语言(如Verilog或VHDL)编写代码来描述数据采集的逻辑功能。通过对FPGA进行编程,您可以定义输入和输出接口,配置数据采集时钟、触发条件以及数据存储方式等。同时,FPGA还提供了丰富的内部资源(如片上存储器、DSP模块等)来支持高速数据处理和存储需求。 针对高速数据采集,以下是一些常见的技术和方法: 1. 并行采样:利用FPGA的并行处理能力,同时采集多个数据通道的信号。通过合理设计并行结构和数据流控制,可以提高数据采集的速度。 2. 高速ADC接口:选择适合高速数据采集的高速ADC芯片,并使用合适的接口协议(如LVDS、JESD204B等)将ADC与FPGA连接起来。这样可以保证高速信号的准确采样和传输。 3. 数据缓存和存储:在FPGA中使用片上存储器或外部存储器作为数据缓存和存储单元,以应对高速数据流的处理需求。合理的数据缓存和存储设计可以提高数据采集的稳定性和流畅性。 4. 数据传输和接口:根据应用需求选择合适的数据传输方式和接口,如PCIe、Ethernet等。这样可以实现数据的快速传输和远程访问。 需要注意的是,在进行FPGA高速数据采集时,需根据具体应用场景和性能要求进行系统设计和优化。这包括选择合适的FPGA型号和外围器件、优化硬件逻辑设计、合理调整时钟频率和数据处理流程等。同时,也需要充分了解FPGA开发工具和相关编程知识,以便进行有效的开发和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小裘HUST

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值