FPGA UDP协议栈:基于88E1111,支持RGMII、GMII、SGMII三种模式,提供3套工程源码和技术支持

目录

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

FPGA UDP协议栈:基于88E1111,支持RGMII、GMII、SGMII三种模式,提供3套工程源码和技术支持

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协议栈移植性很强,这样的协议栈在市面上也很少,几乎很难得到,而很设计就是这样的协议栈,呵呵。。。

本设计基于88E1111使用纯verilog实现的1G-UDP 协议栈实现1G-UDP回环通信测试,之所以只用到了数据回环模式,是因为本设计旨在为用户提供一个可任意移植修改的1G-UDP协议栈架构,用户可通过此架构任意创建自己的项目,自由度和开放性极强;基于市面上88E1111占有率较高,且该PHY支持RGMII、GMII、SGMII三种模式,适应性极强的特点,本博创建了3套vivado2022.2版本的工程源码,分别如下:
在这里插入图片描述
本设计经过反复大量测试稳定可靠,可在项目中直接移植使用,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字通信领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

我这里已有的以太网方案

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

本协议栈的 1G-UDP版本

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

本协议栈的 10G-UDP版本

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

本协议栈的 25G-UDP版本

本UDP协议栈支持1G、10G、25G速率,本文介绍的是1G速率在88E1111上的应用,之前写过一篇博客介绍本协议栈25G速率的应用,在25G模式下,基于市面上主流和占有率较高的FPGA器件,创建了1套工程源码,FPGA器件适用于Xilinx,开发工具适用于Xilinx的vivado,高速接口资源使用到了GTY,对25G 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速率,本设计使用1G;

4、详细设计方案

设计架构框图

详细设计方案如下框图:
在这里插入图片描述
FPGA板卡板载88E1111,该PHY支持RGMII、GMII、SGMII三种模式,我的板子可通过跳线帽选择使用哪一种模式,共移植了3套vivado2022.2版本的工程源码,数据通路分别如下:

工程1–GRMII数据流:
PC端网络调试助手发送数据给88E1111,输出RGMII接口的数据给IDELAYE源语模块对接收数据进行延时处理,然后数据给到MAC层,经过IDDR模块将双时钟沿数据解为单时钟沿数据,再把单时钟沿数据转为AXI4-Stream数据流,再经过AXI4-Stream FIFO 缓冲,数据送入UDP协议栈做以太网数据解包,解包后的数据直接回环给UDP协议栈的发送接口进行以太网封装,再经过AXI4-Stream FIFO 缓冲,数据进入MAC层后,首先将AXI4-Stream数据流转换为GMII流,再经过ODDR模块将单时钟沿数据转换为双时钟沿数据,此时数据已经是RGMII流,再把数据送到88E1111后发送给PC端网络调试助手,此时网络调试助手收到了和刚刚发出去的一模一样的数据;

工程2–RMII数据流:
PC端网络调试助手发送数据给88E1111,输出GMII接口的数据给到MAC层,把GMII沿数据转为AXI4-Stream数据流,再经过AXI4-Stream FIFO 缓冲,数据送入UDP协议栈做以太网数据解包,解包后的数据直接回环给UDP协议栈的发送接口进行以太网封装,再经过AXI4-Stream FIFO 缓冲,数据进入MAC层后,将AXI4-Stream数据流转换为GMII流,再把数据送到88E1111后发送给PC端网络调试助手,此时网络调试助手收到了和刚刚发出去的一模一样的数据;

工程3–SGMII数据流:
PC端网络调试助手发送数据给88E1111,输出SGMII接口的数据给到1G/2.5G Ethernet PCS/PMA or SGMII IP核,该IP直接将输入的SGMII数据转换为GMII数据,然后GMII数据送入MAC层,把GMII沿数据转为AXI4-Stream数据流,再经过AXI4-Stream FIFO 缓冲,数据送入UDP协议栈做以太网数据解包,解包后的数据直接回环给UDP协议栈的发送接口进行以太网封装,再经过AXI4-Stream FIFO 缓冲,数据进入MAC层后,将AXI4-Stream数据流转换为GMII流,再把数据送到1G/2.5G Ethernet PCS/PMA or SGMII IP核输出SGMII数据,再把数据送入
88E1111后发送给PC端网络调试助手,此时网络调试助手收到了和刚刚发出去的一模一样的数据;

网络调试助手

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

网络PHY

FPGA板卡板载88E1111,该PHY支持RGMII、GMII、SGMII三种模式,我的板子可通过跳线帽选择使用哪一种模式;

IDELAYE源语

这是工程1-RGMII接口特有的功能模块,目的是为接收的PHY数据进行延时和对齐,采用了 IDELAYE源语,该源语在不同的FPGA器件上略有差异,本设计中的A7、K7、Zynq用的是IDELAYE2;IDELAYE2源语需要与IDELAYCTRL一起搭配使用,需要参考时钟200M;代码部分如下:例化位置在fpga.v;
在这里插入图片描述

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

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

