当前位置: 首页 > news >正文

FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的PCIE方案
    • 本博客方案的PCIE2.0版本
  • 3、PCIE基础知识
  • 4、工程详细设计方案
    • 工程设计原理框图
    • XDMA配置及使用
    • XDMA中断模块
    • 数据缓存架构
    • 用户逻辑
    • Windows版本XDMA驱动安装
    • Linux版本XDMA驱动安装
    • 测试应用程序
    • 工程源码架构
    • PCIE上板调试注意事项
  • 5、vivado工程源码1详解-->Virtex7-690T-PCIE3.0 X8版本
  • 6、vivado工程源码2详解-->KU060-PCIE3.0 X8版本
  • 7、vivado工程源码3详解-->KU3P-PCIE3.0 X4版本
  • 8、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 9、上板调试验证
    • 准备工作
    • XDMA大批量数据读写测试演示
    • XDMA小批量用户数据读写测试演示
    • XDMA用户中断测试演示
  • 10、福利:工程代码的获取

FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持

1、前言

FPGA实现PCIE数据传输现状;
目前基于Xilinx系列FPGA的PCIE通信架构主要有以下2种,一种是简单的、傻瓜式的、易于开发的、对新手友好的XDMA架构,该架构对PCIE协议底层做了封装,并加上了DMA引擎,使得使用的难度大大降低,加之Xilinx提供了配套的Windows和Linux系统驱动和上位机参考源代码,使得XDMA一经推出就让工程师们欲罢不能;另一种是更为底层的、需要设计者有一定PCIE协议知识的、更易于定制化开发的7 Series Integrated Block for PCI Express架构,该IP实现的是PCIe 的物理层、链路层和事务层,提供给用户的是以 AXI4-stream 接口定义的TLP 包,使用该IP 核,需要对PCIe 协议有清楚的理解,特别是对事务包TLP报文格式;本设计采用第一种方案,使用XDMA的中断模式实现PCIE通信;本架构既有简单的测速实验,也有视频采集应用;

工程概述

本设计使用Xilinx系列FPGA为平台,调用Xilinx官方的XDMA方案搭建基中断模式下的PCIE3.0通信架构;需要注意的是,并不是所有FPGA都支持PCIE3.0,以Xilinx为例,只有Virtex7及其以上或者UltraScale系列高端FPGA才支持;低端FPGA只能支持到PCIE2.0,关于PCIE2.0的设计方案,可以参考我博客主页,有丰富案例;XDMA的数据缓存有两条通路,一条基于DDR3的大批量数据缓存通路,该条通路一般用作图像、AD数据等缓存,适用于使用板载DDR作为缓存的大量批量数据传输方案;另一条基于BRAM的小批量用户数据缓存通路,该条通路一般用作用户控制数据的缓存,适用于使用FPGA内部BRAM作为缓存的大量批量数据传输方案;XDMA配置为中断模式,配合手写的XDMA中断模块使用,该中断模块主要负责与用户逻辑交互,指示用户逻辑可以发起中断,并将用户逻辑发起的中断转发给XDMA;用户逻辑侧设置了一个定时器,大约间隔8ms发起一次XDMA中断;同时提供一套基于X86架构的PC端的PCIE数据读写软件,执行软件可发起对FPGA侧的PCIE数据读写操作,以验证这套PCIE通信架构的正确性;这套架构设计简单,测试更为简单,不需要上位机的参与,仅仅在CMD中执行一系列指令即可完美测试通信质量,适用于PCIE设计的快速验证和开发;本博客提供3套工程源码,具体如下:
在这里插入图片描述
现对上述7套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx–>Virtex7–690T–xc7vx690tffg1761-3;FPGA内部设置了一个定时器,间隔8ms产生一次上升沿作为XDMA用户逻辑中断输出给XDMA;XDMA配置了两路数据缓存通道,一条是AXI4-FULL接口的DDR数据缓存通道,以板载的DDR3作为缓存介质,用于大批量数据传输,另一条是AXI4-Lite接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于少量用户数据传输;利用上位机软件实现XDMA数据读写测试,包括批量数据和少量用户数据读写,此外还进行XDMA用户中断测试;提供Windows和Linux系统驱动和对应的测试软件;板子PCIE支持PCIE3.0,为8 Lane,XDMA配置为单Lane线速率8GT/s;用于快速搭建并验证基于FPGA_XDMA中断模式的PCIE数据通信架构;

