紫光同创FPGA实现AD9238数据采集转UDP网络传输,分享PDS工程源码和技术支持和QT上位机
目录
- 1、前言
- 工程概述
- 免责声明
- 2、相关方案推荐
- 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
- 紫光同创FPGA相关方案推荐
- 我这里已有的以太网方案
- 本方案在Xilinx系列FPGA的应用方案
- 3、设计思路框架
- 工程设计原理框图
- AD输入源
- AD9238数据采集
- AD9238数据缓存控制模块
- AD数据缓存架构
- QT上位机与FPGA数据交互逻辑
- FPGA 命令应答模块
- FPGA AD数据应答模块
- UDP协议栈
- MAC层发送
- MAC发送仲裁
- ARP发送
- IP层发送
- IP发送仲裁
- UDP发送
- MAC层接收
- ARP接收
- IP层接收
- UDP接收
- RGMII互转GMII模块
- PHY芯片
- IP地址、端口号的修改
- QT上位机
- 工程源码架构
- 4、PDS工程源码1详解
- 5、上板调试验证并演示
- 紫光同创FPGA实现AD9238数据采集转UDP网络传输效果演示
- 6、工程源码
紫光同创FPGA实现AD9238数据采集转UDP网络传输,分享PDS工程源码和技术支持和QT上位机
1、前言
国产FPGA现状:
“苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于先进制程半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,懂先生站在高略高度和长远角度谋划,宁愿背当代一世之骂名也要为祖国千秋万世谋,2018年7月,懂先生正式打响毛衣战,随后又使出恰勃纸战术,旨在为祖国先进制程半导体领域做出自主可控的战略推动;2019年初我刚出道时,还是Xilinx遥遥领先的时代(现在貌似也是),那时的国产FPGA还处于黑铁段位;然而才短短7年,如今的国产FPGA属于百家争鸣、百花齐放、八仙过海、神仙打架、方兴未艾、得陇望蜀、友商都是XX的喜极而泣之局面,此情此景,不得不吟唱老人家的诗句:魏武挥鞭,东临碣石有遗篇,萧瑟秋风今又是,换了人间。。。
目前对于国产FPGA优势有以下几点:
1:性价比高,与同级别国外大厂芯片相比,价格相差几倍甚至十几倍;
2:自主可控,国产FPGA拥有完整自主知识产权的产业链,从芯片到相关EDA工具;
3:响应迅速,FAE技术支持比较到位,及时解决开发过程中遇到的问题,毕竟中文数据手册;
4:采购方便,产业链自主可控,采购便捷;
FPGA实现UDP网络通信现状:
FPGA实现UDP网络通信主要有两种方案,其一是使用PHY芯片实现物理层功能,比如常见的RTL8211、B50610等芯片,UDP协议栈部分很简单,可使用verilog代码直接实现;其二是使用Xilinx系列的IP核实现物理层功能,比如常见的1G/2.5G Ethernet PCS/PMA or SGMII、AXI 1G/2.5G Ethernet Subsystem、10G/25G Ethernet Subsystem、10G Ethernet Subsystem等,UDP协议栈部分很简单,可使用verilog代码直接实现;本设计使用PHY芯片方案实现物理层功能;
工程概述
本文使用紫光同创PG2L100H系列FPGA实现AD9238数据采集转UDP网络传输;输入源为示波器输出的AD正弦波,并通过线缆连接至AD9238模块实现AD转换;FPGA首先采集AD9238传来的AD数据;然后将AD9238数据送入AD数据缓存控制模块,产生AD缓存的控制信号;然后AD数据送入纯verilog实现的数据缓存模块,将AD数据融入板载DDR3中缓存;然后AD数据从DDR3中读出后,送入AD数据组包模块,将AD数据按照QT上位机接收要求进行组包;然后送入纯verilog实现的UDP协议栈,实现AD数据的以太网封装;然后以太网数据送入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换;然后数据进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;最后电脑端QT上位机接收AD数据并显示波形;针对市场主流需求,本设计提供1套PDS工程源码,具体如下:
现对上述1套工程源码做如下解释,方便读者理解:
工程源码1
开发板FPGA型号为PG2L100H-6EBG676;输入源为示波器输出的AD正弦波,并通过线缆连接至AD9238模块实现AD转换;FPGA首先采集AD9238传来的AD数据;然后将采集的AD9238数据送入AD数据缓存控制模块,产生AD缓存的控制信号;然后AD数据送入纯verilog实现的数据缓存模块,将AD数据融入板载DDR3中缓存;然后AD数据从DDR3中读出后,送入AD数据组包模块,将AD数据按照QT上位机接收要求进行组包;QT上位机首先向FPGA开发板发送板卡信息查询指令,该指令以自定义UDP数据包形式发送,FPGA收到查询指令后,将自己的IP地址、MAC地址等信息打包成自定义的UDP包回复给QT上位机,至此,QT上位机与FPGA开发板建立了连接;然后QT上位机以100ms的频率向FPGA开发板发送请求AD数据指令,该指令以自定义UDP数据包形式发送,FPGA收到查询指令后,将缓存的AD数据从DDR3中读取,并打包成自定义的UDP包回复给QT上位机;然后数据进入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换,需要使用紫光的GTP_OSERDES_E2源语;然后数据进入板载KSZ9031RNX PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端,KSZ9031RNX 工作于RGMII接口,延时模式;最后电脑端QT上位机接收AD数据并显示波形;该工程适用于紫光同创FPGA实现AD9238数据采集转UDP网络传输应用;
本博客描述了紫光同创FPGA实现AD9238数据采集转UDP网络传输的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
2、相关方案推荐
我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往
紫光同创FPGA相关方案推荐
鉴于国产FPGA的优异表现和市场需求,我专门开设了一个人紫光同创FPGA专栏,里面收录了基于紫光同创FPGA的图像处理、UDP网络通信、GT高速接口、PCIE等博客,感兴趣的可以去看看,博客地址:点击直接前往
我这里已有的以太网方案
目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,还有RDMA的NIC 10G 25G 100G网卡工程源码,对网络通信有需求的兄弟可以去看看:
直接点击前往
其中千兆TCP协议的工程博客如下:
直接点击前往
本方案在Xilinx系列FPGA的应用方案
本方案在Xilinx系列FPGA上也有部署和应用,有这方面需求的用户可以参考本博之前的博客,博客链接如下:
点击直接前往
3、设计思路框架
工程设计原理框图
工程设计原理框图如下:
AD输入源
本设计使用示波器为AD输入源,示波器配置为AD正弦波,当然,你也可以使用其他ADC输入源;示波器通过BNC线缆连接至AD7606模块;
AD9238数据采集
AD9238芯片是由ADI公司推出的12位采样精度、最大采样率65MSPS的ADC芯片,模数转换后输出时序如下:
所以对于FPGA来说,其实是省去了配置AD9238和采集AD9238的环节,因为只要硬件设计完成,FPGA给AD9238一个参考时钟,AD9238就会连续的将ADC数据送入FPGA;
AD9238数据缓存控制模块
将采集到的AD9238数据送入AD数据缓存控制模块,产生AD缓存的控制信号;当AD数据采集到以后,经过此模块发起数据写入DDR3的控制信号,模块代码架构如下:
AD数据缓存架构
AD数据缓存架构实现的功能是将采集的AD数据缓存到板载DDR3中再读出送后续模块,目的是实现AD数据的随时读取,实现输入AD数据到输出AD数据的跨时钟域问题,更好的呈现显示效果;由于调用了紫光官方的HMIC_S IP核作为DDR控制器,所以AD数据缓存架构就是实现用户数据到HMIC_S的桥接作用;架构如下:
AD数据缓存架构由AD数据缓存帧更新模块+写AD数据控制逻辑+读AD数据控制逻辑+AXI4-FULL-Master总线模块组成;AXI4-FULL-Master总线模块实际上就是一个AXI4-FULL总线主设备,与HMIC_S IP核对接,HMIC_S IP核配置为AXI4-FULL接口;写AD数据控制逻辑、读AD数据控制逻辑实际上就是一个AD数据读写状态机,以写AD数据为例,假设一帧AD数据的大小为M,写AD数据控制逻辑每次写入一次突发传输的AD数据数据,记作Y,即每次向DDR3中写入Y个AD数据,写M÷Y次即可完成1帧AD数据的缓存,读AD数据与之一样;同时调用两个FIFO实现输入输出AD数据的跨时钟域处理,使得用户可以忽略AXI4内部代码,以简单地像使用FIFO那样操作AXI4总线,从而达到读写DDR的目的,进而实现AD数据缓存;AD数据缓存模块代码架构如下:
!!!注意
本设计使用的DDR3控制器IP版本为ips2l_hmic_s_v1_3,安装包以放在资料中,请用户自行安装,安装包目录如下:
QT上位机与FPGA数据交互逻辑
QT上位机与FPGA数据交互逻辑框图如下:
第一步:
QT上位机首先向FPGA开发板发送板卡信息查询指令,该指令以自定义UDP数据包形式发送,板卡信息查询指令的UDP数据包格式如下:
第二步:
FPGA收到查询指令后,将自己的IP地址、MAC地址等信息打包成自定义的UDP包回复给QT上位机,回复给QT上位机查询指令的UDP数据包格式如下:
至此,QT上位机与FPGA开发板建立了连接;
第三步:
然后QT上位机以100ms的频率向FPGA开发板发送请求AD数据指令,该指令以自定义UDP数据包形式发送,请求AD数据指令的UDP数据包格式如下:
第四步:
FPGA收到查询指令后,将缓存的AD数据从DDR3中读取,并打包成自定义的UDP包回复给QT上位机;回复AD数据的UDP数据包格式如下:
每个UDP包都包含有Header,在第一个字节,用于标志是板卡信息查询回复还是AD数据回复,其格式如下:
FPGA 命令应答模块
基于前面《QT上位机与FPGA数据交互逻辑》章节的描述,FPGA 命令应答模块就是实现第1步和第2步的功能,模块代码架构如下:
模块组建回复板卡信息数据包核心部分如下:
!!!注意
!!!注意
上位机设置的缓存空间为1M字节,请求数据间隔为100ms,因此在设置采样深度时要考虑到这两点,根据AD7606特性,在顶层模块中缓存空间设置为 32’h00008000,即 32K 字节,采样频率缓存空间为 200KHz,ADC采样端数据为2个字节长度,因此采样长度为采样字节除以2,即 32’h00004000,计算需要82ms可采集完成,如下:
FPGA AD数据应答模块
基于前面《QT上位机与FPGA数据交互逻辑》章节的描述,FPGA 命令应答模块就是实现第3步和第4步的功能,模块代码架构如下:
模块组建回复AD数据包核心部分如下:
UDP协议栈
UDP协议栈是以太网的协议层,由纯verilog代码实现,具有动态ARP、ICMP功能,占用逻辑资源少,性能不错,设计精简等特点,代码有详细中文注释,UDP协议栈设计架构如下:
UDP协议栈代码架构如下:
MAC层发送
发送部分中,mac_tx.v为MAC层发送模块,首先在SEND_START状态,等待mac_tx_ready信号,如果有效,表明IP或ARP的数据已经准备好,可以开始发送。再进入发送前导码状态,结束时发送mac_data_req,请求IP或ARP的数据,之后进入发送数据状态,最后进入发送CRC状态。在发送数据过程中,需要同时进行CRC校验。MAC层发送顶层接口如下:
MAC发送仲裁
工程中的mac_tx_mode.v为发送仲裁,根据发送模式是IP或ARP选择相应的信号与数据,MAC发送仲裁顶层接口如下:
ARP发送
发送部分中,arp_tx.v为ARP发送模块,在IDLE状态下,等待ARP发送请求或ARP应答请求信号,之后进入请求或应答等待状态,并通知MAC层,数据已经准备好,等待mac_data_req信号,之后进入请求或应答数据发送状态。由于数据不足46字节,需要补全46字节发送,ARP发送顶层接口如下:
IP层发送
在发送部分,ip_tx.v为IP层发送模块,在IDLE状态下,如果ip_tx_req有效,也就是UDP或ICMP发送请求信号,进入等待发送数据长度状态,之后进入产生校验和状态,校验和是将IP首部所有数据以16位相加,最后将进位再与低16位相加,直到进入为0,再将低16位取反,得出校验和结果。此程序中校验和以树型加法结构,并插入流水线,能有效降低加法部分的延迟,但缺点是会消耗较多逻辑资源。如下图 ABCD 四个输入,A与B相加结果为E,C与D相加结果为F,再将E与F相加结果为G,在每个相加结果之后都有寄存器。校验和设计框图如下:
在生成校验和之后,等待MAC层数据请求,开始发送数据,并在即将结束发送IP首部后请求UDP或ICMP数据。等发送完,进入 IDLE状态,IP层发送顶层接口如下:
IP发送仲裁
工程中的ip_tx_mode.v为发送仲裁,根据发送仲裁是UDP或ICMP选择相应的信号与数据。IP发送仲裁顶层接口如下:
UDP发送
发送部分中,udp_tx.v为UDP发送模块,第一步将数据写入UDP发送RAM,同时计算校验和,第二步将RAM中数据发送出去。UDP校验和与IP校验和计算方法一致。在计算时需要将伪首部加上,伪首部包括目的IP地址,源IP地址,网络类型,UDP数据长度,UDP发送顶层接口如下:
MAC层接收
在接收部分,其中mac_rx.v为mac层接收文件,首先在IDLE状态下需要判断rx_dv信号是否为高,在REC_PREAMBLE前导码状态下接收前导码。之后进入接收MAC头部状态,接收目的MAC地址、源MAC地址、类型,并将它们缓存起来,在此状态判断前导码是否正确,错误则进入REC_ERROR错误状态,在REC_IDENTIFY状态判断类型是IP(8’h0800)或ARP(8’h0806),然后进入接收数据状态,将数据传送到IP或ARP模块,等待IP或ARP数据接收完毕,再接收CRC数据,并在接收数据的过程中对接收的数据进行CRC处理,将结果与接收到的CRC数据进行对比,判断数据是否接收正确,正确则结束,错误则进入ERROR状态,MAC层接收顶层接口如下:
ARP接收
工程中的arp_rx.v为ARP接收模块,实现ARP数据接收,在IDLE状态下,接收到从MAC层发来的arp_rx_req信号,进入ARP接收状态,在此状态下,提取出目的MAC地址,源MAC地址,目的IP地址,源IP地址,并判断操作码OP是请求还是应答。如果是请求,则判断接收到的目的IP地址是否为本机地址,如果是,发送应答请求信号arp_reply_req,如果不是,则忽略。如果OP是应答,则判断接收到的目的IP地址及目的MAC地址是否与本机一致,如果是,则拉高arp_found 信号,表明接收到了对方的地址。并将对方的MAC地址及IP地址存入ARP缓存中。ARP接收顶层接口如下:
IP层接收
在工程中,ip_rx 为 IP层接收模块,实现IP层的数据接收,信息提取,并进行校验和检查。首先在IDLE状态下,判断从MA 层发过来的ip_rx_req信号,进入接收IP首部状态,先在REC_HEADER0提取出首部长度及IP总长度,进入REC_HEADER1状态,在此状态提取出目的IP地址、源IP地址、协议类型,根据协议类型发送udp_rx_req或icmp_rx_req。在接收首部的同时进行校验和的检查,将首部接收的所有数据相加,存入32位寄存器,再将高16位与低16位相加,直到高16位为0,再将低16位取反,判断其是否为0,如果是0,则检验正确,否则错误,进入IDLE状态,丢弃此帧数据,等待下次接收。IP层接收顶层接口如下:
UDP接收
在工程中,udp_rx.v为UDP接收模块,在此模块首先接收UDP首部,再接收数据部分,并将数据部分存入RAM 中,在接收的同时进行UDP校验和检查,如果UDP数据是奇数个字节,在计算校验和时,在最后一个字节后加上 8’h00,并进行校验和计算。校验方法与IP校验和一样,如果校验正确,将拉高udp_rec_data_valid 信号,表明接收的UDP数据有效,否则无效,等待下次接收。UDP接收顶层接口如下:
RGMII互转GMII模块
RGMII互转GMII模块由纯verilog实现;功能是实现双沿采集的RGMII数据互转单沿采集的GMII数据,需要使用紫光的GTP_ISERDES_E2和GTP_OSERDES_E2源语;模块代码架构如下:
其中的相位偏移时钟用于工作于延时模式的PHY芯片;
PHY芯片
本例程提供5套vivado工程源码,分别用到了RTL8211、KSZ9031、YT8531等市面上主流的PHY型号,通过这些型号PHY的使用,你将能学会其他型号PHY的使用,因为很多都是兼容的;此外,还提供了PHY的参考原理图,一并放在了资料包中;如下:
IP地址、端口号的修改
工程留出了IP地址、端口号的修改端口供用户自由修改,位置在顶层模块如下:
QT上位机
QT上位机用于接收并显示AD波形,界面如下:
下载程序到FPGA开发板后,连接网线至PC端,然后打开QT上位机可自动显示波形,绿色框显示FPGA开发板的MAC和IP地址;
复位:点击复位可使波形显示到初始状态;
垂直:“垂直“与“水平”切换,点击此按钮可进行水平垂直方向缩放的切换,在垂直状态下,滚动鼠标滚轴可进行垂直方向的缩放,水平状态下,进行水平方向的缩放;
暂停:“暂停“与”继续“切换,点击暂停波形,可再点击“继续”显示波形;
保存:保存ADC数据为TXT文档,保存路径在“路径”按钮处设置,默认为软件所在路径;
数值:“数值”与“电压”切换,Y方向坐标单位为原始值,即接收到的原始数据值,点击“电压”则显示电压值;
路径:选择保存路径;
打开:打开已保存的 TXT 波形文件;
QT上位机已放在了资料包中,如下:
!!!注意
!!!注意
QT上位机只做测试用,故只提供QT上位机可执行文件,不提供QT上位机源码;
工程源码架构
工程源码架构如下:
4、PDS工程源码1详解
开发板FPGA型号:紫光同创–PG2L100H-6EBG676;
开发环境:Pango Design Suite 2021.1;
AD数据输入:AD9238,50M采样率,12位采样精度;
AD数据输出:以太网输出,千兆UDP协议;
PC端接收方案:QT上位机接收并显示AD波形;
以太网物理层方案:KSZ9031RNX芯片,延时模式,RGMII接口;
以太网MAC层方案:纯verilog实现的RGMII互转GMII方案;
以太网协议层方案:千兆网版本的UDP协议栈,纯verilog实现;
网口数量:1个网口,即1个FPGA工程里运行1个UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握紫光同创FPGA实现AD9280数据采集转UDP网络传输的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
5、上板调试验证并演示
需要准备的器材如下:
FPGA开发板,没有开发板可以找本博提供;
示波器或者其他ADC输入源;
AD7606模块;
网线;
电脑主机;
我的开发板了连接如下:
然后将电脑端IP地址设置为如下:
然后下载bit或者固化bin文件,即可开始测试;
紫光同创FPGA实现AD9238数据采集转UDP网络传输效果演示
紫光同创FPGA实现AD9238数据采集转UDP网络传输效果演示如下:
AD-UDP
6、工程源码
工程源码如下:
相关文章:
紫光同创FPGA实现AD9238数据采集转UDP网络传输,分享PDS工程源码和技术支持和QT上位机
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目紫光同创FPGA相关方案推荐我这里已有的以太网方案本方案在Xilinx系列FPGA的应用方案 3、设计思路框架工程设计原理框图AD输入源AD9238数据采集AD9238数据缓存控制模块…...
ffmpeg 把一个视频复制3次
1. 起因, 目的: 前面我写过,使用 python 把一个视频复制3次但是速度太慢了,我想试试看能否改进。而且我想换一种新的视频处理思路,并试试看速度如何。 2. 先看效果 效果就是能行,而且速度也快。 3. 过程: 代码 1…...
仿腾讯会议——添加音频
1、实现开启或关闭音频 2、 定义信号 3、实现开始暂停音频 4、实现信号槽连接 5、回收资源 6、初始化音频视频 7、 完成为每个人创建播放音频的对象 8、发送音频 使用的是对象ba,这样跨线程不会立刻回收,如果使用引用,跨线程会被直接回收掉&a…...
从零训练一个大模型:DeepSeek 的技术路线与实践
从零训练一个大模型:DeepSeek 的技术路线与实践 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 从零训练一个大模型:DeepSeek 的技术路线与实践摘要引言技术路线对比1. 模型架构:…...
interface接口和defer场景分析
接口 接口这里主要两点: 设计业务结构时采用依赖倒转:业务层向下依赖抽象层,实现层向上依赖抽象层。 相比于之前: 之后: 注意struct中嵌套interface和不嵌套interface的区别: type Myinterface interfac…...
【数据结构篇】排序1(插入排序与选择排序)
注:本文以排升序为例 常见的排序算法: 目录: 一 直接插入排序: 1.1 基本思想: 1.2 代码: 1.3 复杂度: 二 希尔排序(直接插入排序的优化): 2.1 基本思想…...
FastAPI自定义异常处理:优雅转换Pydantic校验错误
FastAPI自定义异常处理:优雅转换Pydantic校验错误 背景需求 当使用FastAPI开发API服务时,Pydantic的自动校验异常默认会返回如下格式的422响应: {"detail": [{"type": "missing","loc": ["body", "user", &…...
C++--内存管理
内存管理 1. C/C内存分布 在C语言阶段,常说局部变量存储在栈区,动态内存中的数据存储在堆区,静态变量存储在静态区(数据段),常量存储在常量区(代码段),其实这里所说的栈…...
YOLOV3 深度解析:目标检测的高效利器
在计算机视觉领域,目标检测一直是一个重要且热门的研究方向,广泛应用于安防监控、自动驾驶、机器人视觉等诸多场景。YOLO(You Only Look Once)系列算法凭借其出色的实时性和较高的检测精度,在目标检测领域占据着重要地…...
select * from 按时间倒序排序
在SQL中,如果你想要根据时间字段来倒序排序查询结果,你可以使用ORDER BY子句,并结合DESC关键字来实现这个目的。这里有几个常见的场景和示例,假设我们有一个表events,里面包含一个时间戳字段event_time。 示例1&#…...
数据结构-DAY06
一、树的概念 1.链表是数的一部分(斜树) 2.树的查找速度很快 3.层序:前序:根左右 中序:左根右 后序: 左右根 4.树的存储:顺序结构,链式结构 5.特点: 1…...
JavaWeb:SpringBoot处理全局异常(RestControllerAdvice)
问题 GlobalExceptionHandler 小结...
免费私有化部署! PawSQL社区版,超越EverSQL的企业级SQL优化工具面向个人开发者开放使用了
1. 概览 1.1 快速了解 PawSQL PawSQL是专注于数据库性能优化的企业级工具,解决方案覆盖SQL开发、测试、运维的整个流程,提供智能SQL审核、查询重写优化及自动化巡检功能,支持MySQL、PostgreSQL、Oracle、SQL Server等主流数据库及达梦、金仓…...
buuctf RSA之旅
BUUCTF-RSA的成长之路 rsarsaRSA1RSA3RSA2RSARSAROLLDangerous RSA[GUET-CTF2019]BabyRSArsa2RSA5[NCTF2019]childRSA[HDCTF2019]bbbbbbrsaRSA4[BJDCTF2020]rsa_output[BJDCTF2020]RSA[WUSTCTF2020]babyrsa[ACTF新生赛2020]crypto-rsa0[ACTF新生赛2020]crypto-rsa3[GWCTF 2019]…...
javascript 编程基础(2)javascript与Node.js
文章目录 一、Node.js 与 JavaScript1、基本概念1.1、JavaScript:动态脚本语言1.2、Node.js:JavaScript 运行时环境 2、核心区别3、执行环境差异3.1、浏览器中的JavaScript3.2、Node.js中的JavaScript 4、共同点5、为什么需要Node.js? 一、No…...
IDEA+AI 深度融合:重构高效开发的未来模式
在 Java 开发领域,IntelliJ IDEA(以下简称 IDEA)作为最受欢迎的集成开发环境之一,一直是开发者的得力工具。而飞算 JavaAI 凭借强大的人工智能技术,为 Java 开发带来了全新的效率提升可能。当 IDEA 与飞算 JavaAI 深度…...
深度学习中常见损失函数激活函数
损失函数 一、分类任务损失函数 二、回归任务损失函数 三、生成对抗网络(GAN)损失函数 四、其他专用损失函数 五、损失函数选择原则 任务类型:分类用交叉熵,回归用MSE/MAE。 数据分布:类别不平衡时选择Focal Loss或…...
入职软件开发与实施工程师了后........
时隔几个月没有创作的我又回来了,这几个月很忙,我一直在找工作,在自考(顺便还处理了一下分手的事),到处奔波,心力交瘁。可能我骨子里比较傲吧。我不愿意着急谋生,做我不愿意做的普通…...
告别Spring AI!我的Java轻量AI框架实践(支持多模型接入|注解式MCP架构|附开源地址)
~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 1. 开发初衷 \quad 大家好,我是犬余,之前,为了体验一下MCP架构的JAVA实现,犬余使用了Spring AI框…...
【软考-架构】15、软件架构的演化和维护
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 软件架构演化和定义面向对象软件架构演化软件架构演化方式的分类软件架构演化原则软件架构演化评估方法大型网站架构演化软件架构维护 软件架构演化和定义 软件架构生命周…...
编译Qt5.15.16并启用pdf模块
编译Qt5.15.16并启用pdf模块 标题1.目录设置 -q-bulid –qt-everywhere-src-5.15.16 –bulid cd bulid 必须,否则会提示Project ERROR: You cannot configure qt separately within a top-level build. create .qmake.stash and .qmake.super in build folder …...
spring中的EnvironmentPostProcessor接口详解
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 EnvironmentPostProcessor 是 Spring Boot 提供的一个关键扩展接口,允许开发者在 Spring 应用环境初始化后、应用上下文创建前&…...
自学嵌入式 day20-数据结构 链表
注:gdb调试工具用法 3.链表的常规操作 (6)尾部插入 int InsertTailLinkList(LinkList* ll, DATATYPE* data) { if (IsEmptyLinkList(ll))//判断链表是否为空 { return InsertHeadLinkList(ll, data); } else { …...
Java设计模式之外观模式:从入门到精通(保姆级教程)
外观模式是结构型设计模式中非常实用的一种,它为复杂的子系统提供了一个统一的简化接口。本文将全面深入地剖析外观模式,从基础概念到高级应用,通过丰富的代码示例、图表和日常生活类比,帮助您彻底掌握这一模式。 一、外观模式基础概念 1.1 什么是外观模式? 外观模式(…...
Ubuntu 20.04 postgresql
安装命令 $ sudo apt-get update $ sudo apt-get install -y postgresql查看postgresql版本 $ psql --version psql (PostgreSQL) 12.22 (Ubuntu 12.22-0ubuntu0.20.04.3)查看系统用户组是否存在postgres $ getent group postgres postgres:x:115: $ getent passwd postgres…...
游戏引擎学习第295天:堆叠房间用于Z层调试
关于确定哪些系统影响许多其他系统,并尽早将其固定下来 目前我们的游戏开发已经进入了一个关键阶段,我们觉得是时候来彻底解决 Z(深度)相关的问题了。之前我们在 Z 轴的处理上做了一些尝试,但始终没有一个明确的定论&…...
【Python 算法零基础 4.排序 ② 冒泡排序】
目录 一、引言 二、算法思想 三、时间复杂度和空间复杂度 1.时间复杂度 2.空间复杂度 四、冒泡排序的优缺点 1.算法的优点 2.算法的缺点 五、实战练习 88. 合并两个有序数组 算法与思路 ① 合并数组 ② 冒泡排序 2148. 元素计数 算法与思路 ① 排序 ② 初始化计数器 ③ 遍历数组…...
【工具】Windows|外接的显示器怎么用软件调亮度(Brightness Slider)
文章目录 工具安装及使用Twinkle Tray:Brightness Slider补充背景知识1. DDC/CI(Display Data Channel Command Interface)2. WMI(Windows Management Instrumentation)3. Twinkle Tray如何结合两者?对比总…...
1.3.3 数据共享、汇聚和使用中的安全目标
探索数据共享、汇聚与使用中的安全目标 在当今数字化时代,数据的价值愈发凸显,数据共享、汇聚与使用成为了推动业务发展、促进创新的重要环节。然而,在这一过程中,数据安全至关重要,我们需要明确并保障保密性、完整性…...
【QT】类A和类B共用类C
当类A和类B需要操作同一个输入框时,需要采用共享实例的设计模式。以下是具体实现方案: 1. 核心实现思路 #mermaid-svg-cdmYFhkgOZ5C0uI5 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cdmYF…...
《算法导论(第4版)》阅读笔记:p86-p90
《算法导论(第4版)》学习第 19 天,p83-p85 总结,总计 3 页。 一、技术总结 无。 二、英语总结(生词:2) 1. inkling (1)inkling: inclen(“utter in an undertone,低声说话”) c. a hint(提示);a slight knowledg…...
AI在网络安全中的应用之钓鱼邮件检测
0x01 前言 为什么写这个呢,源自于我之前在某教培网站留了信息,不出意外的个人信息泄露的飞快,邮箱开始疯狂收到垃圾邮件甚至钓鱼邮件,看着每天的拦截消息,就在想这个拦截机制挺好玩的,拦截器是怎么知道是不…...
游戏引擎学习第294天:增加手套
准备战斗 我们正在进行的是第294天的开发,目前暂时没有特别确定要做的内容,但我们决定继续研究移动模式相关的部分。虽然一些小型实体系统已经在运行,但并不确定最终效果如何。 今天我们决定实现一个全新的功能:战斗系统。这是游…...
[架构之美]从PDMan一键生成数据库设计文档:Word导出全流程详解(二十)
[架构之美]从PDMan一键生成数据库设计文档:Word导出全流程详解(二十) 一、痛点 你是否经历过这些场景? 数据库字段频繁变更,维护文档耗时费力用Excel维护表结构,版本混乱难以追溯手动编写Word文档&#…...
5个开源MCP服务器:扩展AI助手能力,高效处理日常工作
AI大语言模型(如Claude、GPT)尽管强大,但其原生形态仅限于文本对话,无法直接与外部世界交互。这一局限严重制约了AI在实际应用场景中的价值发挥 - 无法主动获取实时数据、无法操作外部系统、无法访问用户私有资源。 MCPÿ…...
服务器的基础知识
什么是服务器 配置牛、运行稳、价格感人的高级计算机,家用电脑不能比拟的。 服务器的组成:电源、raid卡、网卡、内存、cpu、主板、风扇、硬盘。 服务器的分类 按计算能力分类 超级计算机 小型机AIX x86服务器(服务器cpu架构) …...
bisheng系列(二)- 本地部署(前后端)
一、导读 环境:Ubuntu 24.04、open Euler 23.03、Windows 11、WSL 2、Python 3.10 、bisheng 1.1.1 背景:需要bisheng二开商用,故而此处进行本地部署,便于后期调试开发 时间:20250519 说明:bisheng前后…...
华为ODgolang后端一面面经
MySQL死锁是怎么产生的? 假如有一条SQL语句执行了非常久,你会怎么优化呢? explain 索引什么情况下会失效? InnoDB和MyISAM引擎的区别是什么? 为什么是三次握手 避免历史连接 同步双方初始序列号避免资源浪费 为什么…...
UE5 GAS框架解析内部数据处理机制——服务器与客户端
当, gas通过点击鼠标光标触发事件时,内部的处理机制。 当通过点击事件,命中中目标时, 可获取到对应的TargetData 目标数据。处理相应的操作。 仅有本地的客户端的情况下。命中并不会有什么异常。 当存在服务器时, 服…...
《打造第二大脑》
序 第二大脑,前景无限 2025/05/08 发表想法 是的说的太对了,关键是之前自己一直在找如何能避免出现此问题的方法,今天终于看到了本书所讲的的内容 原文:我们耗费了无数的时间阅读、倾听和观摩他人提供的处世原则、思考方式以及生活…...
Word2Vec详解
目录 Word2Vec 一、Word2Vec 模型架构 (一)Word2Vec 的核心理念 (二)Word2Vec 的两种架构 (三)负采样与层次 Softmax (四)Word2Vec 的优势与局限 二、Word2Vec 预训练及数据集…...
[特殊字符] Word2Vec:将词映射到高维空间,它到底能解决什么问题?
一、在 Word2Vec 之前,我们怎么处理语言? 在 Word2Vec 出现之前,自然语言处理更多是“工程方法”,例如字符串匹配、关键词提取、正则规则...。但这些表示通常缺乏语义,词与词之间看不出任何联系以及非常浅显。当然,技术没有好坏,只有适合的场景。例如: 关键词匹配非常…...
anythingLLM支持本地大模型嵌入知识库后进行api调用
anythingLLM 可以使用本地大模型,并且可以嵌入知识库(Knowledge Base),通过 API 调用该知识库。 ✅ 一、anythingLLM 的基本架构 anythingLLM 是一个支持多种本地大模型(如 LLaMA、Qwen、ChatGLM 等)的开…...
PHP 实现连续子数组的最大和、整数中1出现的次数
在编程面试和实际应用中,处理数组和整数的常见问题之一是求解连续子数组的最大和以及计算整数中1出现的次数。本文将详细介绍如何使用 PHP 实现这两个问题的解决方案。 连续子数组的最大和 连续子数组的最大和问题要求找到一个数组中的连续子数组,使得…...
面试题之进程 PID 分配与回收算法:从理论到 Linux 内核实现
总结: 在操作系统中,进程 PID(Process Identifier)的分配与回收是核心功能之一。本文深入剖析了三种主流算法:位图法、空闲链表法和位图 哈希表组合法,并结合 Linux 内核源码探讨其优化思路。通过时间复杂…...
Pyro:基于PyTorch的概率编程框架
Pyro:基于PyTorch的概率编程框架 **Pyro:基于PyTorch的概率编程框架**基础讲解**一、Pyro核心模块****1. 入门与基础原语****2. 推理算法****3. 概率分布与变换****4. 神经网络与优化****5. 效应处理与工具库** **二、扩展应用与社区贡献****1. 特定领域…...
API Gateway REST API 集成 S3 服务自定义 404 页面
需求分析 使用 API Gateway REST API 可以直接使用 S3 作为后端集成对外提供可以访问的 API. 而当访问的 URL 中存在无效的桶, 或者不存在的对象时, API Gateway 默认回向客户端返回 200 状态码. 而实际上这并不是正确的响应, 本文将介绍如何自定义返回 404 错误页面. 基本功…...
02-前端Web开发(JS+Vue+Ajax)
介绍 在前面的课程中,我们已经学习了HTML、CSS的基础内容,我们知道HTML负责网页的结构,而CSS负责的是网页的表现。 而要想让网页具备一定的交互效果,具有一定的动作行为,还得通过JavaScript来实现。那今天,我们就来讲…...
visual studio code中的插件都是怎么开发的?用的什么编程语言?
目录 开发VS Code插件的编程语言 开发VS Code插件的步骤 学习资源 Visual Studio Code(VS Code)是一款流行的开源代码编辑器,由微软开发,支持多种编程语言。它的一个重要特性是可以通过插件(Extensions)来扩展其功能。这些插件可以增加新的语言支持、主题、调试器以及…...
python第30天
知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 浙大疏锦行-CSDN博客 from lib.ut…...