PCIE1—快速实现PCIE接口上下位机通信(一)

1.简介

        PCI Express(PCIE)是一种高速串行总线标准,广泛应用于计算机系统中,用于连接主板和外部设备。在FPGA领域中,PCIE也被广泛应用于实现高速数据传输和通信。FPGA是一种灵活可编程的集成电路,可以根据需要重新配置其功能和连接。PCIE与FPGA结合使用,可以实现高速数据传输和通信,适用于需要大量数据处理和传输的应用场景。在FPGA中使用PCIE可以实现以下功能:①高速数据传输:PCIE提供了高达16 GT/s的数据传输速度,可以满足对数据传输速度要求较高的应用需求。②多通道通信:PCIE支持多通道通信,可以同时传输多路数据,提高数据传输效率。③灵活性和可扩展性:FPGA可以根据需要重新配置PCIE接口,实现不同功能和连接需求,同时支持多种PCIE设备连接,具有较高的灵活性和可扩展性。总的来说,PCIE在FPGA领域中的应用可以实现高速数据传输和通信,提高系统性能和效率,适用于需要大量数据处理和传输的应用场景。随着PCIE技术的不断发展和完善,PCIE在FPGA领域中的应用前景将更加广阔。

        不同的FPGA芯片制造厂家提供了不同的解决方案,就xilinx一家提供了三种实现PCIE的方案用于不同的场景。此外,PCIE自身的发展也经历好几代的迭代,PCIE本身还涉及总线架构、带宽、通道、BAR寄存器等等知识,关于这些后面的文章整合了大量资料有详细说明,本章基于xilinx K7芯片,xdma ip,win10系统,vivado2020.2版本快速搭建PCIE基础应用。关于更复杂的应用后面循序渐进展开。

2.配置环境

①禁止驱动签名启动

打开windows设置,选择更新与安全,选择“恢复”,点击立即重新启动,随后选择疑难解答,选择启动选项,出现选择禁止后,按下数字“7”即可禁止驱动签名认证。当驱动发布给客户的时候,需要进行驱动签名认证。

②关闭快速启动

在windows设置中找到电源和睡眠选项,单机“选择电源按钮的功能”,取消勾选“启用快速启动”。

③打开测试模式

以管理员方式运行命令提示符,输入Bcdedit.exe -set TESTSIGNING ON命令打开测试模式,重启后生效,如果没有测试模式的水印出现,可以换个系统壁纸试一下,正常水印如下所示。

还可通过管理员打开命令提示符,通过Bcdedit.exe /enum {current}查看是否打开了测试模式。

④安装驱动

首先找到.cer后缀的文件,选择安装证书

然后插入PCIE设备,可以发现设备已连接 

更新驱动程序,选择开发板厂家提供好的驱动,安装过程中选择始终相信,安装结束可以看到如图所示,多了Xilinx DMA设备,表示安装成功。 

此处之前一直有黄色感叹号,提示“该设备无法启动。(代码10)在两项驱动程序间或一项I/O驱动程序内检测到协议错误”。网上分析罕见,正点原子认为这是驱动的Bug,Xilinx官网有人说是Xilinx的驱动只支持4通道,必须设置成4通道。由于这个涉及Windows和Xilinx的底层函数,单从现象很难判断原因为何,我在开发过程中也碰到这个情况,我用的是vivado2020.2,换成2018.2或者2021.1版本即可解决这个问题。因此我认为可能与vivado的版本有关。

⑤切换PCIE插槽

这个适个人机器情况调整,我的机器只有两个PCIE扩展槽,一个x16通道用于接显卡,另一个是x4通道,于是把显卡换到pcie x4通道上,把xilinx的x8切换到x16的通道上。

⑥添加头文件

Xilinx提供了驱动还提供了驱动接口文件xdma_public.h、pcie_fun.h、pcie_fun.c文件,将其添加到上位机工程中,即可使用这些函数进行pcie接口的操作。

3.IP核配置

