问题标签 [pci-e]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
18751 浏览

cpu-architecture - 内存总线和地址总线的区别

有人可以非常简要地指出计算机体系结构中内存总线和地址总线之间的区别吗?另外,当您说内存总线时,是否意味着您指的是数据总线?

0 投票
1 回答
1691 浏览

c# - 与 PCI / PCI-X / PCI-E HBA 上的设备进行通信和管理的示例应用程序

我对此完全是新手。我被告知要开发一种“概念验证”类型的示例 C# .NET 应用程序,用于与 PCI / PCI-X / PCI-E HBA 上的设备进行通信和管理。我不了解这里涉及的通信协议。谷歌搜索没有多大帮助,或者我的搜索没有优化。凭借我过去的经验,我所熟悉的只有 C# - ADO.NET。是否有任何机构有关于我应该如何处理这个和任何参考链接的指针。任何已经存在的示例应用程序都可以提供巨大的帮助,我可以在此基础上将其复制到我们的业务需求中。

0 投票
2 回答
738 浏览

fpga - 在 FPGA 上测试 PCI 接口

我的老板给出了在 Altera 板上测试 PCI Express 的代码。该代码由几个 c 代码文件组成,其中包含读取 Bios、设置一些寄存器、写入缓冲区等指令。我目前的工作是通过运行代码来查看代码的功能。我是 FPGA 新手,我无法理解我将使用哪些工具、编译器等来为 FPGA 编译它。

由于它是 C 代码,所以我确信我不能使用与 Verilog/VHDL 相同的环境。我能否获得一些关于哪些编译器可用于编译 C 代码以测试 FPGA 的各种接口的提示?

谢谢并恭祝安康

H

0 投票
1 回答
9635 浏览

boot - 从 PCIE USB 3.0 扩展卡启动

我刚买了一个支持 USB 3.0 的 PCIE 扩展卡。它在 Windows 中运行良好。但是,我没有成功启动我的 USB 3.0 拇指驱动器(它连接到扩展卡),因为没有从启动菜单中选择的选项。所以我只是想知道是否有任何方法可以启动我的 USB 3.0 设备?是否有任何启动软件可以扩展对 USB 3.0 扩展卡的支持?例如 Plop Boot Manager 5.0 之类的东西?或者,有可能开发一个吗?

我的扩展卡是创见PDU3 http://www.transcend-info.com/products/catlist.asp?ModNo=291&Func1No=1

谢谢!

0 投票
2 回答
11509 浏览

pci - PCIe 64 位不可预取空间

我一直在阅读 PCIe 规范的恐怖,但仍然无法解决以下问题对。

  1. PCIe 是否允许将巨大的(比如 16GB)64 位不可预取内存空间映射到 4GB 边界以上?还是它们仍然绑定到 32 位时代的 1GB,并且没有办法调用大量不可预取的空间?

  2. 假设规范允许它(并且我的阅读确实如此),那么广泛可用的 BIOS 是否支持它?还是理论上允许但实践中不允许?

0 投票
1 回答
15557 浏览

gpu - 我可以将 PCI-E 3.0 x16 gpu 放入 PCI-E 1.0 x16 插槽吗?

我有一块旧主板Asus P5K Deluxe。我需要更换当前的 GPU(NVIDIA 8800 GTX),但所有新的 GPU 似乎都使用 PCI-E 3.0 插槽。3.0 是否与 1.0 插槽向后兼容?有适配器吗?我已经在谷歌上搜索了一段时间,但我找不到任何东西......

谢谢

0 投票
1 回答
1609 浏览

linux-kernel - 将 64 位 linux 主机上的地址分配给 64 位 pcie 卡

我在 64 位 linux 主机上使用 64 位 PCI Express 卡,问题是它的条是 64 位,但总是得到一个位于 32 位地址范围内的地址,即 BAR 的高 32 位始终为零。

如何强制它使用真正的 64 位地址?我试图通过将引导时间参数覆盖到内核来强制执行它,以便内核可以枚举 pci 设备,但结果与 BIOS 相同。

Linux 不支持真正的 64 位地址吗?

0 投票
2 回答
9463 浏览

linux - Linux 设备驱动程序允许 FPGA 直接 DMA 到 CPU RAM

我正在编写一个 linux 设备驱动程序,以允许 FPGA(当前通过 PCI express 连接到 PC)将 DMA 数据直接发送到 CPU RAM。这需要在没有任何交互的情况下发生,并且用户空间需要访问数据。一些细节: - 运行 64 位 Fedora 14 - 系统有 8GB 的​​ RAM - FPGA (Cyclone IV) 在 PCIe 卡上

