FPGA高端项目:纯verilog的 25G-UDP 高速协议栈,提供工程源码和技术支持

目录

  • 1、前言
    • 免责声明
  • 2、相关方案推荐
    • 我这里已有的以太网方案
    • 本协议栈的 1G-UDP版本
    • 本协议栈的 10G-UDP版本
    • 1G 千兆网 TCP-->服务器 方案
    • 1G 千兆网 TCP-->客户端 方案
    • 10G 万兆网 TCP-->服务器+客户端 方案
  • 3、该UDP协议栈性能
  • 4、详细设计方案
    • 设计架构框图
    • 网络调试助手
    • GT资源使用
    • GTY--10GBASE-R*协议使用
    • 1G/2.5G Ethernet PCS/PMA or SGMII 使用
    • 25G-PHY层
    • 25G-MAC层
    • 1G-MAC层
    • 1G-MAC数据位宽转换
    • AXI4-Stream 总线仲裁
    • AXI4-Stream FIFO
    • 25G-UDP 高速协议栈
    • IP地址修改
    • UDP数据回环
    • 总体代码架构
  • 5、工程源码 详解
  • 6、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 7、上板调试验证并演示
    • 准备工作
    • 查看ARP
    • UDP数据回环测试
  • 8、福利:工程代码的获取

FPGA高端项目:纯verilog的 25G-UDP 高速协议栈,提供工程源码和技术支持

1、前言

目前网上的fpga实现udp基本生态如下:
1:verilog编写的udp收发器,但中间的FIFO或者RAM等调用了IP,或者不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代码谁敢用?
2:带ping功能的udp收发器,代码优秀也好用,但基本不开源,不会提供源码给你,这样的代码也有不足,那就是出了问题不知道怎么排查,毕竟你没有源码,无可奈何;
3:使用了Xilinx的Tri Mode Ethernet MAC三速网IP实现,这样的代码也很优秀,但还是那个问题,没有源码,且三速网IP需要licence,三速网IP实现了rgmii到gmii再到axis的转换;
4:使用FPGA的GTX资源利用SFP光口实现UDP,通信,这种方案不需要外接网络变压器即可完成;
5:真正意义上的verilog实现的UDP协议栈,真正意义上的verilog实现意思是UDP协议栈全部代码均使用verilog代码,不适用任何IP核,包括FIFO、RAM等,这样的UDP协议栈移植性很强,这样的协议栈在市面上也很少,几乎很难得到,而很设计就是这样的协议栈,呵呵。。。

本设计使用纯verilog实现的25G-UDP 高速协议栈实现25G-UDP回环通信测试,之所以只用到了数据回环模式,是因为本设计旨在为用户提供一个可任意移植修改的25G-UDP协议栈架构,用户可通过此架构任意创建自己的项目,自由度和开放性极强;基于市面上主流和占有率较高的FPGA器件,创建了1套工程源码,FPGA器件适用于Xilinx系列FPGA,开发工具适用于Xilinx的vivado,使用的FPGAGT高速资源为GTY,板载连接光口包括SFP、QSFP;

本设计经过反复大量测试稳定可靠,可在项目中直接移植使用,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字通信领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

我这里已有的以太网方案

目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,对网络通信有需求的兄弟可以去看看:直接点击前往

本协议栈的 1G-UDP版本

本UDP协议栈支持1G、10G、25G速率,本文介绍的是10G速率的应用,之前写过一篇博客介绍本协议栈1G速率的应用,在1G模式下,基于市面上主流和占有率较高的FPGA器件,创建了11套工程源码,FPGA器件适用于Xilinx和Altera,开发工具适用于Xilinx的vivado和Altera的Quartus,网络PHY芯片支持MII、GMII、RGMII、SGMII等,对千兆网UDP网络通信有需求的兄弟可以去看看:直接点击前往

本协议栈的 10G-UDP版本

本UDP协议栈支持1G、10G、25G速率,本文介绍的是1G速率的应用,之前写过一篇博客介绍本协议栈10G速率的应用,在10G模式下,基于市面上主流和占有率较高的FPGA器件,创建了7套工程源码,FPGA器件适用于Xilinx,开发工具适用于Xilinx的vivado,高速接口资源使用到了GTH、GTY、10G Ethernet PCS/PMA(10GBASE-R/KR)等,对10G UDP网络通信有需求的兄弟可以去看看:
直接点击前往

