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

FPGA实现GTP光口数据回环传输,基于Aurora 8b/10b编解码架构,提供2套工程源码和技术支持

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
    • 我这里已有的 GT 高速接口解决方案
  • 3、工程详细设计方案
    • 工程设计原理框图
    • 用户数据发送模块
    • 基于GTP高速接口的数据回环传输架构
      • GTP IP 简介
      • GTP 基本结构
      • GTP 发送和接收处理流程
      • GTP 的参考时钟
      • GTP 发送接口
      • GTP 接收接口
      • GTP IP核调用和使用
    • 接收数据对齐模块
    • 接收数据比对模块
    • 工程源码架构
    • 工程仿真
  • 4、vivado工程源码1详解-->Artix7--35T版本
  • 5、vivado工程源码1详解-->Artix7--100T版本
  • 6、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 7、上板调试验证
    • 准备工作
    • GTP光口数据回环效果演示
  • 8、工程代码的获取

FPGA实现GTP光口数据回环传输,基于Aurora 8b/10b编解码架构,提供2套工程源码和技术支持

1、前言

FPGA实现SFP光口视频编解码现状;
目前基于Xilinx系列FPGA的SFP光口视频编解码主要有以下几种,Artix7系列的GTP、Kintex7系列的GTX、更高端FPGA器件的GTH、GTY、GTV、GTM等,线速率越来越高,应用场景也越来越高端;编码方式也是多种多样,有8b/10b编解码、64b/66b编解码、HDMI编解码、SDI编解码等等;本设计采用7系列的GTP作为高速接口、8b/10b编解码的方式实现SFP光口数据回环传输;

工程概述

本设计使用Xilinx Artix7系列FPGA为平台,实现GTP 8b/10b编解码数据回环传输,旨在为读者提供一套精简版的、基于GTP 8b/10b编解码的数据收发和数据对齐架构;

首先FPGA内部设计了一个用户数据发送模块,该模块生成发送数据帧,发送数据帧由帧头+数据+帧尾的经典三段式构成;让后调用Xilinx官方的GTP IP核实现发送数据的8b/10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的发送数据通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收,然后送入Xilinx官方的GTP IP核实现接收数据8b/10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入数据对齐模块,实现错位数据对齐;然后数据送入用户接收数据比对模块,实现帧头检测、数据逐个比对、帧尾检测等操作,以检验数据收发的正确性;针对市场主流需求,本博客设计并提供2套工程源码,具体如下:
在这里插入图片描述
现对上述2套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx–Artix7–xc7a35tfgg484-2;首先FPGA内部设计了一个用户数据发送模块,该模块生成发送数据帧,发送数据帧由帧头+数据+帧尾的经典三段式构成;让后调用Xilinx官方的GTP IP核实现发送数据的8b/10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的发送数据通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收,然后送入Xilinx官方的GTP IP核实现接收数据8b/10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入数据对齐模块,实现错位数据对齐;然后数据送入用户接收数据比对模块,实现帧头检测、数据逐个比对、帧尾检测等操作,以检验数据收发的正确性;该工程的作用是让读者快速掌握GTP 8b/10b编码数据传输的工程架构设计,该工程提供了仿真工程+上板应用工程,应用价值较高;

工程源码2

开发板FPGA型号为Xilinx–Artix7–xc7a100tfgg484-2;首先FPGA内部设计了一个用户数据发送模块,该模块生成发送数据帧,发送数据帧由帧头+数据+帧尾的经典三段式构成;让后调用Xilinx官方的GTP IP核实现发送数据的8b/10b编码和数据串化,将并行数据串化为高速串行差分信号,线速率设置为5Gbps,编码后的发送数据通过板载的SFP光口的光纤输出;然后用板载的SFP光口的光纤接收,然后送入Xilinx官方的GTP IP核实现接收数据8b/10b解码和数据解串,将差分高速串行信号解为并行数据;然后数据送入数据对齐模块,实现错位数据对齐;然后数据送入用户接收数据比对模块,实现帧头检测、数据逐个比对、帧尾检测等操作,以检验数据收发的正确性;该工程的作用是让读者快速掌握GTP 8b/10b编码数据传输的工程架构设计,该工程提供了仿真工程+上板应用工程,应用价值较高;

本博客详细描述了FPGA基于Aurora 8b/10b编解码架构实现GTP光口数据回环传输的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

我这里已有的 GT 高速接口解决方案

我的主页有FPGA GT 高速接口专栏,该专栏有 GTP 、 GTX 、 GTH 、 GTY 等GT 资源的视频传输例程和PCIE传输例程,其中 GTP基于A7系列FPGA开发板搭建,GTX基于K7或者ZYNQ系列FPGA开发板搭建,GTH基于KU或者V7系列FPGA开发板搭建,GTY基于KU+系列FPGA开发板搭建;以下是专栏地址:
点击直接前往