工程源码2

开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku060-ffva1156-2-i;FPGA内部设置了一个定时器,间隔8ms产生一次上升沿作为XDMA用户逻辑中断输出给XDMA;XDMA配置了两路数据缓存通道,一条是AXI4-FULL接口的DDR数据缓存通道,以板载的DDR4作为缓存介质,用于大批量数据传输,另一条是AXI4-Lite接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于少量用户数据传输;利用上位机软件实现XDMA数据读写测试,包括批量数据和少量用户数据读写,此外还进行XDMA用户中断测试;提供Windows和Linux系统驱动和对应的测试软件;板子PCIE支持PCIE3.0,为8 Lane,XDMA配置为单Lane线速率8GT/s;用于快速搭建并验证基于FPGA_XDMA中断模式的PCIE数据通信架构;

工程源码3

开发板FPGA型号为Xilinx–>Kintex UltraScale±-xcku3p-ffva676-2-i;FPGA内部设置了一个定时器,间隔8ms产生一次上升沿作为XDMA用户逻辑中断输出给XDMA;XDMA配置了两路数据缓存通道,一条是AXI4-FULL接口的DDR数据缓存通道,以板载的DDR4作为缓存介质,用于大批量数据传输,另一条是AXI4-Lite接口的BRAM数据缓存通道,以FPGA内部BRAM作为缓存介质,用于少量用户数据传输;利用上位机软件实现XDMA数据读写测试,包括批量数据和少量用户数据读写,此外还进行XDMA用户中断测试;提供Windows和Linux系统驱动和对应的测试软件;板子PCIE支持PCIE3.0,为4 Lane,XDMA配置为单Lane线速率8GT/s;用于快速搭建并验证基于FPGA_XDMA中断模式的PCIE数据通信架构;

本文详细描述了FPGA搭建PCIE3.0通信架构简单读写测试的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我已有的PCIE方案

我的主页有PCIE通信专栏,该专栏基于XDMA的轮询模式实现与QT上位机的数据交互,既有基于RIFFA实现的PCIE方案,也有基于XDMA实现的PCIE方案;既有简单的数据交互、测速,也有应用级别的图像采集传输,以下是专栏地址:
点击直接前往
此外,我的主页有中断模式的PCIE通信专栏,该专栏基于XDMA的中断模式实现与QT上位机的数据交互,以下是专栏地址:
点击直接前往
此外,还有基于RIFFA架构的PCIE通信专栏,以下是专栏地址:
点击直接前往

本博客方案的PCIE2.0版本

本博客详细描述了FPGA搭建PCIE3.0通信架构简单读写测试的设计方案,但并不是所有FPGA都支持PCIE3.0,对于低端FPGA而言,PCIE2.0或许具有更多应用场景,恰好之前写过一篇PCIE2.0方案,设计基本与本片博客一样,只是XDMA配置的PCIE版本不一样,感兴趣的可以查看之前的博客,博客链接如下:
点击直接前往

3、PCIE基础知识

PCIe 总线架构与以太网的 OSI 模型类似,是一种分层协议架构,分为事务层(Transaction Layer)、数据链路层(Data Link Layer) 和物理层(Physical Layer)。这些层中的每一层都分为两部分:一部分处理出站(要发送的)信息,另一部分处理入站(接收的)信息,如下图:
在这里插入图片描述
事务层
事务层的主要责任是事务层包 TLP(Transaction Layer Packet)的组装和拆卸。事务层接收来自 PCIe 设备核心层的数据,并将其封装为 TLP。TLP 用于传达事务,例如读取和写入,以及确定事件的类型。事务层还负责管理 TLP 的基于信用的流控制。每个需要响应数据包的请求数据包都作为拆分事务实现。每个数据包都有一个唯一标识符,该标识符使响应数据包可以定向到正确的始发者。数据包格式支持不同形式的寻址,具体取决于事务的类型(内存、I/O、配置和消息)。数据包可能还具有诸如 No Snoop、Relaxed Ordering 和基于 ID 的排序(IDO)之类的属性。事务层支持四个地址空间:包括三个 PCI 地址空间(内存、I/O 和配置)并添加消息空间。该规范使用消息空间来支持所有先前 PCI 的边带信号,例如中断、电源管理请求等,作为带内消息事务。