1G 千兆网 TCP–>服务器 方案

TCP分为服务器和客户端,两者代码是不一样的,看具体需求,既然本博客介绍的是TCP客户端,那么肯定就有TCP服务器,本来TCP服务器之前一直都有,但一直没有调通,经过两年半的练习调试,总算是调通了;TCP服务器依然是4套工程源码,我另外写了一篇博客介绍TCP服务器,感兴趣的朋友可以去看看:直接点击前往

1G 千兆网 TCP–>客户端 方案

TCP分为服务器和客户端,两者代码是不一样的,看具体需求,既然本博客介绍的是TCP服务器,那么肯定就有TCP客户端,本来TCP客户端之前一直都有,但一直没有调通,经过两年半的练习调试,总算是调通了;TCP客户端依然是4套工程源码,我另外写了一篇博客介绍TCP客户端,感兴趣的朋友可以去看看:直接点击前往

10G 万兆网 TCP–>服务器+客户端 方案

我这里也有10G 万兆网 TCP 方案,该方案有服务器和客户端两套代码,在Xilinx KU和KUP等平台测试通过并很稳定,对10G 万兆网 TCP 方案感兴趣的朋友可以去看看:直接点击前往

3、该UDP协议栈性能

1:纯verilog实现,没有用到任何一个IP核;
2:移植性天花板,该协议栈可在Xilinx、Altera等各大FPGA型号之间任意移植,因为是没有任何IP,源语也有参数可选择;
3:适应性强,目前已在RTL8211、B50610、88E1518等多款phy上成功测试,也可以用GT资源的SFP接口实现10G-UDP协议的以太网通信;支持MII、GMII、RGMII、SGMII等PHY接口;
4:时序收敛很到位;
5:动态ARP功能;
6:不带ping功能;
7:用户接口数据位宽高达64bit;
8:最高支持25G速率,本设计使用25G;

4、详细设计方案

设计架构框图

详细设计方案如下框图:
在这里插入图片描述
由于我的FPGA开发板板载TI的DP83867ISRGZ网络芯片和QSFP光口,且逻辑资源很丰富,所以利用GTY+QSFP光口做 25G-UDP 高速协议栈,另外用1G/2.5G Ethernet PCS/PMA or SGMII+TI的DP83867ISRGZ做SGMII接口的1G-千兆网UDP 协议栈,相当于在一个工程里同事做了两个UDP数据通路,一个是25G-UDP,使用QSFP接口;另一个是1G-UDP,使用SGMII接口;两个UDP数据通路使用同一个25G-UDP 高速协议栈,代码里有axis_adapter.v模块负责将1G-UDP的8bit数据位宽转换到64bit数据位宽的25G-UDP数据,另外还有一个axis_switch.v模块负责1G-UDP数据和25G-UDP数据进出25G-UDP 高速协议栈的仲裁,具体的数据交互由板载的两个按键控制,具体切换逻辑如下:
默认使用 25G-UDP 进出25G-UDP 高速协议栈后做回环;
按键3按下,SGMII接口的 1G-UDP 数据将插入 QSFP接口的 25G-UDP 数据通路;
按键2按下,输入QSFP接口的25G-UDP数据–>25G-MAC–>UDP协议栈–>1G-MAC–>SGMII接口输出;简单说就是: 25G-UDP数据输入转1G-UDP输出, QSFP接收转SGMII发送;
不按按键2,输入SGMII接口的1G-UDP数据–>1G-MAC–>UDP协议栈–>25G-MAC–>QSFP接口输出;简单说就是: 1G-UDP数据输入转25G-UDP输出, SGMII接收转QSFP发送;
板子上电后默认就只有QSFP接口的25G-UDP数据参与了回环通路,SGMII接口的1G-UDP数据被无视;

网络调试助手

这只是一个回环测试工具,常用的Win软件,用来测试UDP数据收发;无需多言;

GT资源使用

本设计包含了25G-UDP和1G-UDP数据通路,默认使用25G-UDP数据进入UDP 高速协议栈进行数据回环,要使用1G-UDP数据通路则需要按键切换;两种不同速率的UDP数据通路都用到了TG高速接口资源,其中25G-UDP直接调用GTY,选择10GBASE-R*协议,该协议可用于网络数据包的编解码;1G-UDP直接调用1G/2.5G Ethernet PCS/PMA or SGMII,选择GBASE-R协议1G速率SGMII接口,该协议可用于网络数据包的编解码;具体细节会在后面章节介绍;

