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即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

时序数据库TimescaleDB,实战部署全攻略

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

bat 查找文件所在

脚本 在批处理文件&#xff08;.bat&#xff09;中查找文件所在的目录&#xff0c;你可以使用dir命令结合循环和条件语句来实现。以下是一个简单的示例&#xff0c;演示如何在批处理文件中查找指定文件并输出其所在目录&#xff1a; echo off setlocal enabledelayedexpansio…

绩效域-错题笔记

1、虚荣指标&#xff1a;对决策没有帮助的度量指标一般属于虚荣指标。 例如&#xff1a;新访问者的数量比网站的页面访问量更加有用。 2、完工偏差(VAC)用于预测预算赤字或盈余金额&#xff0c;它表示为完工预算(BAC)和完工估算(EAC)之差。 3、完工尚需绩效指数(TCPI)用于估…

pikachu靶场-CSRF

CSRF: 介绍&#xff1a; Cross-site request forgery简称为"CSRF”。 在CSF的攻击场景中攻击者会伪造一个请求&#xff08;这个请求一般是一个链接&#xff09; 然后欺骗目标用户进行点击&#xff0c;用户一旦点击了这个请求&#xff0c;整个攻击也就完成了&#xff0…

Java毕业设计-基于ssm的校园二手交易管理系统-第67期

获取源码资料&#xff0c;请移步从戎源码网&#xff1a;从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的校园二手交易管理系统&#xff1a;前端jsp、jquery&#xff0c;后端 springmvc、spring、mybatis&#xff0c;集成商品管理、订单管理、销售管理、采购管理、购…

phaseDNN文章解读

文章DOI: https://doi.org/10.48550/arXiv.1905.01389 作者是 Southern Methodist University 的Wei Cai 教授 A Parallel Phase Shift Deep Neural Network for Adaptive Wideband Learning 一种并行移相深度神经网络来自适应学习宽带频率信号 20190514 核心思想&#xff1a;…

客户端web开发工具

文章目录 安全网络Linter-->捕获代码错误-->eslint源代码控制-->Git代码格式化-->Prettier打包工具--Parcel--Webpack 转换--Babel开发后阶段测试工具配置工具其他 node&#xff0c;npm、yarnnode.js包管理器npmyarn https://developer.mozilla.org/zh-CN/docs/Lea…

RM电控讲义【HAL库篇】

这段代码中do while的作用&#xff1a; 宏定义中的语句块&#xff1a;do { ... } while (0) 允许你在宏定义中创建一个语句块&#xff0c;从而可以包含多条语句。这在宏定义中特别有用&#xff0c;因为宏只是简单的文本替换&#xff0c;不像函数那样有作用域和返回类型。因此&…

Docker基础篇(-)

docker 三个要素 镜像容器仓库 CentOS 6.8 安装 docker centos 7.0 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager -y --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo systemctl start docker 启动Docker&…

嵌入式中c语言指针用法详解与分析

今天给大家来讲解一下指针。 我会由浅到深&#xff0c;最后结合实际应用讲解&#xff0c;让大家学会指针的同时&#xff0c;知道大佬们都用指针来干嘛&#xff01; 长文预警&#xff01;全文大约5200多字&#xff0c;学指针看这篇文章就够了&#xff01; 很多人跟我刚学习c语…

electorn+vue3项目启动后报错unsafe-eval,如何去除提醒

electron项目报错如下&#xff1a; Electron Security Warning (Insecure Content-Security-Policy) This renderer process has either no Content Security Policy set or a policy with “unsafe-eval” enabled. This exposes users of this app to unnecessary security r…

【FreeRTOS基础入门】任务通知

文章目录 前言一、任务通知介绍1.1 任务通知怎么通信1.2 任务通知与其他通信方式的区别1.3 优势及限制任务通知的优势任务通知的限制 1.4 内部原理 二、任务通知的使用2.1 发出与接收通知简化版2.1 发出与接收通知专业版 总结 前言 FreeRTOS 提供了丰富而灵活的任务通知机制&a…

基于51单片机的婴儿看护监测系统[proteus仿真]

基于51单片机的婴儿看护监测系统[proteus仿真] 婴儿看护检测系统这个题目算是课程设计和毕业设计中少见的题目&#xff0c;本期是一个基于51单片机的婴儿看护监测系统[proteus仿真] 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&a…

openGauss学习笔记-226 openGauss性能调优-系统调优-配置LLVM-LLVM适用场景与限制

文章目录 openGauss学习笔记-226 openGauss性能调优-系统调优-配置LLVM-LLVM适用场景与限制226.1 适用场景226.2 非适用场景 openGauss学习笔记-226 openGauss性能调优-系统调优-配置LLVM-LLVM适用场景与限制 226.1 适用场景 支持LLVM的表达式 查询语句中存在以下的表达式支持…

优化设备维修流程:易点易动设备管理系统的设备维修管理策略

在现代企业中&#xff0c;设备是生产运营的核心要素之一。然而&#xff0c;设备故障和维修常常给企业带来诸多困扰和成本。为了提高设备维修的效率和质量&#xff0c;许多企业开始采用先进的设备管理系统。在这方面&#xff0c;易点易动设备管理系统以其卓越的设备维修管理策略…

2023年Q4,SSD出货量下降5%,但存储容量增长9.6%

2023年第四季度&#xff08;4Q23&#xff09;的SSD市场表现呈现出单位出货量下降&#xff0c;但存储容量增长的趋势。具体数据显示&#xff0c;该季度SSD总出货量下降5%&#xff0c;降至8820万台&#xff1b; 而存储容量则增长9.6%&#xff0c;达到85.1EB。预计2023全年SSD总容…

前端基于Verdaccio搭建私有npm仓库,上传npm插件包,及下载使用自己的npm插件包

文章目录 一、原理二、常用的仓库地址三、优势四、准备环境六、使用verdaccio搭建私有npm服务1、安装2、运行3、配置config.yaml&#xff0c;使局域网下能共享访问&#xff0c;否则只能本机访问。4、重新运行 七、npm常见操作查看当前用户信息查看源地址切换源地址删除源地址创…

【Linux】Linux调试器-gdb使用

1. 背景 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项 2. 开始使用 gdb binFile 退出&#xff1a; ctrl d 或 quit 调…

【C语言】注释

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

校园公寓管理系统

校园公寓管理系统是一种专为提升高校住宿管理效率而设计的综合性智能解决方案。这一系统利用现代信息技术优化和简化了传统的住宿管理流程&#xff0c;极大地提高了管理工作的透明度和学生的住宿体验。 一、系统组成 校园公寓管理系统一般包括住宿分配、安全监控、费用管理、维…