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 发送和接收…...

Linux网络 UDP socket
背景知识 我们知道, IP 地址用来标识互联网中唯一的一台主机, port 用来标识该主机上唯一的一个网络进程,IPPort 就能表示互联网中唯一的一个进程。所以通信的时候,本质是两个互联网进程代表人来进行通信,{srcIp&…...

如何持续优化呼叫中心大模型呼入机器人的性能?
如何持续优化呼叫中心大模型呼入机器人的性能? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 持续优化呼叫中心大模型呼入机器人的性能是一个复杂而细致的过程,它涉及到数据、模型结构…...

鸿蒙项目云捐助第四讲鸿蒙App应用的登陆注册页实现
根据app的操作流程可以知道,当启动页启动后,点击启动页中的页面就进入到了登录页。本讲就是针对于登录注册页的实现,实现的界面参考下图。 这里根据这个素材的参考实现鸿蒙Next云捐助的登录页。 一、鸿蒙Next云捐助登录页的实现 在项目中继…...

Windows本地搭建Redis集群(集群模式)
手打不易,如果转摘,请注明出处! 注明原文:https://blog.csdn.net/q258523454/article/details/144477957 前言 Redis版本:redis 5.0.14.1 Windows版本:Windows10 本文只讲集群模式 1. 安装Redis 1.1 …...

使用FastGPT制做一个AI网站日志分析器
越来越的多网站面临每天上千次的扫描和各类攻击,及时发现攻击IP,并有效的屏蔽不良访问成为网站安全的重要保障,这里我们使用AI来完成对网站日志的日常分析。 我们来使用FastGPT来制做一个AI网站日志析器,下面就开始: …...

探索 Echarts 绘图:数据可视化的奇妙之旅
目录 一、Echarts 初印象 二、搭建 Echarts 绘图环境 三、绘制第一个图表:柱状图的诞生 四、图表的美化与定制:让数据更具吸引力 1. 主题切换:一键变换风格 2. 颜色调整:色彩搭配的艺术 3. 标签与提示框:丰富信…...

网络基础(IP和端口)
网络连接的核心-TCP/IP体系结构(IP和端口) 什么是IP地址 1.IP地址是电子设备(计算机)在互联网上的唯一标识 2.用来在互联网中寻找电脑 IP 地址就像是你家的地址一样,不过它是在网络世界里用来找到一台电脑或者其他网…...

UE4与WEB-UI通信
前端HTML代码 <!DOCTYPE html><html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><title>test web ui</title><script src"https://cdn.b…...

前缀和与差分算法详解
定义 前缀和是一种数据预处理技术,它指的是从数组的第一个元素开始,到当前元素为止的所有元素的和。这种技术可以快速计算任意区间内元素的和,而不需要每次都从头开始累加。 差分则是前缀和的逆运算,它主要用于处理对数组某个区…...

《深入探究:C++ 在多方面对 C 语言实现的优化》
目录 一、C 在 C 上进行的优化二、C 关键字(C 98)三、C 的输入输出1. cin 和 cout 的使用2. cin、cout 和 scanf()、printf() 的区别 三、命名空间1. 命名空间的使用2. 嵌套命名空间3. 在多个头文件中使用相同的命名空间 四、函数缺省值1. 缺省值的使用2…...

React 第十六节 useCallback 使用详解注意事项
useCallback 概述 1、useCallback 是在React 中多次渲染缓存函数的 Hook,返回一个函数的 memoized的值; 2、如果多次传入的依赖项不变,那么多次定义的时候,返回的值是相同的,防止频繁触发更新; 3、多应用在 父组件为函…...

使用C#和OPenCV实现圆形检测
文章目录 霍夫变换使用 OpenCV 和 C# 实现圆形检测 霍夫变换 在计算机视觉中,圆形检测是一个常见且有用的任务,特别是在物体识别、图像分析和图形处理等领域。OpenCV 是一个强大的开源计算机视觉库,它提供了许多工具来实现不同的图像处理功能…...

评估一套呼叫中心大模型呼入机器人的投入回报比?
评估一套呼叫中心大模型呼入机器人的投入回报比? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 评估一套呼叫中心大模型呼入机器人的投入回报比(ROI),是一个多…...

十八、Label 和 Selector
Label 是键值对,用来标识 Kubernetes 资源(如 Pod、Node、Service 等)的属性。它们并不直接影响资源的行为,但可以帮助用户快速组织、查询和操作这些资源。标签可以用于选择、过滤和分组。 Label: 标签对 k8s 中各种资源进行分类、分组,如Pod和节点进行分组。通过添加kev…...

实现按键按下(低电平)检测到下降沿
按照流程进行编程 步骤1: 初始化函数 包括时基工作参数配置 输入通道配置 更新中断使能 使能捕获、捕获中断及计数器 HAL_TIM_IC_Init(&ic_handle) //时基参数配置 HAL_TIM_IC_ConfigChannel(&ic_handle,&ic_config,TIM_CHANNEL_2) //输…...

解析 SSM 垃圾分类系统,助力生态平衡
前 言 垃圾分类系统,传统的垃圾分类系统模式还处于线下管理阶段,管理效率极低。随着垃圾分类系统信息的不断增多,传统基于线下管理模式已经无法满足当前用户需求,随着信息化时代的到来。通过该系统的设计,管理员可以管…...

软件工程 设计的复杂性
复杂性代表事件或事物的状态,它们具有多个相互关联的链接和高度复杂的结构。在软件编程中,随着软件设计的实现,元素的数量以及它们之间的相互联系逐渐变得庞大,一下子变得难以理解。 如果不使用复杂性指标和度量,软件…...

Nginx 限制只能白名单 uri 请求的配置
实际生产项目中,大多数时候我们会将后端的 http 接口通过前置 nginx 进行反向代理,对互联网用户提供服务。往往我们后端服务所能提供的接口服务是大于互联网用户侧的实际请求的接口地址数量的(例如后端服务一共有100个api接口,经过…...

QT c++ 同时使用sqlite 和mysql数据库的问题
在项目开发中,同时使用了sqlite 和mysql数据库,分开这两部分运行功能都正常,但是一起运行,就异常,sqlite部分不能使用。 现象:出现如下提示 QSqlDatabasePrivate::addDatabase: duplicate connection nam…...

redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip
redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip 1、安装redis三主三从集群2、正常状态的redis集群3、更改redis集群服务器的ip 重启服务器 集群会down4、更改redis集群服务器的ip 重启服务器 集群down的原因5、更改redis集群服务器的ip后…...

【C++习题】19.数组中第K个大的元素
题目:数组中第K个大的元素 链接🔗:数组中第K个大的元素 题目: 代码: class Solution { public:int findKthLargest(vector<int>& nums, int k) {// 将数组中的元素先放入优先级队列中priority_queue<i…...

JIS-CTF: VulnUpload靶场渗透
JIS-CTF: VulnUpload来自 <https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 靶机IP地址192.168.23.162,攻击机IP地址192.168.23.140…...

BGP-面试
简单介绍一下BGP BGP,边界网关协议,属于路径矢量路由协议。属于触发式更新或者增量更新。具有丰富的路由策略,能够灵活的进行路由选择。重心不是在路由学习,而是路由优选、更高效的传递路由和维护大量的路由信息。基于TCP…...

Git-安装与常用命令
目录 1.Git环境配置 1.1下载 1.2配置 1.2.1基本配置 1.2.2常用指令配置别名 1.2.3获取本地仓库 git命令在git bash中演示,会用到一些Linux命令。 1.Git环境配置 1.1下载 Git下载地址:https://git-scm.com/download 傻瓜式安装就可以了。 安装…...

回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测
目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测 模型设计 基于BiLSTM-Adaboost的回归预测模型结合了双向长短期记忆神经网络(BiLSTM)和Adaboost集成学习的…...

微信小程序跳转其他小程序以及跳转网站
一、跳转其他小程序 1.1 知道appid和页面路径 wx.navigateToMiniProgram({appId: appid, // 替换为目标小程序 AppIDpath: pathWithParams, // 小程序路径envVersion: release, // 开发版、体验版或正式版success(res) {console.log("跳转到其他小程序成功!&q…...

Not using native diff for overlay2, this may cause degraded performance……
问题现象 案例:Anolis 8.9(4.19.91-26.an8.x86_64) Overlay2存储驱动程序) 当我们安装好Docker之后,通过systemctl status docker -l 会发现有一个告警信息:levelwarning msg"Not using native dif…...

【自用】管材流转项目 数据库恢复之 PIPE 表 二维码相关 各个表恢复 SQL
总览 1.后端前端和数据库 PIPE 页面的关系 2.后端批量生成二维码 jpg 图片 3.为了保证 PIPE 正常使用的调整 4.TRANSFORM(流转表) 一、后端前端和数据库 PIPE 页面的关系 1.前端 关于PIPE页面,首先,在前端,我们已经…...

【渗透测试】信息收集二
其他信息收集 在渗透测试中,历史漏洞信息收集是一项重要的工作,以下是相关介绍: 历史漏洞信息收集的重要性 提高效率:通过收集目标系统或应用程序的历史漏洞信息,可以快速定位可能存在的安全问题,避免重复…...