GTY–10GBASE-R*协议使用

25G-UDP数据通路使用该方案,GTY IP调用和配置如下:
在这里插入图片描述
IP主要的配置界面如上图,详细配置界面请参考工程;该IP输出并行数据,注意,这里输出的仅仅是解串之后的数据,并未实现数据对齐和接口转换功能,数据将交给25G-PHY层做进一步处理;IP使用GTY–10GBASE-R*协议,64/66B编解码;

1G/2.5G Ethernet PCS/PMA or SGMII 使用

1G-UDP数据通路使用该方案,1G/2.5G Ethernet PCS/PMA or SGMII IP调用和配置如下:
在这里插入图片描述
在这里插入图片描述
IP主要的配置界面如上图,详细配置界面请参考工程;使用1G速率,对应的GT参考时钟必须为125M,使用SGMII接口,需对接相应的PHY,本设计使用的PHY型号为TI 的 DP83867ISRGZ 网络芯片,也可以使用较为常见的88E1111等PHY;该IP的输入接口为SGMII,输出接口为GMII,也就是说用户接口为GMII,这就为1G-MAC的实现带来了极大地便利;

25G-PHY层

25G-UDP数据通路使用该方案,25G-PHY层由verilog代码实现,没有使用任何IP,是实现和GTY对接做数据处理和接口转换的功能模块,该模块主要实现两个功能:一是数据的处理,包括GT资源送出的数据加解扰、数据对齐、数据校验、数据帧同步、误码率监控、HDR看门狗(该功能实际并未用到);二是数据接口的转换,将PHY侧的并行数据转换为XGMII数据流;对于接收而言,就是数据解扰、数据对齐、数据校验、各种监测、PHY转XGMII,对于发送则是反过来的;25G-PHY层代码位置如下:需要注意的是,这个PHY层为10G和25G通用的,所以代码命名上延续了10G的命名规则;
在这里插入图片描述

25G-MAC层

10G-MAC层由verilog代码实现,没有使用任何IP,是实现和10G-PHY层对接做数据接口转换和数据跨时钟域转换的功能模块;该模块主要实现两个功能:一是接口转换,二是据跨时钟域转换;对于接收来说,首先将XGMII数据流转换为AXI4-Stream数据流,再对AXI4-Stream数据流做跨时钟域转换,从PHY侧时钟域转换到UDP侧时钟域,整个过程都用到CRC校验,虽然耗时增加,但数据误码率降低,如果对时延有苛刻要求,可去掉校验;发送则于接收相反;10G-MAC层代码位置如下:需要注意的是,这个MAC层为10G和25G通用的,所以代码命名上延续了10G的命名规则;
在这里插入图片描述

1G-MAC层

1G-UDP数据通路使用该方案,由于PHY层用到了1G/2.5G Ethernet PCS/PMA or SGMII,该IP直接输出GMII接口数据,所以1G-MAC层就变得非常简单了,只需要将GMII转为AXI4-Stream即可,代码位置如下:
在这里插入图片描述

1G-MAC数据位宽转换

代码里有axis_adapter.v模块负责将1G-UDP的8bit数据位宽转换到64bit数据位宽的25G-UDP数据,因为1G-UDP通路的数据要进入25G-UDP通路,数据位宽必须一致,axis_adapter.v模块由纯verilog实现,代码位置如下:
在这里插入图片描述
需要注意的是,1G-UDP通路的MAC数据才需要用到axis_adapter.v模块,1G-UDP通路的MAC数据本身就是64bit的,不需要转换;

AXI4-Stream 总线仲裁

axis_switch.v模块负责1G-UDP数据和25G-UDP数据进出25G-UDP 高速协议栈的仲裁,具体的数据交互由板载的两个按键控制,具体切换逻辑如下:
默认使用 25G-UDP 进出25G-UDP 高速协议栈后做回环;
按键3按下,SGMII接口的 1G-UDP 数据将插入 QSFP接口的 25G-UDP 数据通路;
按键2按下,输入QSFP接口的25G-UDP数据–>25G-MAC–>UDP协议栈–>1G-MAC–>SGMII接口输出;简单说就是: 25G-UDP数据输入转1G-UDP输出, QSFP接收转SGMII发送;
不按按键2,输入SGMII接口的1G-UDP数据–>1G-MAC–>UDP协议栈–>25G-MAC–>QSFP接口输出;简单说就是: 1G-UDP数据输入转25G-UDP输出, SGMII接收转QSFP发送;
板子上电后默认就只有QSFP接口的25G-UDP数据参与了回环通路,SGMII接口的1G-UDP数据被无视;
切换逻辑具体代码如下:位于fpga_core.v;
在这里插入图片描述
axis_switch.v模块代码位置如下:
在这里插入图片描述