数据链路层
数据链路层充当事务层和物理层之间的中间阶段。数据链路层的主要职责包括链路管理和数据完整性,包括错误检测和错误纠正。数据链路层的发送方接受事务层组装的 TLP,计算并应用数据保护代码和 TLP序列号,以及将它们提交给物理层以在链路上传输。接收数据链路层负责检查接收到的 TLP 的完整性,并将它们提交给事务层以进行进一步处理。在检测到 TLP 错误时,此层负责请求重发 TLP,直到正确接收信息或确定链路失败为止。数据链路层还生成并使用用于链路管理功能的数据包。为了将这些数据包与事务层(TLP)使用的数据包区分开,当指代在数据链路层生成和使用的数据包时,将使用术语“数据链路层数据包(DLLP)”。

物理层
PCIe 总线的物理层为 PCIe 设备间的数据通信提供传送介质,为数据传送提供可靠的物理环境。物理层包括用于接口操作的所有电路,包括驱动器和输入缓冲器、并行至串行和串行至并行转换、PLL 和阻抗匹配电路。它还包括与接口初始化和维护有关的逻辑功能。物理层以实现特定的格式与数据链路层交换信息。该层负责将从数据链路层接收的信息转换为适当的序列化格式,并以与连接到链路另一端的设备兼容的频率和通道宽度在 PCI Express 链路上传输该信息。物理层是 PCIe 体系结构最重要,也是最难以实现的组成部分(该层对用户透明,开发 PCIe 程序时无需关心)。PCIe 总线的物理层定义了 LTSSM (Link Training and Status State Machine)状态机,PCIe 链路使用该状态机管理链路状态,并进行链路训练、链路恢复和电源管理。PCIe 总线使用端到端的连接方式,在一条PCIe 链路的两端只能各连接一个设备,这两个设备互为数据发送端和数据接收端。由于 PCIe 是支持全双工通信的,所以发送端和接收端中都含有TX (发送逻辑) 和RX (接收逻辑)。在PCIe 总线的物理链路的一个数据通路(Lane) 中,有两组差分信号,共4 根信号线组成。其中发送端的TX 与接收端的RX 使用一组差分信号连接,该链路也被称为发送端的发送链路,也是接收端的接收链路;而发送端的RX 与接收端的TX 使用另一组差分信号连接,该链路也被称为发送端的接收链路,也是接收端的发送链路。一个PCIe 链路可以由多个Lane 组成。目前PCIe 链路可以支持1、2、4、8、12、16 和32 个Lane,即×1、×2、×4、×8、×12、×16 和×32 宽度的PCIe 链路。每一个Lane 上使用的总线频率与PCIe 总线使用的版本相关。

4、工程详细设计方案

工程设计原理框图

工程设计原理框图如下:
在这里插入图片描述

XDMA配置及使用

根据Xilinx官方手册,XDMA框图如下:
在这里插入图片描述
由图可知,XDMA封装了Integrated Block for PCI Express IP,不仅完成了事务层的组包解包,还添加了完整的 DMA 引擎;XDMA 一般情况下使用AXI4 接口,AXI4 接口可以加入到系统总线互联,适用于大数据量异步传输,而且通常情况下使用 XDMA 都会使用到 BRAM 或 DDR 内存;AXI4-Stream 接口适用于低延迟数据流传输。XDMA 允许在主机内存和 DMA 子系统之间移动数据。它通过对包含有关要传输的数据的源、目标和数量的信息的“描述符”进行操作来实现此目的。这些直接内存传输既可以用于主机到卡(Host to Card,H2C)的传输,也可以用与卡到主机(Card to Host,C2H)的传输。可以将 DMA 配置为由所有通道共享一个 AXI4 Master 接口,或者为每个启用的通道提供一个 AXI4-Stream 接口。内存传输是基于每个通道的描述符链接列表指定的,DMA 从主机内存和进程中获取这些链接列表。诸如描述符完成和错误之类的事件通过中断来发出信号。XDMA 还提供多达 16 条用户中断线,这些中断线会向主机生成中断。本设计需要配置为中断模式;如下图:
在这里插入图片描述
本设计XDMA线速率配置为8GT/s,这是PCIE3.0标准,如下:
在这里插入图片描述
XDMA详情参考《AXI Bridge for PCI Express Gen3 Subsystem Product Guide(PG194)》;