第一页①处通常Basic,不用Advanced;②处选择通道数,具体与硬件板卡相关,这里选择x8;③选择线速度,与硬件板卡有关,这里是PCIE2.0,选择5.0GT/s,也与FPGA芯片有关,7K系列最多支持PCIE2.0。④这是PCIE的参考时钟,是由Root节点的插槽给到PCIE插卡的,固定为100MHz。⑤AXI总线的宽度和时钟频率由PCIE的线速度和线速率决定。⑥DMA用户接口选项,AXI Memory Mapped适合与内存交互数据,AXI Stream适合流数据,本次AXI_MM工程就选AXI Memory Mapped接口,AXI_ST工程选择stream接口。⑦AXI4-Lite Slave Interface:选择是否启用 AXI4-Lite Slave 接口以访问 DMA 状态寄存器,通常不用。

第二页保持默认配置,说明如下。

  1. Vendor ID(供应商 ID):用于识别器件或应用的制造商。有效标识由 PCI Special Interest Group 指定,以保证每个标识都唯一。默认值 10EEh 为赛灵思的供应商标识
  2. Device ID (器件 ID):对应于应用的唯一标识;默认值为 70<link speed><link width>h,该值取决于所选配置。该字段可采用任何值;请针对应用更改该值。默认器件 ID 参数取决于: 器件系列:9 表示 UltraScale+,8 表示 UltraScale,7 表示 7 系列器件  ;EP 或 RP 模式链路宽度:1 表示 x1,2 表示 x2,4 表示 x4,8 表示 x8,F 表示 x16;链路速度:1 表示 Gen1,2 表示 Gen2,3 表示 Gen3,4 表示 Gen4
  3. Revision ID (版本 ID):表示器件或应用的版本;作为器件 ID 的扩展。默认值为 00h;请针对应用输入相应的值;
  4. Subsystem Vendor ID (子系统供应商 ID):进一步限定器件或应用的制造商。请在此处输入子系统供应商 ID;默认值为 10EEh。通常,该值与供应商 ID 相同。将该值设为 0000h 可能导致合规性测试出现问题;
  5. Subsystem ID (子系统 ID):进一步限定器件或应用的制造商。该值通常与器件 ID 相同;默认值取决于所选通道宽度和链路速度。将该值设为 0000h 可能导致合规性测试出现问题;
  6. Enable PCIe-ID Interface:启用 PCIe-ID 接口。如果选中该参数,那么根据选中的 PFx 数量,在 IP 顶层会显示 PCIe ID 端口:cfg_vend_id、cfg_subsys_vend_id、cfg_dev_id_pf*、cfg_rev_id_pf* 和cfg_subsys_id_pf*,并可供用户逻辑驱动。如未选中该参数,则不会在顶层显示这些端口,并根据自定义时设置的值来驱动这些端口。
  7. Class Code Look-up Assistant (类代码查找助手):类代码查找助手可针对选定的器件常规功能提供对应的基本类、子类和接口值。

 第三页配置,①处PCIe to AXI Lite Master Interface:启用该接口,主机可以通过该接口控制用户侧逻辑,在PCIe_AXILite工程中就勾选此接口。PCIe to AXI Translation:PCIe到AXI的转换。通常情况下,主机侧PCIe BAR地址与用户逻辑侧AXI LIte的地址是不一样的,这个设置就是进行主机侧BAR地址到AXI地址的转换,比如主机一侧BAR地址为0,用户逻辑侧AXI LIte的地址为0x40000000,则主机访问AXI LIte用户逻辑时,XDMA将根据该设置将主机侧BAR地址0转换到AXI LIte总线地址0x40000000。对与该值的设置有两种方式,一种是手动指定,然后修改后面 AXI LIte 总线的偏移地址,另一种是先确定AXI LIte总线的偏移地址,然后根据偏移地址设置该值。在1.4.8节修改地址映射可以看到AXI LIte总线的偏移地址为0x40000000,所以设置此值为0x40000000。此外,PCIe to AXI Translation 同样也是AXI LIte总线的基地址,当 AXI LIte 总线连接多个AXI IP核时,会有多个偏移地址,上位机访问其他 IP 核时的偏移地址是以PCIe to AXI Translation的值为基址0进行参考的,比如,AXI LIte总线连接的另一个AXI IP的偏移地址为0x40010000,上位机访问该IP核的偏移地址就是该IP核的偏移地址0x40010000 - PCIe to AXI Translation的值0x40000000=0x10000。因此当AXI LIte总线连接多个AXI IP核时,需确保PCIe to AXI Translation的值小于等于这些AXI IP核偏移地址的最小值。②处可以选择是否预取,预取就是将数据提前放到线上,会让读数据变得更快。③PCIe to DMA BypassInterface:选择是否启用PCIe至DMA旁路接口。DMA Bypass就是普通的PCIe传输,不用DMA逻辑,而是直接通过PCIe进行通信,一般传输效率会高于Pcie to AXI Lite。