AXI4-Stream FIFO

网络数据经过MAC层和AXI4-Stream 总线仲裁后,输出的是AXI4-Stream数据流,如果直接将数据送入25G-UDP 高速协议栈,有数据冲突的风险,为了降低这种风险,使用纯verilog实现的AXI4-Stream FIFO作为缓冲,在MAC层与UDP协议栈之间建立“桥梁”,MAC层解析出来的例如原MAC地址、目的MAC地址等信息也通过AXI4-Stream FIFO转发;AXI4-Stream FIFO代码位置如下:
在这里插入图片描述

25G-UDP 高速协议栈

25G-UDP协议栈的功能就是用verilog硬件描述语言完成标准UDP协议;它由动态ARP层、IP层、UDP层构成,动态ARP层完成ARP协议内容的数据收发,对于接收端来说是数据帧解包,从以太网数据帧中提取ARP数据段的有效数据,对于发送端来说是数据帧组包,将用户端发来的有效数据封装成ARP协议的数据帧,作为以太网数据帧的ARP数据段;代码中设置了ARP动态缓存,即arp_cache,收发两端都进行crc校验;于千兆UDP 协议栈不同的是,25G-UDP 高速协议栈的用户接口数据位宽为64bit;

IP层完成IP协议内容的数据收发,对于接收端来说是数据帧解包,从以太网数据帧中提取IP数据段的有效数据,对于发送端来说是数据帧组包,将用户端发来的有效数据封装成IP协议的数据帧,作为以太网数据帧的IP数据段;IP层与动态ARP层是数据交互的,模块相互包含,代码架构无法明显划分;

UDP层完成UDP协议内容的数据收发,对于接收端来说是数据帧解包,从以太网数据帧中提取UDP数据段的有效数据,对于发送端来说是数据帧组包,将用户端发来的有效数据封装成UDP协议的数据帧,作为以太网数据帧的UDP数据段;IP层与动态ARP层是数据交互的,模块相互包含,代码架构无法明显划分;UDP层会对UDP数据做前后检验;

UDP协议栈架构封装后代码位置如下:需要注意的是,这个UDP 高速协议栈为10G和25G通用的,所以代码命名上延续了10G的命名规则;
在这里插入图片描述
UDP协议栈是直接与用户逻辑数据对接的接口,所以对于FPGAS开发者而言,只要知道了UDP协议栈的数据接口,就能在用户侧编写与之对接的时序来控制数据收发,UDP协议栈的接口时序为AXI4-Stream,时序如下:

   发送端时序如下:__    __    __    __    __    __    __clk                      __/  \__/  \__/  \__/  \__/  \__/  \__/  \________________                    ___________s_eth_hdr_valid                         \_________________/_____ s_eth_hdr_ready           ________/     \__________________________________s_eth_dest_mac            XXXXXXXXX_DMAC_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_____s_eth_dest_mac            XXXXXXXXX_SMAC_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX___________ _____ _____s_eth_payload_axis_tdata  XXXXXXXXX_A0________X_A1__X_A2__XXXXXXXXXXXX_______________________s_eth_payload_axis_tvalid ________/                       \____________________________s_eth_payload_axis_tready ______________/                 \________________s_eth_payload_axis_tlast  __________________________/     \___________s_eth_payload_axis_tuser  ____________________________________________接收端时序与发送端一样;

IP地址修改

FPGA与PC通信而言,FPGA作为UDP服务器,PC作为UDP客户端,需要在FPGA代码里设置MAC、IP等配置信息,这是UDP通信的重要信息,开发者至少需要知道该部分代码的位置,甚至根据自己的需要修改,代码的位置如下:
在这里插入图片描述
可以看到,我这里的配置如下:
FPGA开发板MAC地址:02-00-00-00-00-00;
FPGA开发板IP地址:192.168.1.128;
FPGA开发板网关:192.168.1.1;
FPGA开发板子网掩码:255.255.255.0;
那么PC端的IP地址应该设为多少呢?
因为在回环代码里写成了发送的目的IP=接收到的目的IP,所以只需要在PC端设置与192.168.1.128网段一样的IP地址即可,比如我在测试时设置PC端IP地址为:192.168.1.10;如下:
在这里插入图片描述
当然,你也可以配置为192.168.1.11、192.168.1.12、192.168.1.100等等;
默认的FPGA开发板和PC端的端口号都是1234;代码的位置如下:
在这里插入图片描述
这部分代码位于fpga_core.v;