XDMA中断模块

XDMA中断模块和XDMA IP配合使用,XDMA中断模块主要执行两个任务,一是获取XDMA的状态,输出用户中断使能信号,以指示用户此时可以发起中断,该任务通过AXI_Lite接口与XDMA连接,其从机地址受PC端软件控制;二是转发用户中断给XDMA,当用户侧检测到XDMA处于可接受中断状态时,用户逻辑可以发起中断,XDMA中断模块将此中断转发给XDMA IP;将模块直接拖入Block Design中,显示如下:
在这里插入图片描述

数据缓存架构

如果你的FPGA资源够大,且传输的数据是大批量的,则选择DDR架构的数据缓存架构,比如传输图像、AD数据等等;如果你的FPGA开发板没有DDR颗粒,或者只需要传输的数据是小批量的,则选择BRAM架构的数据缓存架构,比如传输PCIE控制信息等;工程中将两种架构都设计了,以便于用户在根据自身FPGA开发板移植时具有选择性;如下:
在这里插入图片描述

用户逻辑

用户逻辑的作用就是发起中断,设置了一个定时器,大约间隔8ms发起一次XDMA中断;当然这只是做测试,如果是具体的数据传输则需要灵活改变,比如传输图像时,可以一帧图像传输完成作为发起中断的条件;在后续发布的博客中会有相应的介绍;核心代码如下:
在这里插入图片描述

Windows版本XDMA驱动安装

提供Windows和Linux系统驱动,本章节介绍Windows下XDMA驱动安装;
在这里插入图片描述
Windows下驱动安装步骤如下:友情提示,Windows下驱动秩序安装一次即可;

第一步:使系统禁用签名并进入测试模式,方法如下:
在这里插入图片描述
也可百度其他方法实现上述目的,完成后电脑屏幕右下角应有如下显示:
在这里插入图片描述
第二步:定位到驱动目录下,提供Windows7和Windows10两个版本驱动,由于我的电脑选择Windows10,如下:
在这里插入图片描述
单击鼠标右键安装即可,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第三步:下载FPGA工程bit到FPGA开发板,然后重启电脑,打开我的电脑–>管理–>设备管理器,应看到如下设备:
在这里插入图片描述

Linux版本XDMA驱动安装

提供Windows和Linux系统驱动,本章节介绍Linux下XDMA驱动安装;
在这里插入图片描述
Linux下驱动安装步骤如下:友情提示,Linux下,每次下载FPGA bit后都需要重启电脑才能安装驱动;

进入到Linux驱动目录下,一次执行以下两条指令即可安装,如下:
• 驱动编译终端指令:make -j8
•驱动安装终端指令:sudo insmod xdma.ko
在这里插入图片描述

测试应用程序

测试应用程序由编译XDMA驱动时自动生成,Windows版本驱动测试应用程序位置如下:
在这里插入图片描述
Linux版本驱动测试应用程序位置如下:
在这里插入图片描述
该测试程序主要测试内容包括XDMA大批量数据读写测试、XDMA小批量用户数据读写测试、XDMA中断测试等;详细测试方法参考后面的《上板调试》章节;

工程源码架构

提供3套工程源码,以工程源码1为例,工程Block Design设计如下:
在这里插入图片描述
提供3套工程源码,以工程源码1为例,综合后的工程源码架构如下:
在这里插入图片描述

PCIE上板调试注意事项