MAC层

MAC层由verilog代码实现,没有使用任何IP,但是用到了相关源语,Xilinx系列FPGA为IDDR、ODDR;Altera系列FPGA为 altddio_in、altddio_out;MAC层实现的功能有两个,一是对PHY侧的数据进行处理,接收端为双时钟沿数据解为单时钟沿数据并对齐,发送则相反,这个功能是三套工程都有的;二是实现PHY侧和用户侧的数据格式转换并进行CRC8校验,接收端为将PHY侧的并行数据转换为用户侧的AXI4-Stream数据流,发送则相反,这个功能是工程1特有的;代码位置如下:
在这里插入图片描述

AXI4-Stream FIFO

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

UDP协议栈

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

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

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

UDP协议栈架构封装后代码位置如下:
在这里插入图片描述
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、工程源码-1-RGMII版本 详解

开发板FPGA型号:Xilinx Kintex 7 XC7K325–xc7k325tffg900-2;
开发环境:Vivado 2022.2;
网络PHY:88E1111,RGMII接口,千兆网;
输入\输出:UDP 网络通信;
测试项:数据回环收发;
工程代码架构如下:
在这里插入图片描述
FPGA资源消耗和功耗预估如下;
在这里插入图片描述

6、工程源码-2-GMII版本 详解

开发板FPGA型号:Xilinx Kintex 7 XC7K325–xc7k325tffg900-2;
开发环境:Vivado 2022.2;
网络PHY:88E1111,GMII接口,千兆网;
输入\输出:UDP 网络通信;
测试项:数据回环收发;
工程代码架构如下:
在这里插入图片描述
FPGA资源消耗和功耗预估如下;
在这里插入图片描述

7、工程源码-3-SGMII版本 详解

开发板FPGA型号:Xilinx Kintex 7 XC7K325–xc7k325tffg900-2;
开发环境:Vivado 2022.2;
网络PHY:88E1111,SGMII接口,千兆网;
输入\输出:UDP 网络通信;
测试项:数据回环收发;
工程代码架构如下:
在这里插入图片描述
FPGA资源消耗和功耗预估如下;
在这里插入图片描述

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

准备工作

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

查看ARP

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

UDP数据回环测试

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

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

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

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

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

相关文章

CentOS 7 安装私有平台OpenNebula

目录 一、配置yum源 二、配置数据库MySQL 2.1 安装MySQL 2.2 修改MySQL密码 2.3 创建项目用户和库 三、安装配置前端包 四、设置oneadmin账号密码 五、验证安装 5.1 命令行验证安装 5.2 数据存放位置 5.3 端口介绍 5.4 命令介绍 六、访问 6.1 设置语言 6.2 创建主…

ARCGIS PRO SDK 使用条件管理 Pro UI

ARCGIS PRO UI简单介绍以下&#xff1a; 第一步&#xff1a;在Config.daml中在</AddInfo>标签下加上条件<conditions>标签&#xff08;必须添加的&#xff09; <conditions><!-- 定义条件 &#xff0c;此处定义了两个--Tab 另一个为 group><insert…

网络安全复习--简答整理

-----------------------------------------------------教材如上图------------------------------------------------------------ 1.对称加密和非对称加密各有什么特点&#xff1f;加密解密过程中有什么区别&#xff1f;优点P38【考】 对称加密的特点&#xff1a;在针对同一…

oracle 19c容器数据库数据加载和传输-----SQL*Loader(一)

目录 数据加载 &#xff08;一&#xff09;控制文件加载 1.创建用户执行sqlldr 2.创建文本文件和控制文件 3.查看表数据 4.查看log文件 &#xff08;二&#xff09;快捷方式加载 1.system用户执行 2.查看表数据 3.查看log文件 外部表 数据加载和传输的工具&#xff1…

Hyperledger Fabric 生成组织身份解析

fabric 版本 2.4.1 Fabric 网络通过证书和密钥来管理和认证成员身份&#xff0c;经常需要生成证书文件。通常这些操作可以使用 PKI 服务&#xff08;如 Fabric-CA&#xff09;或者 OpenSSL 工具来实现&#xff08;针对单个证书的签发&#xff09;。为了方便批量管理组织证书&am…

Hyperledger Fabric Docker 方式多机部署生产网络

规划网络拓扑 3 个 orderer 节点&#xff1b;组织 org1 , org1 下有两个 peer 节点&#xff0c; peer0 和 peer1; 组织 org2 , org2 下有两个 peer 节点&#xff0c; peer0 和 peer1; 因为我只有 3 台虚拟机资源所以没法实现完全的多机部署&#xff0c;资源使用规划如下&#…

Mac电脑系统提速软件CleanmyMac X2024

Mac是现代人日常工作时必不可少的工具&#xff0c;尤其是在居家办公已经屡见不鲜的当下。视频会议、文档传送、视频剪辑等等。它在工作中扮演的角色越来越重要&#xff0c;所以也导致了它的流畅程度可以在很大程度上影响人们一整天的工作效率和心情。 CleanMyMac X全新版下载如…