UDP数据回环

之所以只用到了数据回环模式,是因为本设计旨在为用户提供一个可任意一直修改的UDP协议栈架构,用户可通过此架构任意创建自己的项目,自由度和开放性极强;使用一个纯verilog实现的AXI4-Stream FIFO来做数据回环操作,因为UDP协议栈的用户数据接口正是AXI4-Stream数据流,代码的位置如下:
在这里插入图片描述
代码里直接用assign语句将AXI4-Stream FIFO的收发两端连接,如下:
在这里插入图片描述
AXI4-Stream FIFO配置为了8192,如果你的FPGA逻辑资源较小,配置为1024就可以了;
这部分代码位于fpga_core.v;

总体代码架构

工程代码架构如下:
在这里插入图片描述

5、工程源码 详解

开发板FPGA型号:Xilinx Virtex UltraScale+ XCVU9P–xcvu9p-flga2104-2L-e;
开发环境:Vivado 2022.2;
GT资源:GTY;
输入\输出:QSFP光口和SGMII接口的PHY;
测试项:数据回环收发;
工程代码架构参考第4章节的“总体代码架构”小节;
FPGA资源消耗和功耗预估如下;
在这里插入图片描述

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、上板调试验证并演示

准备工作

需要准备以下物品:
1:FPGA开发板;
2:光纤;
3:支持25G的网卡一张;
4:上位机电脑,台式或笔记本;
5:网络调试助手;
连接如下,然后上电下载bit:
在这里插入图片描述
首先设置电脑端IP如下:
在这里插入图片描述
开发板的IP地址在代码中的设置如下,在fpga_core.v里,可以自由修改:
在这里插入图片描述

查看ARP

打开cmd,输入 arp -a查看电脑的arp缓存表,如下:
在这里插入图片描述

UDP数据回环测试

打开网络调试助手并配置,如下:
在这里插入图片描述
单次发送数据测试结果如下:
在这里插入图片描述
循环发送数据测试结果如下,1秒时间间隔循环:
在这里插入图片描述

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

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
25G-UDP 高速协议栈源码文件夹如下:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传感数据分析——小波滤波

传感数据分析——小波滤波 文章目录 传感数据分析——小波滤波前言一、运行环境二、Python实现总结 前言 小波滤波算法是一种基于小波变换的滤波方法,其核心思想是将信号分解成不同的频率成分,然后对每个频率成分进行独立的处理。小波滤波器的设计和应用…

第12课 实现桌面与摄像头叠加

在上一节,我们实现了桌面捕获功能,并成功把桌面图像和麦克风声音发送给对方。在实际应用中,有时候会需要把桌面与摄像头图像叠加在一起发送,这节课我们就来看下如何实现这一功能。 1.备份与修改 备份demo11并修改demo11为demo12…

安达发|基于APS排程系统的PDM功能

APS系统(Advanced Planning and Scheduling,先进计划与排程)是一种基于APS系统(Advanced Planning and Scheduling,先进计划与排程)是一种基于供应链管理和生产管理的综合性软件系统。它通过整合企业内外部…

在anaconda中安装pytorch的GPU版本

本文前提: 1.你已经下载好了anaconda,最好是新建一个虚拟环境来安装pytorch的GPU版本,并且设置了国内镜像源; 2.了解自己电脑对应的cuda版本,可通过nvidia-smi,并下载好了cuda。 安装pytorch的GPU版本 到官网中https…

微信公众号-订阅通知

第一步: 公众号需要实名认证,完成以后! 设置-开发里找到基本配置: 开发者ID(AppID):xxxxxxxxxxxxxxxxxxxxxxxxx 开发者密码(AppSecret):xxxxxxxxxxxxxxxxxxxxxxxxx 白名单IP也要填写上你的服务器IP哦! 第二步&am…

聊天Demo

文章目录 参考链接使用前端界面消息窗口平滑滚动至底部vue使用watch监听vuex中的变量变化 参考链接 vue.js实现带表情评论功能前后端实现(仿B站评论) vue.js实现带表情评论仿bilibili(滚动加载效果) vue.js支持表情输入 vue.js表…