1:必须先安装本博提供的XDMA驱动,详情请参考第4章节的《XDMA驱动及其安装》,Windows版本驱动只需安装一次;
2:Windows版本下载FPGA工程bit后需要重启电脑,电脑才能识别到XDMA驱动;程序固化后也需要重启电脑;Linux版本每次载FPGA工程bit后都需要重启电脑,都需要安装XDMA驱动;
3:FPGA板卡插在主机上后一般不需要额外供电,如果你的板子元器件较多功耗较大,则需要额外供电,详情咨询开发板厂家,当然,找我买板子的客户可以直接问我;
4:PCIE调试需要电脑主机,但笔记本电脑理论上也可以外接出来PCIE,详情百度自行搜索一下,电脑主机PCIE插槽不方便操作时可以使用延长线接出来,某宝有卖;

5、vivado工程源码1详解–>Virtex7-690T-PCIE3.0 X8版本

开发板FPGA型号:Xilinx–690T–xc7vx690tffg1761-3;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
PCIE详情:PCIE3.0版本,X8,8GT/s单lane线速率;
PCIE底层方案:XDMA,中断模式,配置4条用户中断;
数据缓存架构:DDR3+BRAM;
实现功能:FPGA搭建PCIE3.0通信架构简单读写测试;​
工程作用:此工程目的是让读者掌握FPGA搭建PCIE3.0通信架构简单读写测试的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、vivado工程源码2详解–>KU060-PCIE3.0 X8版本

开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
PCIE详情:PCIE3.0版本,X8,8GT/s单lane线速率;
PCIE底层方案:XDMA,中断模式,配置4条用户中断;
数据缓存架构:DDR4+BRAM;
实现功能:FPGA搭建PCIE3.0通信架构简单读写测试;​
工程作用:此工程目的是让读者掌握FPGA搭建PCIE3.0通信架构简单读写测试的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、vivado工程源码3详解–>KU3P-PCIE3.0 X4版本

开发板FPGA型号:Xilinx–Kintex UltraScale±-xcku3p-ffva676-2-i;
FPGA开发环境:Vivado2019.1;
QT开发环境:VS2015 + Qt 5.12.10;
PCIE详情:PCIE3.0版本,X4,8GT/s单lane线速率;
PCIE底层方案:XDMA,中断模式,配置4条用户中断;
数据缓存架构:DDR4+BRAM;
实现功能:FPGA搭建XDMA中断模式的PCIE通信架构下的简单读写测试;
工程作用:此工程目的是让读者掌握FPGA搭建XDMA中断模式的PCIE通信架构的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

8、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
在这里插入图片描述
3:如果你的vivado版本高于本工程vivado版本,解决如下:
在这里插入图片描述
打开工程后会发现IP都被锁住了,如下:
在这里插入图片描述
此时需要升级IP,操作如下:
在这里插入图片描述
在这里插入图片描述

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

9、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板,没有开发板可以找本博提供;
带PCIE卡槽的电脑主机;
我的开发板了连接如下:
在这里插入图片描述

XDMA大批量数据读写测试演示

XDMA大批量数据通过XDMA的AXI4-FULL接口传输,一般连接到FPGA的MIG到板载DDR3,FPGA逻辑资源有限时也可连接至BRAM;
打开Windows CMD指令框,进入XDMA测试程序目录,并查看测试程序指令用法,如下:
• 操作指令:xdma_rw.exe
在这里插入图片描述
批量数据写操作测试:

使用 h2c_0 设备以二进制的形式读取文件 datafile4k.bin 写入到 BRAM 内存地址 0x0000000 长度为 4096 字节,如下:
• 操作指令:xdma_rw.exe h2c_0 write 0x0000000 -b -f datafile4K.bin -l 4096
在这里插入图片描述
对应的Linux下的测试指令如下:Linux下的测试需要进入root账户模式
• 操作指令:./dma_from_device -d /dev/xdma0_c2h_0 -f ./test.bin -s 4096 -a 0 -c 1
在这里插入图片描述
批量数据读操作测试:

使用 c2h_0 设备从BRAM 内存地址 0x0000000 读取长度为 4096 字节数据,并写入到datafile4K_recv.bin中保存;如下:
• 操作指令:xdma_rw.exe c2h_0 read 0x0000000 -b -f datafile4K_recv.bin -l 4096
在这里插入图片描述
对应的Linux下的测试指令如下:Linux下的测试需要进入root账户模式
• 操作指令:./dma_to_device -d /dev/xdma0_h2c_0 -f ./test.bin -s 4096 -a 0 -c 1
在这里插入图片描述
您可以使用winhex等软件来检查一下datafile4k.bin和datafile4K_recv.bin这两个文件数据是否一致;

XDMA小批量用户数据读写测试演示

XDMA小批量用户数据通过XDMA的AXI4-Lite接口传输,一般连接到FPGA内置的BRAM;
小批量用户数据写操作测试:

向 BRAM 内存地址 0x10000写入0x11和0x22两个数据,如下:
• 操作指令:xdma_rw.exe user write 0x10000 0x11 0x22
在这里插入图片描述
小批量用户数据读操作测试:

从 BRAM 内存地址 0x10000依次读出两个数据并打印,如下:
• 操作指令:xdma_rw.exe user read 0x10000 -l 2
在这里插入图片描述

XDMA用户中断测试演示

XDMA用户中断测试为测试用户中断的专用测试软件,如下:
• 操作指令:xdma_event.exe
在这里插入图片描述
对应的Linux下的测试指令如下:Linux下的测试需要进入root账户模式
• 操作指令:sudo ./pcie_irq

10、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

相关文章:

FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博客方案的PCIE2.0版本 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板…...

App相关技术以及打包

平时小伙伴们自己的博客网站只能在浏览器打开,但是有时候你想要制作自己独立个人博客app,宣传并推广自己的app,打造个人ip。如何把自己的web博客网站打包成安卓app? 1.开发App的相关技术使⽤ ⽬前市⾯上的移动互联开发技术主要分…...

【unity】【游戏开发】Unity代码不给提示怎么办?

【现象】 Unity用着用着忽然VS脚本不给提示了。 【分析】 重启Unity无效 重启VS无效 重装VS无效 感觉应该是项目设置问题 【最终方法】 打开Edit->Preferences。 如果是这个画面就把Script Editor改成自己的VS编辑器。 变成下面这个样子,点击Regenerate Pr…...

Kubernetes固定Pod IP和Mac地址

方案1: 在 Calico GitHub Issues#5196 问题的 commits#6249 提交中,引入新的 Pod 注释cni.projectcalico.org/hwAddr,用于将指定的 MAC 地址分配给容器端 Veth 接口。 将Calico升级至v3.24.1或以上版本,使用如下注解轻松设置Pod…...

计算机组成原理之数据的对齐和大/小端存放方式、计算机中数据对齐的具体方式有哪些

1、计算机组成原理之数据的对齐和大/小端存放方式 数据对齐 数据对齐是处理器为了提高处理性能而对存取数据的起始地址所提出的一种要求。 系统一次性读取内存中数据的大小是固定的,例如字长为32位的操作系统,默认的一次读取4字节内容。因此&#xff…...

【学术论文投稿】Windows11开发指南:打造卓越应用的必备攻略

【IEEE出版南方科技大学】第十一届电气工程与自动化国际会议(IFEEA 2024)_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看:https://ais.cn/u/nuyAF3 目录 引言 一、Windows11开发环境搭建 二、Windows11关键新特性 三、Windows11设计指南 …...

【毕业论文+源码】基于SSM(Spring + Spring MVC + MyBatis)的房屋租赁系统

创建一个基于SSM(Spring Spring MVC MyBatis)框架的房屋租赁系统是一个涉及多个步骤的过程。这个过程包括但不限于需求分析、数据库设计、前端界面设计以及后端逻辑实现等。 1. 需求分析 首先,明确你的房屋租赁系统的功能需求。例如&…...

【golang】解析 JSON到指定结构体