后端程序员开发win小工具(未完待续)

github&#xff1a;https://gitee.com/forgot940629/win-tool-demo 本地启动&#xff0c;查看http://127.0.0.1:8080/form 场景 在日常工作中可能需要后端开发者开发一些辅助工具。这些辅助工具通常希望能想其他软件一样在桌面系统运行&#xff0c;并且有一些桌面应用的基本…

Spring MVC(day1)

什么是MVC MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#xff1a;专门存储业务数据…

geemap学习笔记043:开始Earth Engine Python脚本

前言 前段时间是针对geemap中的Tutorials和geemap book进行了系统学习&#xff0c;针对其中所涉及到的geemap例子进行了详细的记录和备注&#xff0c;虽然感觉已经是入门了不少&#xff0c;例如earth engine无非就是涉及到Image、ImageCollection、Geometry、Feature、Feature…

江科大-stm32-B站系统初识笔记P2

文章目录 一&#xff1a;ARM是什么二&#xff1a;关键字介绍 推荐视频&#xff1a;《 STM32入门教程-2023版 细致讲解 中文字幕》 一&#xff1a;ARM是什么 ①&#xff1a; ST – 意法半导体 M – Microelectronics 微电子 32 – 总线宽度 ARM架构: Cortex-A:Application 应用…

Vue.js设计与实现阅读2

Vue.js设计与实现阅读-2 1、前言2、框架设计的核心要素2、1 提升用户体验2、2 控制代码体积2、3 Tree-Shaking2、4 特性开关2、5 错误处理 1、前言 上一篇我们了解到了 命令式和声明式的区别&#xff0c;前者关注过程&#xff0c;后者关注结果了解了虚拟dom存在的意义&#x…

AI ppt生成器 Tome

介绍 一款 AI 驱动的 PPT/幻灯片内容辅助生成工具。只需要输入一个标题或者一段特定的描述&#xff0c;AI 便会自动生成一套包括标题、大纲、内容、配图的完整 PPT。 Tome平台只需要用户输入一句话&#xff0c;就可以自动生成完整的PPT&#xff0c;包括文字和图片。功能非常强…

1688商品详情数据API接口(item_get-获得1688商品详情)搜索商品列表接口

1688是一个大型的B2B&#xff08;Business-to-Business&#xff09;批发平台&#xff0c;提供各种商品和服务的采购。如果你想要通过API接口从1688获取商品详情&#xff0c;通常你需要查看1688的开发者文档或联系他们的API支持团队了解具体的API接口信息和调用方法。 一般来说…

基于jsp的在线求职招聘信息系统 设计与实现

当前企业求职招聘的方式更多是通过传统的线下招聘会或职业介绍所来实现的&#xff0c;其不但受众具有很大的局限性&#xff0c;而且往往不可能在短时间内招聘的需要的人才。而互联网的普及为企业求职招聘的方式带来了翻天覆地的改变。通过互联网将招聘信息进行发布可以在短时间…

详解Oracle数据库的启动

Oracle数据库的启动&#xff0c;其概念可参考Overview of Instance and Database Startup。 其过程可参见下图&#xff1a; 当数据库从关闭状态进入打开数据库状态时&#xff0c;它会经历以下阶段。 阶段Mount状态描述1实例在没有挂载数据库的情况下启动实例已启动&#xff…

锂电池低温充电效率低、容量低的原因

前言&#xff1a;锂离子电池在充电时&#xff0c;Li从正极脱嵌并嵌入负极&#xff1b;但是当一些异常情况&#xff1a;如负极嵌锂空间不足、Li嵌入负极阻力太大、Li过快的从正极脱嵌但无法等量的嵌入负极等异常发生时&#xff0c;无法嵌入负极的Li只能在负极表面得电子&#xf…

仿宋-GB2312字体

一、下载仿宋_GB2312.zip压缩包并解压缩 二、双击打开字体文件&#xff0c;点击左上角安装按钮 三、安装完成 安装完成后&#xff0c;重新打开Word正常情况下字体就有了。如果此时在Word文档内还没出现这个字体的话&#xff0c;大家可以重启电脑再查看一下

Hyperledger Fabric 架构概览

fabric 版本 v2.4.1 超级账本 Fabric 自诞生以来已经发布了两个主要版本&#xff1a;1.0 系列版本&#xff08;2017 年 7 月&#xff09;和 2.0 系列版本&#xff08;2020 年 1 月&#xff09;。2016 年 9 月&#xff0c;Fabric 发布了 v0.6.0 预览版本&#xff0c;通过这一版本…

【uniapp】调用阿里云OCR图片识别文字:

文章目录 一、效果&#xff1a;二、实现&#xff1a; 一、效果&#xff1a; 二、实现&#xff1a; 【阿里官方】高精版OCR文字识别【最新版】-云市场-阿里云 <template><view class"container"><!-- 选择图片 --><button click"imageO…