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

news2024/11/16 13:23:37

目录

  • 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 高速协议栈源码文件夹如下:
在这里插入图片描述

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

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

相关文章

C练习——魔术师猜三位数

题目: 有一种室内互动游戏,魔术师要每位观众心里想一个三位数abc(a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这5个数的和值。只要观众说出这个和是多少&#xf…

使用Python进行客户行为分析

客户行为分析是一个有价值的过程,它使企业能够做出数据驱动的决策,增强客户体验,并在动态市场中保持竞争力。 下面是我们可以遵循的客户行为分析任务的过程: 收集与客户互动相关的数据。它可以包括购买历史记录,网站…

C桑(Cython)从入门到入土(2): np数组操作对比

C桑(Cython)从入门到入土 2. np数组操作对比 Node sc518 Copy has image data of type unsigned long long实际上, 👆🏻这个错误是我探索Cython的缘起… code1: Form: 更现代的方法是使用内存视图而不是指针: cdef np.uint32_t[:,:,::1] …

爬虫逆向破解翻译接口参数

Python 请求baidu翻译接口:https://fanyi.baidu.com/v2transapi?fromzh&toen 步骤一: 查找构建请求参数 JS 断点发现如下参数: w {from: _.fromLang,to: _.toLang,query: e,transtype: i,simple_means_flag: 3,sign: b(e),token: windo…

【Linux】宝塔端口不通

1.问题描述:端口不通 以端口16588为例: 服务器16588端口是关闭的,防火墙规则是放通的,是由于服务器内的对应程序没有监听到 对应 的公网上 图1:端口检测 图2: 端口已放行 此时访问仍然不通,但…

Error: start of central directory not found; zipfile corrupt.

【报错】使用 unzip 指令在 AutoDL 上解压 .zip 文件时遇到 Error: start of central directory not found; zipfile corrupt. 报错: 重新上传后还是解压失败排除了 .zip 文件上传中断的问题。 【原因】Windows 和 Linux 下的压缩文件的二进制格式有所不同&#x…

Python-动态烟花【附完整源码】

烟花代码 运行效果:Python动态烟花代码 import pygame from random import randint from random import uniform from random import choice import math vector pygame.math.Vector2 # 重力变量 gravity vector(0, 0.3) # 控制窗口的大小 DISPLAY_WIDTH DISP…

【C#】当重复使用一段代码倒计时时,使用普通类和静态方法,实现简单的封装性、可扩展性、可维护性

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

啥,凭什么Python中函数的返回值可以有多个?

你好,我是安然无虞。 文章目录 函数函数定义格式函数调用默认参数和变长参数默认参数变长参数 变量的作用域 函数 编程语言中的函数,是一段可以被重复使用的代码片段,使用函数能够减少冗余的代码。 函数定义格式 def 函数名(形参列表):函数…

送水小程序开发:如何选择最适合的技术平台

选择最适合的技术平台对于开发送水小程序至关重要。在这篇文章中,我将为您介绍如何选择最适合的技术平台来开发送水小程序,以及各种技术平台的优缺点。无论您是刚刚起步的创业公司还是成熟的送水服务提供商,本文都将为您提供有关送水小程序开…

《BackTrader量化交易图解》第10章:Trade 交易操作

文章目录 10 Trade 交易操作10.1 量化回测分析流程10.2 Cerebro 类模块10.3 案例:Trade 交易10.4 实盘交易机器隐性规则10.5 Stake 交易数额和 Trade 交易执行价格 10 Trade 交易操作 10.1 量化回测分析流程 从本章开始讲解 BackTrader 的实盘操作。前面的章节讲过…

编译和链接(1)

目录 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 2.2 编译本身也分为几个阶段: 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 3.2.3 #define 替换规则 3.2.4 #和## 1. 程序的翻译环境和执…

【昕宝爸爸小模块】深入浅出之Java 8中的 Stream

深入浅出之Java 8中的 Stream 一、🟢典型解析1.1 🟠Java 8中的Stream 都能做什么1.2 🟠Stream的创建 二、✅ Stream中间操作2.1 🟠Filter2.2 🟠Map2.3 🟠limit / skip2.4 🟠sorted2.5 &#x1…

基于LVGL编写的windows串口工具: LCOM

LCOM: Serial Port Tools based on LVGL (PC Software) 一直以来我都想用LVGL做一个真正意义上的PC软件,来验证或者表达LVGL出色的特性,现在我用LCOM做到了! LCOM 是一个基于LVGL编写的串口工具,界面简洁,功能出色&a…

构建基于RHEL8系列(CentOS8,AlmaLinux8,RockyLinux8等)的Nginx1.24.0的RPM包

本文适用:rhel8系列,或同类系统(CentOS8,AlmaLinux8,RockyLinux8等) 文档形成时期:2022-2023年 因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人…

二十四、同域名下JSESSIONID重叠导致退出

同域名下JSESSIONID重叠导致退出 近期在开发项目的时候发现,如果同域名的情况下,如果把一个单页面无登录系统嵌套进入另外一个系统,那么会出现相互退出的问题。 思考解决方案 一、清除掉嵌套的系统的JSESSIONID,意思就是嵌套系统不设置JSESSIONID 1找寻出问题接口 在无痕…

DHCP与时间同步

目录 一、DHCP 1、DHCP定义 1.什么是DHCP 2.DHCP的好处 3.DHCP的分配方式 4.为什么使用DHCP 5.DHCP模式 2、DHCP的工作过程 3、DHCP动态配置主机地址 1.DHCP服务的优点 2.可分配的地址信息 3.动态分配IP地址 二、时间同步 1、ntp 2、chrony 1、搭建本地本地时间…

011集:复制文件(包括exe、 jpg、png、Word、Excel和PPT等二进制文件)—python基础入门实例

在文本文件的内部以字符形式存储数据,字符是有编码的,例如GBK (简体中文) 、UTF-8等;在二进制文件的内部以字节形式存储数据、没有编码的概念。二进制文件较为常用,例如Windows中的exe、图片 (jpg、png等),以及Word、Excel和PPT等…

多语言生成式语言模型用于零样本跨语言事件论证提取(ACL2023)

1、写作动机: 经过预训练的生成式语言模型更好地捕捉实体之间的结构和依赖关系,因为模板提供了额外的声明性信息。先前工作中模板的设计是依赖于语言的,这使得很难将其扩展到零样本跨语言转移设置。 2、主要贡献: 作者提出了一…

d2l动手学深度学习】 Lesson 13 Dropout层 老板随机丢掉一些做项目的程序员‍,项目的效果会更好!(bushi)

文章目录 1. 什么是Dropout老板随机丢掉一些做项目的程序员🧑‍💻,项目的效果会更好! 2. 代码实现(不用torch)3. 代码实现(使用torch)3. 调节实验3.1 老师上课所设置的dropout1, dro…