1.解析[1,2,3,4]数组类型的json package mainimport ("encoding/json""fmt" )func main() {// JSON 数据jsonData : [1, 2, 3, 4]// 定义一个切片来接收解析后的数据var numbers []int// 解析 JSON 数据到切片err : json.Unmarshal([]byte(jsonData), &am…...

设计模式——过滤器模式

一、定义和概念 定义 C 过滤器模式(Filter Pattern)也称为标准模式(Criteria Pattern),是一种设计模式,用于根据不同的标准或条件从一组对象中筛选出符合条件的对象。它将筛选条件的逻辑封装在不同的过滤器…...

Unity(四十八):Unity与Web双向交互

效果 游戏对象绑定脚本 游戏脚本源码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Tent : MonoBehaviour {public Camera camera;// Start is called before the first frame updatevoid Start(){}// Update is called once…...

web前端--网页练习

html代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>小米</title><!-- 引…...

信息安全入门——网络安全控制

目录 前言信息安全入门&#xff1a;网络安全控制基础1. 用户识别技术&#xff1a;确认你是谁2. 访问控制技术&#xff1a;定义你能做什么3. 访问控制列表&#xff08;ACL&#xff09;&#xff1a;精细的权限管理4. 漏洞控制&#xff1a;防范未然5. 入侵检测系统&#xff08;IDS…...

跟着鸟儿学飞行?扑翼机器人的感知秘籍

大家好&#xff01;今天来了解一篇扑翼机器人的研究——《Avian-inspired embodied perception in biohybrid flapping-wing robotics》发表于《Nature Communications》。在广阔天空中&#xff0c;鸟类凭借精妙翅膀结构与敏锐感知自由翱翔&#xff0c;这一直吸引着科学家探索其…...

Python画笔案例-093 绘制 彩虹图

1、绘制 彩虹图 通过 python 的turtle 库绘制 彩虹图,如下图: 2、实现代码 绘制 彩虹图,以下为实现代码: """彩虹图.py """ import turtledef draw_semi_circle(radius):"""画半圆函数"""turtle...

【数据结构】贪心算法:决策的艺术

贪心算法&#xff08;Greedy Algorithm&#xff09;是一类在每一步选择中都采取局部最优解的方法&#xff0c;希望最终能够达到全局最优解。通俗地说&#xff0c;贪心算法的思想就是“每一步都尽量做出最好的选择”&#xff0c;以期望整个过程的最终结果也达到最优状态。贪心算…...

Linux LVS详解

LVS&#xff08;Linux Virtual Server&#xff09;即Linux虚拟服务器&#xff0c;是一个基于Linux操作系统的高性能、可扩展的负载均衡器。以下是对LVS的详细介绍&#xff1a; 一、简介 LVS项目由章文嵩博士在1998年5月发起&#xff0c;是中国国内最早出现的自由软件项目之一…...

LabVIEW显微镜自动对焦系统

在生物医学研究中&#xff0c;显微镜图像的清晰度对于细胞分析非常重要。传统的手动对焦方法容易受到人为因素的影响&#xff0c;因此开发了一种自动对焦技术&#xff0c;以提高图像采集的准确性和效率。 自动对焦方法概述 该系统结合了图像清晰度评估和一维功能优化&#xff…...

基于IP的真实地址生成器

ip-geoaddress-generator 是一个基于 Web 的在线应用程序&#xff0c;能够根据 IP 地址生成真实的随机地址信息。通过多个 API 获取位置数据和随机用户信息&#xff0c;该工具为用户提供了完整的虚拟身份。它由 Next.js 和 Radix UI 构建&#xff0c;具备自动检测当前 IP 地址和…...

下面程序头的三个import语句可以合并或简化么?

下面程序头的三个import语句可以合并或简化么&#xff1f; from tkinter.simpledialog import askinteger from tkinter import * from tkinter import messagebox ——是的&#xff0c;三个import语句可以合并为一个。 合并后的import语句如下所示&#xff1a; from tkinte…...

深度学习--CNN实现猫狗识别二分类(附带下载链接, 长期有效)

1. 代码实现(包含流程解释) 样本量: 8005 # # 1.导入数据集(加载图片)数据预处理# 进行图像增强, 通过对图像的旋转 ,缩放,剪切变换, 翻转, 平移等一系列操作来生成新样本, 进而增加样本容量, # 同时对图片数值进行归一化[0:1] from tensorflow.keras.preprocessing.image …...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...