在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: erit

[原创] PC和xilinx fpga通过pcie通信的问题

[复制链接]
发表于 2012-10-18 09:28:41 | 显示全部楼层
最好用DMA的SG模式传输
发表于 2012-12-18 10:14:46 | 显示全部楼层
最好用pcie +dma sg模式。内核里面能开的连续物理地址有限,最好用dma的sg模式,直接把数据写入到xp的用户空间。
pcie的逻辑主要修改例程的app下面的ep_rx  ep_tx 控制
发表于 2012-12-30 22:58:40 | 显示全部楼层
版主正解
发表于 2013-1-6 22:54:07 | 显示全部楼层
用c4gx和v5做过pcie,有兴趣交流的可以加我的群,242528046。
发表于 2013-1-9 17:07:12 | 显示全部楼层
先说一句,我做FPGA硬件实现,和嵌入式部分一起调试过从FPGA经PCIe发送数据到ARM。以下回答如有问题请指出。

大家好,我想在windows xp的平台下通过pcie接口和xilinx fpga virtex-6进行高速数据通信(pcie core是virtex-6 integrated block for pci express,version 1.6 ),可是我对驱动和pcie都不是很了解,希望高手能够不吝解答我如面的疑惑:
1.pcie 配置区中的bar0,bar1。。。bar5对应的是memory是实际空间吗,例如我将bar0设为1M的memory,那是不是就有1M的实际的ram空间和她对应。

首先,PCIe空间和CPU的空间是两个不同的地址空间,它们之间通过地址映射关联。这个映射是操作系统通过读取PCIe ROOT配置PCIe系统后的信息后完成的,而ROOT对PCIe系统的配置是PCIe系统初始化的过程中完成的。

PCIe设备中存有需要使用的PCIe空间的大小和类型(I/O,Memory等),PCIe系统初始化过程中,对每个PCIe设备的PCIe地址空间进行配置,这个配置的结果就写入在BAR0~BAR5上。所以,它们实际代表PCIe设备使用的PCIe地址空间段,而它们对应的真正的memory空间则是PCIe设备侧自己的实现。一句话,PCIe设备侧的BAR0~BAR5是供PCIe系统其它设备或ROOT访问的PCIe地址空间(PCIe设备本身内部当然能访问)。

PCIe设备可以申请大的BAR空间,但只实现其中一部分memory空间。

PCIe ROOT(PC上是CPU)本身也可以设定BAR空间,供PCIe设备访问。

在Intel构架中,外设通过PCIe(PCI)总线统一管理;而且,PCIe地址空间和CPU地址空间统一管理。系统初始化后,操作系统为外设已分配地址空间。PCIe设备的BAR空间会映射到CPU地址空间。所以可以认为Windows XP分配了相应大小的memory(可以是虚拟内存)空间给PCIe的BAR。

2.在实际操作中如何使用pcie传输数据。例如:我要将adc的采样数据通过pcie传给pc保存。是不是应该将先将采样数据保存到一片ram空间中,再将数据拷贝的bar0所对应的memory中,再通知pc将数据读走。

建议设定FPGA为PCIe Endpoint。adc采样数据通过PCIe主动发给PC的指定内存空间,而不是先存入FPGA内PCIe BAR空间对应的memory空间等待PC来读,因为memory read是Non-posted方式,比memory write慢。

3.如果要求传输速度很快(2Gb/s左右),是不是一定要用dma模式,用pc轮询的方式可以吗(cpu占用率高也没关系)。如果是用dma模式的话,那dma控制器是在pc端的还是在fpga端。

在PC侧,从PCI桥到内存,建议使用DMA方式,而且不进行Cache一直性检查。


总之,我想实现的功能是,fpga将adc采样数据通过pcie接口以2Gb/s的速度(如果达不到可以慢点或将数据压缩)传给pc端(windows xp),如果能告诉我在这样的需求下我该如何实现那更好。

最后:要达到2Gb/s的速率,PCIe用Gen2 x1或者Gen1 x4吧。
发表于 2013-1-14 16:55:24 | 显示全部楼层
回复 18# mymemory


    厉害厉害!我也在使用PCIE,有问题希望能向你请教!
发表于 2013-1-14 22:46:33 | 显示全部楼层
好东西
发表于 2013-1-24 11:18:45 | 显示全部楼层
最好用DMA+中断方式,轮询不行。个人觉得dma的TLP包和read的TLP包通过TC是不一样的。通过交换片时有优先级问题。你会发现你当dma占用很大pcie带宽是轮询的效率极低。
发表于 2013-2-15 09:47:23 | 显示全部楼层
回复 5# eaglelsb
回复 21# tomoowang

我觉得要是往PC上传数据用DMA的话,DMA一定是在FPGA里面吧。因为PCIE的TLP包读和写方式不一样,写操作相对读操作不需要回执吧,所以FPGA里的DMA往PC的内存里写是最快的方式吧。本人对pcie研究不深入,要是说得不对还请高手纠正~~~~
发表于 2013-2-18 10:27:40 | 显示全部楼层
回复 22# eyeloveu


一般来说DMA会放在FPGA里面,放的原因倒不是写比读快(确实要快上20%左右,其实差别不是太大),而是在PC侧有没有合适的DMA,而在FPGA侧就灵活多了,直接调用一个就行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-4-20 02:40 , Processed in 0.043090 second(s), 5 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表