为了实现这一点,我执行了以下操作: - 使用 memmap 6GB$2GB 在 grub 中保留上层 2GB RAM(如果我添加 mem=2GB,则不会启动)。我可以看到 /proc/meminfo 中保留了上层 2GB 的 RAM - 映射 BAR0 以允许读取和写入 FPGA 寄存器(这非常有效) - 在我的驱动程序中使用 remap_pfn_range() 实现了一个 mmap 函数 - 使用 ioremap 来获取缓冲区的虚拟地址 - 添加 ioctl 调用(用于测试)以将数据写入缓冲区 - 通过调用 ioctl 将数据写入缓冲区来测试 mmap,并验证数据是否在来自用户空间的缓冲区中

我面临的问题是当 FPGA 开始将数据 DMA 到我提供的缓冲区地址时。我经常收到 PTE 错误(来自 DMAR :) 或使用下面的代码我收到以下错误: DMAR:[DMA 写入] 请求设备 [01:00.0] 故障地址 186dc5000
DMAR:[故障原因 01] 根条目中的当前位是清除 DRHD:处理故障状态 reg 3

根据来自 FPGA 的 DMA,第一行中的地址每次递增 0x1000

这是我的 init() 代码:

}

这是我的 mmap 代码:

感谢您提供任何帮助。

0 投票
1 回答
4390 浏览

caching - 如何为可缓存的 PCIe BAR 做 mmap

我正在尝试mmap()为 PCIe BAR 编写具有自定义功能的驱动程序,目的是使此 BAR 可缓存在处理器缓存中。我知道这不是实现最高带宽的最佳方式,而且写入的顺序是不可预测的(在这种情况下也不是问题)。

这类似于如何防止 MMAP 缓存值?

处理器是 Sandy Bridge i7,PCIe 设备是 Altera Stratix IV dev。木板。

首先,我尝试在 CentOS 5 (2.6.18) 上进行。我更改了 MTRR 设置以确保 BAR 不在不可缓存的 MTRR 范围内,并且与io_remap_pfn_range()清除位一起使用。读取按预期工作:读取返回正确的值,并且第二次读取到同一地址并不一定会导致读取转到 PCIe(在 FPGA 中检查了读取计数器)。但是,写入导致系统冻结,然后重新启动,而日志或屏幕上没有任何消息。_PAGE_PCD_PAGE_PWT

其次,我尝试在支持 PAT 的 CentOS 6 (2.6.32) 上进行。结果是一样的:读取工作正常,写入导致系统冻结并重新启动。有趣的是,非临时/写入组合的完整高速缓存行写入(AVX/SSE)按预期工作,即它们总是转到 FPGA 并且 FPGA 观察到完整的高速缓存行写入,然后读取返回正确的值。但是,简单的 64 位写入仍然会导致系统冻结/重启。

我也试过ioremap_cache()iowrite32()里面的驱动代码。结果是一样的。

我认为这是一个硬件问题,但如果有人可以分享任何关于正在发生的事情的想法,我将不胜感激。

编辑:我能够在 CentOS 6 上捕获 MCE 消息:机器检查异常:5 银行 5:be2000000003110a。

我还在 2-socket Sandy Bridge (Romley) 上尝试了相同的代码:读取和非临时写入行为是相同的,简单写入不会导致 MCE/崩溃但对系统状态没有影响,即内存中的值不会改变.

此外,我在较旧的 2-socket Nehalem 系统上尝试了相同的代码:简单写入也会导致 MCE,尽管代码不同。

0 投票
3 回答
4547 浏览

linux - 如何通知用户空间应用程序驱动程序已收到 linux 中的中断?

我有一个 PCIe 设备,它会在数据缓冲区准备好读取时发送硬件中断。我相信最好的方法是使用信号,但我不完全确定如何。我认为我需要做的是:

  1. 保存用户空间应用程序的 PID,以便驱动程序知道将信号发送到哪里
  2. 在 PCIe 设备驱动程序的中断处理程序中,向用户空间应用程序发送信号
  3. 在用户空间应用程序中实现一个信号处理函数来处理信号

我不知道该怎么做。如何/在哪里保存用户空间应用程序的 PID?如何从驱动程序的中断处理程序向该特定 PID 发送信号(我相信我应该使用 kill 命令,但我对获取 PID 的语法更感兴趣)?如何让用户空间应用程序在保存其 PID 后等待信号?是否可以让用户空间应用程序在保存其 PID 后继续运行,在收到信号时运行信号处理函数,并在信号到达之前继续运行?(类似于 ISR 的工作方式)