第四页,关于中断的设置,详细功能后续展示,保持如下设置即可。

最后一页设置DMA上下行通道均为2即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2810136.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

碳素光,碳光子,碳光灸 ,太阳灯 仪器

碳素光线疗法&#xff1a; 中西医、民间疗法融为一体&#xff0c;提高机体自身治愈力&#xff0c;免疫力&#xff0c;改善体质和保持健康&#xff0c;有助于疾病的预防和治疗的疗法。不吃药、不打针、不手术也能得健康&#xff0c;无任何副作用的自然物理疗法。 碳素光线仪市…

SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的多特征分类预测

SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的故障多特征分类预测 目录 SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的故障多特征分类预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍…

《Docker 简易速速上手小册》第8章 Docker 在企业中的应用(2024 最新版)

文章目录 8.1 Docker 在开发环境中的应用8.1.1 重点基础知识8.1.2 重点案例&#xff1a;Python Web 应用开发环境8.1.3 拓展案例 1&#xff1a;Python 数据分析环境8.1.4 拓展案例 2&#xff1a;Python 自动化测试环境 8.2 Docker 在生产环境的实践8.2.1 重点基础知识8.2.2 重点…

【嵌入式学习】IO进程线程day02.24

一、思维导图 二、习题 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long) int main(int argc, const char *argv[]) {//创建子进程pid_t pidfork();//在父进程实现读功能if(pid>0){//1、创建key值key_t key 0;if((keyftok("/", k)) -1){perror("ftok …

【C++】STL容器之string(修改操作)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

做了个很牛的网站,可以搜索网站的网站到底有多好用?

今天给大家推荐的网站叫做&#xff1a;毒蘑菇 - 搜索 毒蘑菇搜索&#xff0c;顾名思义呢&#xff0c;搜索的功能比较好用&#xff0c;大家上网的时候总是需要记住网站的地址&#xff0c;即使你知道网站的名称&#xff0c;也得跳转到百度然后在搜索&#xff0c;有时候百度上那么…

动态规划(算法竞赛、蓝桥杯)--最详细的01背包DP问题滚动数组优化

1、B站视频链接&#xff1a;E08【模板】背包DP 01背包_哔哩哔哩_bilibili 题目链接&#xff1a;[USACO07DEC] Charm Bracelet S - 洛谷 #include <bits/stdc.h> using namespace std; const int N3410,M13000; int n,m; int d[N],w[N],f[N][M];//价值、体积、状态数组 …

Java面试——锁

​ 公平锁&#xff1a; 是指多个线程按照申请锁的顺序来获取锁&#xff0c;有点先来后到的意思。在并发环境中&#xff0c;每个线程在获取锁时会先查看此锁维护的队列&#xff0c;如果为空&#xff0c;或者当前线程是等待队列的第一个&#xff0c;就占有锁&#xff0c;否则就会…

VB6添加资源文件总是内存溢出?最终我还是治好了这胎里病!

网管小贾 / sysadm.cc 说来也奇怪&#xff0c;话说不久前我刚刚解决了 VB6 释放资源文件的一个 BUG &#xff0c;心里正美滋滋的。 不料居然还有个巨大的 BUG 在后边等着我呢&#xff01; 真是不说不知道&#xff0c;一说吓一跳&#xff0c;十天找 BUG &#xff0c;N把辛酸泪…

matlab 凸轮轮廓设计

1、内容简介 略 46-可以交流、咨询、答疑 2、内容说明 略 4 取标段的分析 取标装置是贴标机的核心部件之一&#xff0c;是影响贴标质量和贴标精度的重要因素&#xff0c;取标段是通过取标板与标签的相切运动使得涂有胶水的取标板从标签盒中粘取标签纸[4]&#xff0c;理论…

如何下载B站高清视频、音频到本地?

在B站上找到了喜欢的视频&#xff1f;想要将它保存到本地或者与朋友分享&#xff1f;本文将向您详细介绍一种简单而有效的方法&#xff0c;帮助我们轻松下载并导出B站视频&#xff0c;以便随时欣赏或分享。 一、如何下载并导出B站视频&#xff1f; 手机端/平板端 第一步&…

「连载」边缘计算(十九)02-22:边缘部分源码(源码分析篇)

&#xff08;接上篇&#xff09; 从启动函数Start(&#xff09;中可以看到&#xff0c;其以go routine的方式启动很多后台处理服务&#xff0c;具体如下。 1&#xff09;初始化edged的kubeClient&#xff0c;具体如下所示。 // use self defined client to replace fake kube…

基于AI将普通RGB图像转换为苹果Vision Pro支持的空间照片

将 RGB 图像转换为空间图片 一、引言 随着AR和VR技术的普及,空间照片格式(.HEIC)逐渐受到关注。这种格式允许用户在AR/VR设备上体验到更为真实的立体空间效果。为了让更多的普通图片也能享受这种技术,我们开发了这款可以将普通RGB图像转换为苹果Vision Pro支持的.HEIC格式的…

leetcode:47.全排列2

1.与上一题不同的是&#xff0c;本题目的数组中有重复的数字&#xff0c;所以最终结果需要去重&#xff01; 2.树形结构&#xff1a;先将原来的数组进行排序&#xff0c;方便之后的去重&#xff01;同一数层上不能取重复的元素&#xff01; 3.代码实现&#xff1a; 1.当path…

k8s部署 多master节点负载均衡以及集群高可用

一、k8s 添加多master节点实验 1、master02节点初始化操作 2、在master01节点基础上&#xff0c;完成master02节点部署 ①从master01节点复制所需要的文件 需要从master01节点复制etcd数据库所需要的ssl证书、kubernetes安装目录&#xff08;二进制文件、组件与apiserver通信…

CleanMyMac4苹果Mac电脑全面、高效的系统清理工具

CleanMyMac 4 for Mac是一款专为Mac用户设计的系统清理和优化工具。它具备多种功能&#xff0c;旨在帮助用户轻松管理和释放Mac上的磁盘空间&#xff0c;同时提升系统性能。 系统垃圾清理&#xff1a;CleanMyMac 4能够深入扫描Mac的每一个角落&#xff0c;智能识别并清除不需要…

Java中for循环效率比较

先说结论&#xff1a; 对于遍历一个1千万条数据的arrayList&#xff0c;fori循环最快&#xff0c;iterator其次&#xff0c;foreach再其次&#xff0c;forStream最慢。 测试代码 public class ForSpeedTest {// private static final long FOR_COUNT 10000_0000;private s…

wpf 简单实验 数据更新 列表更新

1.概要 1.1 需求 一个列表提供添加修改删除的功能&#xff0c;添加和修改的内容都来自一个输入框 1.2 要点 DisplayMemberPath"Zhi"列表.ItemsSource datalist;(列表.SelectedItem ! null)(列表.SelectedItem as A).Zhi 内容.Text;datalist.Remove((列表.Selec…

Java编程与数据库技术:疫情居家办公的坚实后盾

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

canvas坐标系统 webgl坐标系统 uv纹理坐标系统 原点

一、canvas原点在左上角&#xff0c;x轴正方向向右&#xff0c;y轴正方向向下&#xff0c;一个点对应一个像素 二、webgl原点在正中间&#xff0c;x轴正方向向右&#xff0c;y轴正方向向上&#xff0c;数据范围在[-1,1]之间 三、uv原点在左下角&#xff0c;x轴正方向向右&#…