使用Scrapy框架和代理IP进行大规模数据爬取

目录 一、前言 二、Scrapy框架简介 三、代理IP介绍 四、使用Scrapy框架进行数据爬取 1. 创建Scrapy项目 2. 创建爬虫 3. 编写爬虫代码 4. 运行爬虫 五、使用代理IP进行数据爬取 1. 安装依赖库 2. 配置代理IP和User-Agent 3. 修改爬虫代码 4. 运行爬虫 六、总结 一…

【AI视野·今日Sound 声学论文速览 第四十二期】Fri, 5 Jan 2024

AI视野今日CS.Sound 声学论文速览 Fri, 5 Jan 2024 Totally 10 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers PosCUDA: Position based Convolution for Unlearnable Audio Datasets Authors Vignesh Gokul, Shlomo Dubnov深度学习模型需要大量干净的…

【算法Hot100系列】合并两个有序链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

前端nginx配置指南

前端项目发布后,有些接口需要在服务器配置反向代理,资源配置gzip压缩,配置跨域允许访问等 配置文件模块概览 配置示例 反向代理 反向代理是Nginx的核心功能之一,是指客户端发送请求到代理服务器,代理服务器再将请求…

数据结构-怀化学院期末题(321)

图的广度优先搜索 题目描述: 图的广度优先搜索类似于树的按层次遍历,即从某个结点开始,先访问该结点,然后访问该结点的所有邻接点,再依次访问各邻接点的邻接点。如此进行下去,直到所有的结点都访问为止。在…

OpenHarmony沙箱文件

一.前言 1.前景提要 DevEcoStudio版本:DevEco Studio 3.1 Release SDK版本:3.2.2.5 API版本:9 2.概念 在openharmony文件管理模块中,按文件所有者分类分为应用文件和用户文件和系统文件。 1)沙箱文件。也叫做应…

Jmeter扩展函数?年薪50W+的测试大佬教你怎么玩

很多同学,都问我:“老师,我的 jmeter 里面,怎么没有 MD5 函数,base64 函数也没有,我是不是用了假的 jmeter?” 哈哈哈,不是的。jmeter 的函数,有自带函数和扩展函数两大…

等价类划分法

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢软件测试面试题分享: 1000道软件测试面试题及答案📢软件测试实战项目分享: 纯接口项目-完…

<HarmonyOS第一课>1~10课后习题汇总

HarmonyOS第一课 <HarmonyOS主题课>1~3课后习题汇总 1运行Hello World 判断题 main_pages.json存放页面page路径配置信息。(正确)DevEco Studio是开发HarmonyOS应用的一站式集成开发环境。(正确) 单选题…

二叉树-遍历-单独精讲

遍历:遍历每个元素。 寻常遍历root只会指一次。 而二叉树遍历每个元素则会指三次。 中序遍历-节点的中序 void traveres(TreeNode* root){if(!root)return;traveres(root->left);cout << root->val << endl;traveres(root->right);}中序遍历亦叫节点的中…

Python 自学(六) 之函数

目录 1. python函数的基本结构 P168 2. python函数的可变参数(不定长) *parameter P169 3. python函数的返回值(单个或多个) P173 4. python的匿名函数 lambda P177 1. python函数的基本结构 P168 2. python函数的可变参数(不定…

一文读懂「Attention」注意力机制

前言:Self-Attention是 Transformer 的重点,因此需要详细了解一下 Self-Attention 的内部逻辑。 一、什么是注意力机制? Attention(注意力)机制如果浅层的理解,核心逻辑就是「从关注全部到关注重点」。 Attention 机制很像人类看图片的逻辑,当我们看一张图片的时候,我…

服务器操作系统介绍

1、基本概念 OS ( operating system&#xff0c;操作系统)是管理计算机硬件与软件资源的计算机程序&#xff0c;同时也是计算机系统的内核与基石。 操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作…

SD-WAN是如何工作的?

SD-WAN软件定义的广域网&#xff0c;其目的是帮助企业组建更为灵活和高效的网络框架。它与传统的广域网相比&#xff0c;具备更快的网络加速能力&#xff0c;更强的安全性和更便捷的使用方式。因此&#xff0c;随着企业在数字化转型的过程中&#xff0c;企业组网需求的不断提升…