3、工程详细设计方案

工程设计原理框图

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

用户数据发送模块

用户数据发送模块用于产生发送数据,发送数据以数据帧的形式产生,由帧头+数据+帧尾的经典三段式构成;如下:
在这里插入图片描述
帧头:

可参数化配置,4字节,但低8位必须为8’hbc,帧头用于定义一帧数据的开始;

数据:

单个数据4字节,数据内容可任意,我的设计中数据段为从零开始的累加数,数据段长度可参数化配置,数据段为传输的有效数据;

帧尾:

可参数化配置,4字节,但低8位必须为8’hbc,帧头用于定义一帧数据的结束;

用户数据发送模块顶层接口如下:
在这里插入图片描述

基于GTP高速接口的数据回环传输架构

本设计使用GTP高速接口数据回环传输,使用8b/10b编解码协议,总体代码架构如下:
在这里插入图片描述
基于GTP高速接口的数据回环传输架构顶层接口核参数配置如下:
在这里插入图片描述
本设计共例化了2路GTP,所以2路GTP的收发回环方式也做了灵活的参数化配置,如果你只需要1路GT,则可删除另一路,如果你想例化更多路GT,则可根据上述设计方法扩展,十分方便;

GTP IP 简介

关于GTP介绍最详细的肯定是Xilinx官方的《ug482_7Series_GTP_Transceivers》,我们以此来解读:《ug482_7Series_GTP_Transceivers》的PDF文档我已放在了资料包里;我用到的开发板FPGA型号为Xilinx–Artix7系列FPGA;带有4路GTP资源,每通道的收发速度为500 Mb/s到6.6 Gb/s之间。GTP收发器支持不同的串行传输接口或协议,比如8b/10b编解码、PCIE /2.0接口、万兆网 XUAI 接口、OC-48、串行 RapidIO 接口、 SATA(Serial ATA) 接口、数字分量串行接口(SDI)等等;

GTP 基本结构

Xilinx 以 Quad 来对串行高速收发器进行分组,四个串行高速收发器和一个 COMMOM(QPLL)组成一个 Quad,每一个串行高速收发器称为一个 Channel(通道),下图为四路 GTP 收发器在Artix7系列FPGA 芯片中的示意图;《ug482_7Series_GTP_Transceivers》第13页;GTP 的具体内部逻辑框图如下所示,它由四个收发器通道 GTPE2_CHANNEL原语 和一个GTPE2_COMMON 原语 组成。每路 GTPE2_CHANNEL 包含发送电路 TX 和接收电路 RX;《ug482_7Series_GTP_Transceivers》第14页;每个 GTPE2_CHANNEL 的逻辑电路如下图所示:《ug482_7Series_GTP_Transceivers》第15页;
在这里插入图片描述
GTPE2_CHANNEL的发送端和接收端功能是独立的,均由 PMA(Physical Media Attachment,物理媒介适配层)和 PCS(Physical Coding Sublayer,物理编码子层)两个子层组成。其中 PMA 子层包含高速串并转换(Serdes)、预/后加重、接收均衡、时钟发生器及时钟恢复等电路。PCS 子层包含8B/10B 编解码、缓冲区、通道绑定和时钟修正等电路。
这里说多了意义不大,因为没有做过几个大的项目是不会理解这里面的东西的,对于初次使用或者想快速使用者而言,更多的精力应该关注IP核的调用和使用,后面我也会重点将到IP核的调用和使用;

GTP 发送和接收处理流程

首先用户逻辑数据经过 8B/10B 编码后,进入一个发送缓存区(Phase Adjust FIFO),该缓冲区主要是 PMA 子层和 PCS 子层两个时钟域的时钟隔离,解决两者时钟速率匹配和相位差异的问题,最后经过高速 Serdes 进行并串转换(PISO),有必要的话,可以进行预加重(TX Pre-emphasis)、后加重。值得一提的是,如果在 PCB 设计时不慎将 TXP 和 TXN 差分引脚交叉连接,则可以通过极性控制(Polarity)来弥补这个设计错误。接收端和发送端过程相反,相似点较多,这里就不赘述了,需要注意的是 RX 接收端的弹性缓冲区,其具有时钟纠正和通道绑定功能。这里的每一个功能点都可以写一篇论文甚至是一本书,所以这里只需要知道个概念即可,在具体的项目中回具体用到,还是那句话:对于初次使用或者想快速使用者而言,更多的精力应该关注IP核的调用和使用。

