本文根据自己最近看PCIE一些文章的基础上总结备忘,供自己日后学习参考。如有错误之处,请广大同行指正,谢谢!!!
PCIE采集卡数据传输总结
PCIE采集系统中数据带宽一般比较大,为了提高传输效率往往会使用DMA方式进行数据传输。 PCIE采集卡基于FPGA设计,FPGA内部需要设计几个重要模块:
a) DMA控制器
b)缓冲单元
1.FPAG先将外部采集的信号缓存在缓冲单元中,
2.计算机主机发起一次DMA读请求,具体过程是计算机通过memory写方式向PCIE设备写入一些参数,包括DMA对应的计算机内存物理地址(此处为计算机中的DDR物理地址,计算机需要申请一块内存用来缓存PCIE板卡通过DMA发送的采集数据),传输长度等信息,然后发送DMA传输命令,待PCIE设备将指定长度的数据传输到计算机的物理内存后,PCIE设备会通过中断通知计算机一次DMA传输完成,此时计算机可以通过各种方式将数据取走。如果是Linux系统,可以通过mmap映射的方式将这段物理内存映射到用户空间,应用程序可以通过映射到用户空间的虚拟地址直接获取数据。
3.计算机怎么知道向FPGA的哪个计算器写入传输参数?
一般情况下,可以使用PCIE设备枚举过程中计算机分配给PCIE设备的PCIE总线地址(这个地址写在PCIE设备的bar空间),这个地址在Linux系统中可以使用pci_resource_start函数获取,获取的是物理地址,还需要通过ioremap函数将其映射成虚拟地址,才可以向PCIE设备的空间写入参数。
未完待续。