GTP 的参考时钟

GTP 模块有两个差分参考时钟输入管脚(MGTREFCLK0P/N 和 MGTREFCLK1P/N),作为 GTP模块的参考时钟源,用户可以自行选择。一般的A7系列开发板上,都有一路 125Mhz 的 GTP 参考时钟连接到 MGTREFCLK0/1上,作为 GTP 的参考时钟。差分参考时钟通过IBUFDS 模块转换成单端时钟信号进入到 GTPE2_COMMOM 的 PLL0 和 PLL1 中,产生 TX 和 RX 电路中所需的时钟频率。TX 和 RX 收发器速度相同的话,TX 电路和 RX 电路可以使用同一个 PLL 产生的时钟,如果 TX 和 RX收发器速度不相同的话,需要使用不同的 PLL 时钟产生的时钟。参考时钟这里Xilinx给出的GT参考例程已经做得很好了,我们调用时其实不用修改;GTP 的参考时钟结构图如下:《ug482_7Series_GTP_Transceivers》第21页;
在这里插入图片描述

GTP 发送接口

《ug482_7Series_GTP_Transceivers》的第75到123页详细介绍了发送处理流程,其中大部分内容对于用户而言可以不去深究,因为手册讲的基本都是他自己的设计思想,留给用户可操作的接口并不多,基于此思路,我们重点讲讲GTP例化时留给用户的发送部分需要用到的接口;用户只需要关心发送接口的时钟和数据即可;

GTP 接收接口

《ug482_7Series_GTP_Transceivers》的第125到213页详细介绍了发送处理流程,其中大部分内容对于用户而言可以不去深究,因为手册讲的基本都是他自己的设计思想,留给用户可操作的接口并不多,基于此思路,我们重点讲讲GTP例化时留给用户的发送部分需要用到的接口;用户只需要关心接收接口的时钟和数据即可;

GTP IP核调用和使用

GTP IP核配置调用在工程种位置如下:
在这里插入图片描述
GTP IP核调用和使用很简单,通过vivado的UI界面即可完成,如下:
在这里插入图片描述
有别于网上其他博主的教程,我个人喜欢用如下图的共享逻辑:这样选择的好处有两个,一是方便DRP变速,二是便于IP核的修改,修改完IP核后直接编译即可,不再需要打开example工程,再复制下面的一堆文件放到自己的工程什么的,玩儿个GTP需要那么复杂么?
在这里插入图片描述
这里对上图的标号做解释:
1:线速率,根据自己的项目需求来,GTP的范围是0.5到6.25G,由于我的项目是视频传输,所以在GTP的速率范围内均可,为了通用性,我在vivado工程中配置为5G;
2:参考时钟,这个得根据你的原理图来,可以是80M、125M、148.5M、156.25M等等,我的开发板是125M;
4:GTP组的绑定,这个很重要,他的绑定参考依据有两个,已是你的开发板原理图,而是官方的参考资料《ug482_7Series_GTP_Transceivers》,官方将GTP资源分成了4组,名字分别为X0Y0、X0Y1、X0Y2、X0Y3,由于GT资源是Xilinx系列FPGA的专用资源,占用专用的Bnak,所以引脚也是专用的,那么这些GTP组和引脚是怎么对应的呢?《ug482_7Series_GTP_Transceivers》的说明如下:红框内为的我的开发板原理图对应的FPGA引脚;
在这里插入图片描述
我的板子原理图如下:
在这里插入图片描述
选择外部数据位宽32bit的8b/10b编解码,如下:
在这里插入图片描述
下面这里讲的是K码检测:
在这里插入图片描述
这里选择K28.5,也就是所谓的COM码,十六进制为bc,他的作用很多,可以表示空闲乱序符号,也可以表示数据错位标志,这里用来标志数据错位,8b/10b协议对K码的定义如下:
在这里插入图片描述
下面讲的是时钟矫正,也就是对应GTP内部接收部分的弹性buffer;
在这里插入图片描述
这里有一个时钟频偏的概念,特别是收发双方时钟不同源时,这里设置的频偏为100ppm,规定每隔5000个数据包发送方发送一个4字节的序列,接收方的弹性buffer会根据这4字节的序列,以及数据在buffer中的位置来决定删除或者插入一个4字节的序列中的一个字节,目的是确保数据从发送端到接收端的稳定性,消除时钟频偏的影响;

接收数据对齐模块

由于GT资源的aurora 8b/10b数据收发天然有着数据错位的情况,所以需要对接受到的解码数据进行数据对齐处理,数据对齐模块代码位置如下:
在这里插入图片描述
我定义的 K 码控制字符格式为:XX_XX_XX_BC,所以用一个rx_ctrl 指示数据是否为 K 码 的 COM 符号;
rx_ctrl = 4’b0000 表示 4 字节的数据没有 COM 码;
rx_ctrl = 4’b0001 表示 4 字节的数据中[ 7: 0] 为 COM 码;
rx_ctrl = 4’b0010 表示 4 字节的数据中[15: 8] 为 COM 码;
rx_ctrl = 4’b0100 表示 4 字节的数据中[23:16] 为 COM 码;
rx_ctrl = 4’b1000 表示 4 字节的数据中[31:24] 为 COM 码;
基于此,当接收到有K码时就对数据进行对齐处理,也就是将数据打一拍,和新进来的数据进行错位组合,这是FPGA的基础操作,这里不再赘述;数据对齐模块顶层接口如下:
在这里插入图片描述

接收数据比对模块

接收数据比对模块用于和发送数据比对,用于验证数据收发的正确性,由帧头检测+数据比对+帧尾检测的经典三段式构成;如下:
在这里插入图片描述
帧头检测:

帧头可参数化配置,4字节,但低8位必须为8’hbc,帧头检测用于检测一帧数据的开始,是数据比对状态机的初始跳转条件,只有检测到正确的帧头后,才能进入有效数据段的逐个比对状态;

有效数据段逐个比对:

单个数据4字节,数据内容可任意,我的设计中数据段为从零开始的累加数,可与用户数据发送模块生成的累加数逐个比对,数据段长度可参数化配置;

帧尾检测:

帧头可参数化配置,4字节,但低8位必须为8’hbc,帧头检测用于检测一帧数据的结束,是下一帧数据比对的跳转条件,只有检测到正确的帧尾后,才能断定一帧数据比对正确,才能进入下一帧数据比对状态;

接收数据比对模块顶层接口如下:
在这里插入图片描述

工程源码架构

提供2套工程源码,以工程源码1为例,综合后的工程源码架构如下:
在这里插入图片描述
工程编译后资源消耗低、功耗低、时序收敛,符合工程项目应用要求,如下:
在这里插入图片描述

工程仿真

工程代码中已提供了仿真,可在vivado中直接仿真,操作如下:
在这里插入图片描述
仿真结果如下:
在这里插入图片描述
需要注意的是;GTP仿真有时候IP起不来,但上板调试却可以起来,这个BUG至今上不知道为什么。。。

4、vivado工程源码1详解–>Artix7–35T版本

开发板FPGA型号:Artix7–xc7a35tfgg484-2;
FPGA开发环境:Vivado2019.1;
输入:FPGA内部生成的发送数据帧;
输出:FPGA内部做收发数据比对,并输出比对结果;
回环光口类型:SFP光口;
高速接口类型:GTP,线速率5Gbps;
高速接口编解码协议:8b/10b编解码;
实现功能:FPGA实现GTP光口数据回环传输;
工程作用:此工程目的是让读者掌握FPGA实现GTP光口数据回环传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、vivado工程源码1详解–>Artix7–100T版本

开发板FPGA型号:Artix7–xc7a100tfgg484-2;
FPGA开发环境:Vivado2019.1;
输入:FPGA内部生成的发送数据帧;
输出:FPGA内部做收发数据比对,并输出比对结果;
回环光口类型:SFP光口;
高速接口类型:GTP,线速率5Gbps;
高速接口编解码协议:8b/10b编解码;
实现功能:FPGA实现GTP光口数据回环传输;
工程作用:此工程目的是让读者掌握FPGA实现GTP光口数据回环传输的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程移植说明

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软核;

7、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板,没有开发板可以找本博提供;
SFP光模块和光纤;
我的开发板了连接如下:
在这里插入图片描述

GTP光口数据回环效果演示

GTP光口数据回环效果演示如下:
在这里插入图片描述

8、工程代码的获取

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

相关文章:

FPGA实现GTP光口数据回环传输,基于Aurora 8b/10b编解码架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案 3、工程详细设计方案工程设计原理框图用户数据发送模块基于GTP高速接口的数据回环传输架构GTP IP 简介GTP 基本结构GTP 发送和接收…...

Tongweb8命令行使用收集(by lqw)

文章目录 声明对应版本修改thanos用户密码部署应用到默认实例节点相关操作新增节点(一般一个服务器ip只能装一个节点)启动节点(需确认节点没有运行)停止节点删除节点节点新增应用节点查看应用节点启动应用节点停止应用节点卸载应用(谨慎操作,卸载后应用就没有了,建议备份后…...

基于STM32的火灾烟雾报警器设计开题报告

开题报告 题目:基于STM32的火灾烟雾报警器Proteus仿真设计 一、研究背景与意义 随着现代城市化进程的加快,火灾安全问题日益凸显,火灾的早期预警对于减少人员伤亡和财产损失至关重要。传统的火灾报警系统往往依赖于烟雾或温度的单一检测&a…...

go 语言zero项目设置后台运行的几种方式

在 Go 项目中将程序设置为后台运行通常有几种方法。你可以使用 systemd、nohup 或者将 Go 程序作为服务启动。以下是几种常见的方法,分别适用于不同的场景。 ### 1. 使用 nohup 命令将 Go 程序后台运行 nohup 是一个常用的 Linux 工具,它可以将命令行程…...

数据库中的代数运算

这些代数基本运算通常被封装在数据库查询语言中,如SQL中的SELECT、FROM、WHERE等子句,使得用户可以更方便地对数据库进行查询和处理。 下面的介绍基于以下两个关系来说明: 传统的集合运算 并(∪) 合并两个关系中的元组…...

【机器学习】机器学习的基本分类-无监督学习-核密度估计(Kernel Density Estimation, KDE)

核密度估计(Kernel Density Estimation, KDE) 核密度估计(KDE)是一种非参数化方法,用于估计数据的概率密度函数(PDF)。与直方图相比,KDE 能够生成平滑的概率密度曲线,是…...

语义分割——DeeplabV3plus

DeeplabV3plus 是一种先进的用于语义分割任务的深度学习模型。DeepLabV3plus模型采用了编码器-解码器(Encoder-Decoder)结构,通过编码器提取图像特征,再通过解码器将这些特征映射回原始图像尺寸,实现像素级的分类。具体…...

【Leetcode 每日一题 - 扩展】50. Pow(x, n)

问题背景 实现 p o w ( x , n ) pow(x, n) pow(x,n)&#xff0c;即计算 x x x 的整数 n n n 次幂函数&#xff08;即&#xff0c; x n x_n xn​&#xff09;。 数据约束 − 100.0 < x < 100.0 -100.0 \lt x \lt 100.0 −100.0<x<100.0 − 2 31 ≤ n ≤ 2 31 −…...

富士相机基本参数学习

一色彩 富士相机视频调色入门课&#xff3b;上&#xff3d;&#xff5c;胶片模拟&#xff0c;白平衡与色彩&#xff5c;全是样片哦_哔哩哔哩_bilibili 步骤&#xff1a; 1设置曝光模式&#xff1a; 自动模式下拍摄降低难度 2设置白平衡&#xff1a;自动 不满意可以设置 3色彩&…...

MySQL:表的约束

目录 一. 表的约束和约束的目标 二. 空属性 三. 默认值default 四. 列描述 五. zerofill 六. 主键 6.1 建表时定义主键 6.2 去掉主键 6.3 建表后添加主键 6.4 复合主键 七. 自增长 八. 唯一键 九. 外键 一. 表的约束和约束的目标 表…...

Python鼠标轨迹算法(游戏防检测)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

Elasticsearch 架构及 Lucene 索引结构原理入门

文章目录 Elasticsearch 整体架构Lucene 索引结构Lucene 倒排索引核心原理倒排索引倒排表&#xff08;Posting List&#xff09; Elasticsearch 整体架构 一个 ES Index 在集群模式下&#xff0c;有多个Node&#xff08;节点&#xff09;组成&#xff0c;每个节点就是ES的 inst…...

vue3项目通过修改虚拟dom实现向页面上追加内容

前言&#xff1a; demo效果&#xff1a; 1、刚进页面&#xff0c;渲染welcome.vue组件内容。2、向输入框中输入数据按回车&#xff0c;页面上追加text.vue组件内容&#xff0c;输入框中的数据也被传递给text.vue组件&#xff0c;并在页面上进行了展示。3、点击text.vue组件中的…...

Java:集合(List、Map、Set)

文章目录 1. Collection集合1-1. 迭代器遍历方式1-2. 通过for循环进行遍历1-3. forEach遍历 2. List集合2-1. ArrayList底层实现原理2-2. LinkedList底层实现原理 3. Set集合3-1. HashSet 底层实现3-2. LinkedHashSet 底层实现3-3. TreeSet 4. Collection集合->总结5. Map集…...

208-Base Camera Link 图像信号模拟器

&#xff11;、板卡概述 该板卡是基于Altra FPGA处理芯片EP3C40F484C8&#xff08;兼容EP3C16F484C8&#xff09;&#xff0c;模拟产生自定义分辨率的Camera Link 图像信号&#xff0c;并以base Camera Link输出。主要用于作为Camera Link 图像信号模拟器&#xff0c;模拟各类C…...

【创建模式-蓝本模式(Prototype Pattern)】

目录 Overview应用场景代码演示JDK Prototype pattern 更优实践泛型克隆接口 https://doc.hutool.cn/pages/Cloneable/#%E6%B3%9B%E5%9E%8B%E5%85%8B%E9%9A%86%E7%B1%BB The prototype pattern is a creational design pattern in software development. It is used when the t…...

(一)强化学习基础概念及学习路径

目录 前言 一、强化学习是什么&#xff1f; 二、强化学习中的基本概念 1.状态 2.动作 3.奖励 4.策略 5.智能体 6.环境 7.智能体与环境交互 三、强化学习路径 总结 前言 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是机器学习的范式和方法论之一&a…...

Android 好的开源库

1. 权限请求框架 GitHub - getActivity/XXPermissions: Android 权限请求框架&#xff0c;已适配 Android 14 2. 下载框架 GitHub - lingochamp/okdownload: A Reliable, Flexible, Fast and Powerful download engine....

Spring中xxAware接口和InitializingBean接口的作用

question&#xff1a;Aware接口和InitializingBean接口的作用都可以用例如Autowired PostConstruct注解来实现&#xff0c;那么其相比较于注解的实现&#xff0c;优势是什么呢&#xff1f; 早期的Spring中并不存在注解开发&#xff0c;注解开发是在后期的Spring中引入&#xf…...

Nginx WebDAV扩展模块安装与配置完全指南

Nginx WebDAV扩展模块安装与配置完全指南 nginx-dav-ext-module nginx WebDAV PROPFIND,OPTIONS,LOCK,UNLOCK support [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-dav-ext-module 项目基础介绍 Nginx WebDAV扩展模块(nginx-dav-ext-module)是由a…...

算法刷题Day16: BM41 输出二叉树的右视图

题目链接 描述 思路&#xff1a; 递归构造二叉树在Day15有讲到。复习一下&#xff0c;就是使用递归构建左右子树。将中序和前序一分为二。 接下来是找出每一层的最右边的节点&#xff0c;可以利用队列层次遍历。 利用队列长度记录当前层有多少个节点&#xff0c;每次从队列里…...

1.2 计算机网络的分类和应用(重要知识点)

1.2.1 计算机网络的分类 计算机网络的定义&#xff1a; 由通信线路互相连接的、能自主工作的计算机构成&#xff0c;强调各计算机&#xff08;工作站&#xff09;拥有独立的计算资源和任务能力。与多终端分时系统不同&#xff0c;后者终端仅作为主机接口&#xff0c;不具备计…...

Xcode

info.plist Appearance Light 关闭黑暗模式 Bundle display name 设置app名称&#xff0c;默认为工程名 Location When In Use Usage Description 定位权限一共有3个key 1.Privacy - Location When In Use Usage Description 2.Privacy - Location Always and When In U…...

HarmonyOS 5.0应用开发——属性动画

【高心星出品】 文章目录 属性动画animateTo属性动画animation属性动画 属性动画 属性接口&#xff08;以下简称属性&#xff09;包含尺寸属性、布局属性、位置属性等多种类型&#xff0c;用于控制组件的行为。针对当前界面上的组件&#xff0c;其部分属性&#xff08;如位置属…...

Freertos任务切换

一、操作系统进行任务切换的时机&#xff1a; 采用信号量实现任务的互斥&#xff1a; 二、FreeRTOS 任务切换场合 PendSV 中断的时候提到了上下文(任务)切换被触发的场合&#xff1a; ● 可以执行一个系统调用 ● 系统滴答定时器(SysTick)中断。 1、执行系统调用 执行系统…...

【汇编】思考汇编中的两个基本问题

1. 若干年前的疑问 几年前还在大学学习汇编时&#xff0c;不管是考试还是课程设计&#xff0c;其实都很顺利。但是心里一直对什么时候使用哪个寄存器存在疑惑&#xff0c;编写汇编时&#xff0c;没有十足的把握&#xff0c;都是抱着试一试的心态去完成了课程任务。 工作八年有…...

开发环境服务器 vs 生产环境服务器:开发与生产须分明

【背景】作为开发者&#xff0c;我们在不同的阶段都与两种服务器环境打交道——开发环境服务器和生产环境服务器。虽然听起来名字相似&#xff0c;但它们的职责和工作方式简直是天差地别&#xff01; 不知道朋友们有没有跟我一开始刚了解的时候的一些疑惑&#xff0c;因为刚开始…...

Tomcat的安装即使用

Tomcat的概念 Tomcat服务器是Java语言开发的&#xff0c;免费的开放源代码的Web应用服务器。 Tomcat处理静态HTML的能力远不及Apache或者Nginx&#xff0c;通常是作为一个Servlet和JSP容器&#xff0c;单独运行在后端。 Tomcat是由三个功能组合而成&#xff1a; java servlet&…...

外包干了9天,技术退步明显。。。。。

时光荏苒&#xff0c;转眼我已是一个拥有近四年功能测试经验的大专生。19年&#xff0c;我满怀激情地通过校招进入湖南某知名软件公司&#xff0c;期待在这里开启我的职业生涯。然而&#xff0c;长时间的舒适环境让我渐渐失去了前进的动力&#xff0c;技术停滞不前&#xff0c;…...

梳理你的思路(从OOP到架构设计)_基本OOP知识04

目录 1、 主动型 vs.基於被动型 API 1&#xff09;卡榫函数实现API 2&#xff09;API的分类 3&#xff09;回顾历史 4&#xff09;API >控制力 2、 结语&复习&#xff1a; 接口与类 1&#xff09;接口的表示 2&#xff09;Java的接口表示 1、 主动型 vs.基於被动…...

每天40分玩转Django:简介和环境搭建

Django简介和环境搭建 一、课程概述 学习项目具体内容预计用时Django概念Django框架介绍、MVC/MTV模式、Django特点60分钟环境搭建Python安装、pip配置、Django安装、IDE选择45分钟创建项目项目结构、基本配置、运行测试75分钟实战练习创建个人博客项目框架60分钟 二、Djang…...

OpenCV相关函数

一、Sobel算子函数 (cv2.Sobel) 功能 Sobel算子是一个梯度算子&#xff0c;用于边缘检测。通过计算图像中像素的梯度&#xff0c;Sobel算子可以检测出水平和垂直方向上的边缘。 参数 src&#xff1a;输入图像。 ddepth&#xff1a;输出图像的深度&#xff08;如cv2.CV_8U, cv…...

【理想汽车中科院】基于模仿学习的端到端自动驾驶数据缩放规律

论文: https://arxiv.org/pdf/2412.02689 项目: https://github.com/ucaszyp/Driving-Scaling-Law 0. 摘要 端到端自动驾驶范式因其可扩展性而最近吸引了大量关注。然而&#xff0c;现有方法受到现实世界数据规模有限的制约&#xff0c;这阻碍了对端到端自动驾驶相关扩展规律…...

重卡补能新未来:光储充换一体开启高效之路

《重卡补能新未来&#xff1a;光储充换一体开启高效之路》 一、光储充换一体重卡补能模式的兴起 重卡运输行业在电动化进程加速下迎来变革&#xff0c;光储超充快换一体化补能站成为新趋势。 随着国家 “双碳” 战略的持续推进&#xff0c;新能源汽车市场蓬勃发展&#xff0c…...

Mybatis Plus 3.0 快速入门

1、简介 MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 2、创建并初始化数据库 2.1、创建数据库 mybatis_plus 2.2、创建 User 表 其表结构如下: idnameageemail1Jone18test1@baomidou.com2Jack…...

ABAP:MB51字段增强

MB51所对应的程序&#xff1a;RM07DOCS 1.定义增强字段&#xff1a;RM07DOCS_GENERATED中定义 2.取值&#xff1a;RM07DOCS中detail_list中加取值逻辑 也有对ITAB取值做调整的&#xff0c;但是要写很多处&#xff0c;直接这里取值就很简单。 3.展示字段&#xff1a;RM07DOCS中…...

nVisual 定制化APP打包流程

一、下载打包软件 HBuilder X 下载地址&#xff1a;https://dcloud.io/hbuilderx.html 安装:此软件为绿色软件&#xff0c;解压即可使用。进入目录&#xff0c;双击exe启动。 此软件需要注册&#xff0c;打开时会提供跳转链接&#xff0c;通过邮箱注册账号。 注册成功后&#…...

k8s的节点亲和性NodeAffinity

关键词: ① requiredDuringSchedulingIgnoredDuringExecution&#xff1a;表示强匹配&#xff0c;必须要满足 ② preferredDuringSchedulingIgnoredDuringExecution&#xff1a;表示弱匹配&#xff0c;尽可能满足&#xff0c;但不保证 示例&#xff1a; apiVersion: v1 kind:…...

比特币国家与企业机构“战略储备”潮起

100 万枚 BTC 的战略储备资产&#xff0c;是一个什么概念&#xff1f; 据世界黄金协会统计数据显示&#xff0c;截至 2024 年第三季度&#xff0c;美联储黄金储备总量达 8133.46 吨&#xff08;约合 5300 亿美元&#xff09;&#xff0c;稳居全球首位。而 100 万枚 BTC 当前市…...

Vue生命周期钩子函数:深入解析与实践

作为高级Vue前端开发人员&#xff0c;对Vue组件的生命周期钩子函数有着深刻的理解是至关重要的。生命周期钩子函数是指在Vue组件的创建、更新、销毁等过程中&#xff0c;Vue自动调用的一系列方法。通过这些钩子函数&#xff0c;我们可以在组件的不同生命周期阶段执行特定的操作…...

mysql、postgresql、oceanbase调优

一、mysql 1、my.cnf [mysqld_safe] log-error=/data/mysql/log/mysql.log pid-file=/data/mysql/run/mysqld.pid[client] socket=/data/mysql/run/mysql.sock default-character-set=utf8[mysqld] basedir=/usr/local/mysql tmpdir=/data/mysql/tmp datadir=/data/mysql/dat…...

【Flux.jl】 卷积神经网络

Flux.jl 是包含卷积神经网络的, 但是官方API文件中没有给出一个完整的程序框架, 只是对所需神经元给了局部解释, 此外对 model-zoo 模型动物园中的案例没有及时跟着 Flux.jl 的版本更新, 也无法运行出来结果。 因此本文搭建了一个完整可训练的卷积神经网络。 Conv 卷积算子…...

数字证书管理工具 openssl keytool

OPENSSL 命令 openssl command [ command_opts ] [ command_args ] 常用command: version 用于查看版本信息 enc 用于加解密 ciphers 列出加密套件 genrsa 用于生成私钥 -des|-des3|-idea&#xff1a;用来加密私钥文件的三种对称加密算法。 rsa …...

notify和notifyAll

notify和notifyAll 简单来说&#xff1a; notify()&#xff1a;只唤醒一个等待的线程&#xff0c;如果有多个线程在等待&#xff0c;那么被唤醒的线程是随机选择的。 notifyAll()&#xff1a;唤醒在该对象监视器上等待的所有线程&#xff0c;但是这些被唤醒的线程仍然需要竞争…...

删除MySQL的多余实例步骤

删除 MySQL 的多余实例通常意味着我们希望卸载或停止某个 MySQL 服务器实例&#xff0c;并从系统中完全移除它。这通常涉及到几个步骤&#xff0c;包括但不限于停止服务、删除数据目录、卸载软件&#xff08;如果适用&#xff09;等。 1.基于 Linux 的系统上删除 MySQL 的多余…...

LDR6500应用:C转DP线材双向投屏开启全新体验

在当今这个科技日新月异、蓬勃发展的时代&#xff0c;高清视频传输以及显示技术已经深深融入到我们日常生活与工作的方方面面&#xff0c;其重要性不言而喻。不管是在商务场合的会议演示&#xff0c;还是教育领域的娱乐享受&#xff0c;以及充满激情的游戏竞技领域&#xff0c;…...

商业化大前端在性能优化领域的探索与实践

导读&#xff1a;在业务飞速发展的过程中&#xff0c;用户体验是必不可少的一个环节&#xff0c;而页面性能是直接影响用户体验的重要因素。当页面加载时间过长、交互操作不流畅时&#xff0c;意味着业务可能会出现转化率降低、用户流失等业务问题。在过去一年&#xff0c;为了…...

FinClip | 2024年11月产品大事记

FinClip 的使命是使您&#xff08;业务专家和开发人员&#xff09;能够通过小程序解决关键业务流程挑战&#xff0c;并完成数字化转型的相关操作。不妨让我们看看在11月的产品与市场发布亮点&#xff0c;看看是否有助于您实现目标。 产品方面的相关动向&#x1f447;&#x1f…...

EasyPlayer.js在同一个http的mp4视频流地址,浏览器可以播放,播放器中却播放不了

流媒体技术正站在数字化时代的前沿&#xff0c;随着互联网技术的不断进步和市场需求的日益增长&#xff0c;其发展前景显得尤为广阔。随着全球数字化转型的不断深入&#xff0c;流媒体行业将迎来更加繁荣的未来&#xff0c;成为信息传播和娱乐消费的主要渠道。 用户遇到在同一个…...

探索云原生安全解决方案的未来

我们是否充分意识到云端所面临的网络安全威胁&#xff1f; 在当今互联互通的世界中&#xff0c;维护安全的环境至关重要。云的出现扩大了潜在威胁的范围&#xff0c;因为它催生了机器身份&#xff08;称为非人类身份 (NHI)&#xff09;及其秘密。随着组织越来越多地转向云原生…...