以太网实战AD采集上传上位机——FPGA学习笔记27
一、设计目标
使用FPGA实现AD模块驱动采集模拟电压,通过以太网上传到电脑上位机。
二、框架设计

数据位宽转换模块(ad_10bit_to_16bit):为了方便数据传输,数据位宽转换模块实现了将十位的 AD 数据转换成十六位,并且为了异步 FIFO 传输将高八位和低八位交换然后传输给数据封装模块。
开始传输模块(start_transfer_ctrl):该模块接收上位机发送的命令来判断是否开启传输以及使用那个通道传输。
数据封装模块(img_data_pkt):该模块调用异步 FIFO 将十六位的 AD 数据转换为传输给以太网部分的八位 UDP 数据,并且控制一包数据的大小和以太网 UDP 开始发送信号。
(1)开始传输模块 start_transfer_ctrl



module start_transfer_ctrl(input clk , //时钟信号input rst_n , //复位信号,低电平有效input udp_rec_pkt_done , //UDP单包数据接收完成信号 input udp_rec_en , //UDP接收的数据使能信号input [7 :0] udp_rec_data , //UDP接收的数据 input [15:0] udp_rec_byte_num , //UDP接收到的字节数 output reg [1:0] ctrl , output reg transfer_flag //图像开始传输标志,1:开始传输 0:停止传输
); //parameter define
parameter START_1 = 8'd1; //通道一开始命令
parameter STOP = 8'd0; //停止命令
parameter START_2 = 8'd2; //通道二开始命令//解析接收到的数据
always @(posedge clk or negedge rst_n) beginif (!rst_n) begintransfer_flag <= 1'b0;endelse if (udp_rec_pkt_done && udp_rec_byte_num == 1'b1)beginif (udp_rec_data == START_1) begintransfer_flag <= 1'b1;ctrl <= 2'b01;endelse if (udp_rec_data == START_2) begintransfer_flag <= 1'b1;ctrl <= 2'b10;end else if (udp_rec_data == STOP) begintransfer_flag <= 1'b0;ctrl <= 2'b00;end else begintransfer_flag <= 1'b0;ctrl <= 2'b00;endend
endendmodule
(2)开始传输模块 start_transfer_ctrl


module ad_10bit_to_16bit(input clk ,input rst_n ,input [1:0] sel ,//控制命令input [9:0] ad_in1 ,//通道一数据input [9:0] ad_in2 ,//通道二数据output reg [15:0] ad_out //输出数据
);//wire define
wire [9:0]s_ad_in1;
wire [9:0]s_ad_in2;//十位扩展为十六位
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginad_out <= 16'd0;endelse if( sel == 2'b01) beginad_out<={6'd0,ad_in1};//这样补0为了适应上位机endelse if( sel == 2'b10) beginad_out<={6'd0,ad_in2};//endelse beginad_out <= 16'd0;end
endendmodule
(3)数据封装模块 img_data_pkt:



(4)UDP顶层修改
主要修改UDP顶层UDP协议接口,对ICMP以及ARP部分进行保留
module eth_top(input sys_rst_n , //系统复位信号,低电平有效 input clk_200m ,output gmii_rx_clk ,output gmii_tx_clk ,//PL以太网RGMII接口 //inputinput eth_rxc , //RGMII接收数据时钟input eth_rx_ctl , //RGMII输入数据有效信号input [3:0] eth_rxd , //RGMII输入数据//outputoutput eth_txc , //RGMII发送数据时钟 output eth_tx_ctl , //RGMII输出数据有效信号output [3:0] eth_txd , //RGMII输出数据 //UDP接口input udp_tx_start_en , //UDP发送开始使能信号 input [7:0] udp_tx_data , //UDP待发送数据input [15:0] udp_tx_byte_num , //UDP发送的有效字节数 单位:byte output udp_rec_pkt_done , //UDP单包数据接收完成信号 output udp_tx_done , //UDP发送完成信号 output udp_tx_req , //UDP读数据请求信号output udp_rec_en , //UDP接收的数据使能信号output [7:0] udp_rec_data , //UDP接收的数据output [15:0] udp_rec_byte_num //UDP接收的有效字节数 单位:byte);//parameter define
parameter BOARD_MAC = 48'h00_11_22_33_44_55; //开发板MAC地址 00-11-22-33-44-55
parameter BOARD_IP = {8'd192,8'd168,8'd1,8'd10}; //开发板IP地址 192.168.1.10
parameter DES_MAC = 48'hff_ff_ff_ff_ff_ff; //目的MAC地址 ff_ff_ff_ff_ff_ff
parameter DES_IP = {8'd192,8'd168,8'd1,8'd102}; //目的IP地址 192.168.1.102
parameter IDELAY_VALUE = 15; //输入数据IO延时 (如果为n,表示延时n*78ps) //wire define
// wire clk_200m ; //用于IO延时的时钟 // wire gmii_rx_clk ; //GMII接收时钟
wire gmii_rx_dv ; //GMII接收数据有效信号
wire [7:0] gmii_rxd ; //GMII接收数据
// wire gmii_tx_clk ; //GMII发送时钟
wire gmii_tx_en ; //GMII发送数据使能信号
wire [7:0] gmii_txd ; //GMII发送数据 //ARP信号
wire arp_gmii_tx_en ; //ARP GMII输出数据有效信号
wire [7:0] arp_gmii_txd ; //ARP GMII输出数据
wire arp_rx_done ; //ARP接收完成信号
wire arp_rx_type ; //ARP接收类型 0:请求 1:应答
wire [47:0] src_mac ; //接收到目的MAC地址
wire [31:0] src_ip ; //接收到目的IP地址
wire arp_tx_en ; //ARP发送使能信号
wire arp_tx_type ; //ARP发送类型 0:请求 1:应答
wire [47:0] des_mac ; //发送的目标MAC地址
wire [31:0] des_ip ; //发送的目标IP地址
wire arp_tx_done ; //ARP发送完成信号//ICMP信号
wire icmp_gmii_tx_en ; //ICMP GMII输出数据有效信号
wire [7:0] icmp_gmii_txd ; //ICMP GMII输出数据
wire icmp_rec_pkt_done ; //ICMP单包数据接收完成信号
wire icmp_rec_en ; //ICMP接收的数据使能信号
wire [ 7:0] icmp_rec_data ; //ICMP接收的数据
wire [15:0] icmp_rec_byte_num ; //ICMP接收的有效字节数 单位:byte
wire [15:0] icmp_tx_byte_num ; //ICMP发送的有效字节数 单位:byte
wire icmp_tx_done ; //ICMP发送完成信号
wire icmp_tx_req ; //ICMP读数据请求信号
wire [ 7:0] icmp_tx_data ; //ICMP待发送数据
wire icmp_tx_start_en ; //ICMP发送开始使能信号//UDP信号
wire udp_gmii_tx_en ; //UDP GMII输出数据有效信号
wire [7:0] udp_gmii_txd ; //UDP GMII输出数据
// wire udp_rec_pkt_done ; //UDP单包数据接收完成信号
// wire udp_rec_en ; //UDP接收的数据使能信号
// wire [ 7:0] udp_rec_data ; //UDP接收的数据
// wire [15:0] udp_rec_byte_num ; //UDP接收的有效字节数 单位:byte
// wire [15:0] udp_tx_byte_num ; //UDP发送的有效字节数 单位:byte
// wire udp_tx_done ; //UDP发送完成信号
// wire udp_tx_req ; //UDP读数据请求信号
// wire [ 7:0] udp_tx_data ; //UDP待发送数据
// wire udp_tx_start_en ; //UDP发送开始使能信号wire [7:0] rec_data ; //FIFO写入数据
wire rec_en ; //FIFO写使能
wire tx_req ; //FIFO读使能
wire [7:0] tx_data ; //FIFO读出数据assign icmp_tx_start_en = icmp_rec_pkt_done ; //ICMP 接收端结束标志,作为 ICMP发送端开始标志
assign icmp_tx_byte_num = icmp_rec_byte_num ; //ICMP 接收端数据个数,作为 ICMP发送端发送数据 // assign udp_tx_start_en = udp_rec_pkt_done ; //UDP 接收端结束标志,作为 UDP发送开始使能信号
// assign udp_tx_byte_num = udp_rec_byte_num ; //UDP 接收端数据个数,作为 UDP发送端发送数据个数assign des_mac = src_mac ; //ARP 接收到的 源MAC,作为 ICMP\UDP 目的MAC,实际为电脑端MAC
assign des_ip = src_ip ; //ARP 接收到的 源IP ,作为 ICMP\UDP 目的IP ,实际为电脑端IP//数据位于异步FIFO之中,如需单独使用一侧功能,可以修改FIFO数据//需要注意写入有效数据数量要与此处相同,一定要注意 数据个数与FIFO读出数据对齐!!!!!!! // //MMCM/PLL 产生200Mhz时钟--> gmii2rgmii
// clk_wiz_0 u_clk_wiz_0
// (
// .clk_out1 (clk_200m ), // output clk_out1
// .reset (~sys_rst_n ), // input reset
// .locked (locked ), // output locked
// .clk_in1 (eth_rxc ) // PHY侧提供eth_rxc时钟125Mhz
// ); //GMII接口转RGMII接口
gmii_to_rgmii
#(.IDELAY_VALUE (IDELAY_VALUE )
)
u_gmii_to_rgmii( .idelay_clk (clk_200m ), //IDELAY时钟//以太网GMII接口 .gmii_rx_clk (gmii_rx_clk ), //GMII接收时钟.gmii_rx_dv (gmii_rx_dv ), //GMII接收数据有效信号.gmii_rxd (gmii_rxd ), //GMII接收数据.gmii_tx_clk (gmii_tx_clk ), //GMII发送时钟.gmii_tx_en (gmii_tx_en ), //GMII发送数据使能信号.gmii_txd (gmii_txd ), //GMII发送数据 //以太网RGMII接口 .rgmii_rxc (eth_rxc ), //RGMII接收时钟.rgmii_rx_ctl (eth_rx_ctl ), //RGMII接收数据控制信号.rgmii_rxd (eth_rxd ), //RGMII接收数据.rgmii_txc (eth_txc ), //RGMII发送时钟 .rgmii_tx_ctl (eth_tx_ctl ), //RGMII发送数据控制信号.rgmii_txd (eth_txd ) //RGMII发送数据
);//ARP通信
arp
#(.BOARD_MAC (BOARD_MAC ), //参数例化.BOARD_IP (BOARD_IP ),.DES_MAC (DES_MAC ),.DES_IP (DES_IP )
)
u_arp( .rst_n (sys_rst_n ), //复位信号,低电平有效//GMII接口 //input.gmii_rx_clk (gmii_rx_clk ), //GMII接收数据时钟.gmii_rx_dv (gmii_rx_dv ), //GMII输入数据有效信号.gmii_rxd (gmii_rxd ), //GMII输入数据.gmii_tx_clk (gmii_tx_clk ), //GMII发送数据时钟//output.gmii_tx_en (arp_gmii_tx_en ), //GMII输出数据有效信号.gmii_txd (arp_gmii_txd ), //GMII输出数据 //用户接口 //output.arp_rx_done (arp_rx_done ), //ARP接收完成信号.arp_rx_type (arp_rx_type ), //ARP接收类型 0:请求 1:应答.src_mac (src_mac ), //接收到目的MAC地址.src_ip (src_ip ), //接收到目的IP地址 //input .arp_tx_en (arp_tx_en ), //ARP发送使能信号.arp_tx_type (arp_tx_type ), //ARP发送类型 0:请求 1:应答.des_mac (des_mac ), //发送的目标MAC地址.des_ip (des_ip ), //发送的目标IP地址//output.tx_done (arp_tx_done ) //以太网发送完成信号
); //ICMP通信
icmp
#(.BOARD_MAC (BOARD_MAC ), //参数例化.BOARD_IP (BOARD_IP ),.DES_MAC (DES_MAC ),.DES_IP (DES_IP )
)
u_icmp(.rst_n (sys_rst_n ), //复位信号,低电平有效//GMII接口//input.gmii_rx_clk (gmii_rx_clk ), //GMII接收数据时钟 .gmii_rx_dv (gmii_rx_dv ), //GMII输入数据有效信号 .gmii_rxd (gmii_rxd ), //GMII输入数据 .gmii_tx_clk (gmii_tx_clk ), //GMII发送数据时钟//output.gmii_tx_en (icmp_gmii_tx_en ), //GMII输出数据有效信号 .gmii_txd (icmp_gmii_txd ), //GMII输出数据//用户接口//output.rec_pkt_done (icmp_rec_pkt_done ), //以太网单包数据接收完成信号 .rec_en (icmp_rec_en ), //以太网接收的数据使能信号 .rec_data (icmp_rec_data ), //以太网接收的数据 .rec_byte_num (icmp_rec_byte_num ), //以太网接收的有效字节数 单位:byte //input.tx_start_en (icmp_tx_start_en ), //以太网开始发送信号 .tx_data (icmp_tx_data ), //以太网待发送数据 .tx_byte_num (icmp_tx_byte_num ), //以太网发送的有效字节数 单位:byte.des_mac (des_mac ), //发送的目标MAC地址.des_ip (des_ip ), //发送的目标IP地址 //output.tx_done (icmp_tx_done ), //以太网发送完成信号 .tx_req (icmp_tx_req ) //读数据请求信号
); //UDP通信
udp
#(.BOARD_MAC (BOARD_MAC ), //参数例化.BOARD_IP (BOARD_IP ),.DES_MAC (DES_MAC ),.DES_IP (DES_IP )
)
u_udp(.rst_n (sys_rst_n ), //复位信号,低电平有效//GMII接口//input.gmii_rx_clk (gmii_rx_clk ), //GMII接收数据时钟 .gmii_rx_dv (gmii_rx_dv ), //GMII输入数据有效信号.gmii_rxd (gmii_rxd ), //GMII输入数据.gmii_tx_clk (gmii_tx_clk ), //GMII发送数据时钟 //output .gmii_tx_en (udp_gmii_tx_en ), //GMII输出数据有效信号.gmii_txd (udp_gmii_txd ), //GMII输出数据 //用户接口//outpur.rec_pkt_done (udp_rec_pkt_done ), //以太网单包数据接收完成信号 .rec_en (udp_rec_en ), //以太网接收的数据使能信号.rec_data (udp_rec_data ), //以太网接收的数据 .rec_byte_num (udp_rec_byte_num ), //以太网接收的有效字节数 单位:byte //input.tx_start_en (udp_tx_start_en ), //以太网开始发送信号 .tx_data (udp_tx_data ), //以太网待发送数据 .tx_byte_num (udp_tx_byte_num ), //以太网发送的有效字节数 单位:byte .des_mac (des_mac ), //发送的目标MAC地址 .des_ip (des_ip ), //发送的目标IP地址 //output .tx_done (udp_tx_done ), //以太网发送完成信号 .tx_req (udp_tx_req ) //读数据请求信号
); //异步FIFO,实际做同步FIFO使用
async_fifo_2048x8b u_async_fifo_2048x8b (//input.rst (~sys_rst_n ), //input wire rst.wr_clk (gmii_rx_clk ), //input wire wr_clk.rd_clk (gmii_rx_clk ), //input wire rd_clk.din (rec_data ), //input wire [7 : 0] din.wr_en (rec_en ), //input wire wr_en.rd_en (tx_req ), //input wire rd_en//output.dout (tx_data ), //output wire [7 : 0] dout.full ( ), //output wire full.empty ( ) //output wire empty
);// //预留调试ILA
// ila_0 ila_0_fifo (
// .clk (gmii_rx_clk ), // input wire clk// .probe0 (rec_en ), // input wire [0:0] probe0
// .probe1 (rec_data ), // input wire [7:0] probe1
// .probe2 (tx_req ), // input wire [0:0] probe2
// .probe3 (tx_data ) // input wire [7:0] probe3
// );//以太网控制模块
eth_ctrl u_eth_ctrl(//input.clk (gmii_rx_clk ), //时钟.rst_n (sys_rst_n ), //系统复位信号,低电平有效 //ARP相关端口信号 //input.arp_rx_done (arp_rx_done ), //ARP接收完成信号.arp_rx_type (arp_rx_type ), //ARP接收类型 0:请求 1:应答.arp_tx_done (arp_tx_done ), //ARP发送完成信号.arp_gmii_tx_en (arp_gmii_tx_en ), //ARP GMII输出数据有效信号 .arp_gmii_txd (arp_gmii_txd ), //ARP GMII输出数据//output.arp_tx_en (arp_tx_en ), //ARP发送使能信号.arp_tx_type (arp_tx_type ), //ARP发送类型 0:请求 1:应答//ICMP相关端口信号//input.icmp_tx_start_en (icmp_tx_start_en ), //ICMP开始发送信号.icmp_tx_done (icmp_tx_done ), //ICMP发送完成信号.icmp_gmii_tx_en (icmp_gmii_tx_en ), //ICMP GMII输出数据有效信号 .icmp_gmii_txd (icmp_gmii_txd ), //ICMP GMII输出数据 //ICMP fifo接口信号//input.icmp_rec_en (icmp_rec_en ), //ICMP接收的数据使能信号.icmp_rec_data (icmp_rec_data ), //ICMP接收的数据.icmp_tx_req (icmp_tx_req ), //ICMP读数据请求信号//output.icmp_tx_data (icmp_tx_data ), //ICMP待发送数据//UDP相关端口信号//input.udp_tx_start_en (udp_tx_start_en ), //UDP开始发送信号.udp_tx_done (udp_tx_done ), //UDP发送完成信号 .udp_gmii_tx_en (udp_gmii_tx_en ), //UDP GMII输出数据有效信号 .udp_gmii_txd (udp_gmii_txd ), //UDP GMII输出数据 //UDP fifo接口信号//input.udp_rec_data (udp_rec_data ), //UDP接收的数据 ---> UDP要发送的数据.udp_rec_en (udp_rec_en ), //UDP接收的数据使能信号 .udp_tx_req (udp_tx_req ), //UDP读数据请求信号 //output .udp_tx_data ( ), //UDP待发送数据 //fifo接口信号//output.rec_data (rec_data ), //待发送的数据 .rec_en (rec_en ), //读数据请求信号 .tx_req (tx_req ), //接收的数据使能信号//input.tx_data (tx_data ), //接收的数据//GMII发送引脚 //output.gmii_tx_en (gmii_tx_en ), //GMII输出数据有效信号 .gmii_txd (gmii_txd ) //GMII输出数据
); endmodule
三、代码架构

四、下载测试
1、ping指令&ARP


2、UDP数据上报
正弦波


方波


三角波


多频音波


五、源码获取工程移植,请后台私信
相关文章:
以太网实战AD采集上传上位机——FPGA学习笔记27
一、设计目标 使用FPGA实现AD模块驱动采集模拟电压,通过以太网上传到电脑上位机。 二、框架设计 数据位宽转换模块(ad_10bit_to_16bit):为了方便数据传输,数据位宽转换模块实现了将十位的 AD 数据转换成十六位&#…...
Python数据分析案例70——基于神经网络的时间序列预测(滞后性的效果,预测中存在的问题)
背景 这篇文章可以说是基于 现代的一些神经网络的方法去做时间序列预测的一个介绍科普,也可以说是一个各种模型对比的案例,但也会谈一谈自己做了这么久关于神经网络的时间序列预测的论文,其中一些常见的模式及它们存在的问题以及效果&#x…...
vue+高德API搭建前端Echarts图表页面
利用vue搭建Echarts图表页面,在搭建Echarts图表中,如果搭建地理地形图需要准备一些额外的文件,地理json文件和js文件,js文件目前在网上只能找省一级的,json文件有对应的省市县,js文件和json文件对应的也是不…...
提示词工程:解锁AI潜能的关键技术
什么是提示词工程? 提示词工程(Prompt Engineering)是一门新兴的技术领域,专注于如何设计和优化与生成式人工智能的交互提示,以获得最佳的输出结果。它是连接人类意图和AI能力的桥梁,通过精心设计的文本输入来引导AI模型产生准确、相关且有价值的输出。 核心概念 提示(…...
Python制作简易PDF查看工具PDFViewerV1.0
PDFViewer PDF浏览工具,Python自制PDF查看工具,可实现基本翻页浏览功能,其它功能在进一步开发完善当中,如果有想一起开发的朋友,可以留言。本软件完全免费,自由使用。 软件界面简洁,有菜单栏、…...
嵌入式硬件篇---基本组合逻辑电路
文章目录 前言基本逻辑门电路1.与门(AND Gate)2.或门(OR Gate)3.非门(NOT Gate)4.与非门(NAND Gate)5.或非门(NOR Gate)6.异或门(XOR Gate&#x…...
CSRF攻击XSS攻击
概述 在 HTML 中,<a>, <form>, <img>, <script>, <iframe>, <link> 等标签以及 Ajax 都可以指向一个资源地址,而所谓的跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指…...
ARM学习(42)CortexM3/M4 MPU配置
笔者之前学习过CortexR5的MPU配置,现在学习一下CortexM3/M4 MPU配置 1、背景介绍 笔者在工作中遇到NXP MPU在访问异常地址时,就会出现总线挂死,所以需要MPU抓住异常,就需要配置MPU。具体背景情况可以参考ARM学习(41)NXP MCU总线挂死,CPU could not be halted以及无法连…...
opencv3.4 ffmpeg3.4 arm-linux 交叉编译
一些依赖安装: sudo apt-get install pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev 交叉编译工具链准备:gcc-linaro-6.3.1 1、下载 https://github.com/FFmpeg/FFmpeg 解压后新建目录:Fmpeg-n3.4.13/ffmpeg…...
spring的事物管理的认知
事物 它是一个原子操作要么全部不执行,要么全部执行成功,如果有一个失败也会撤销,它保证用户每一次的操作都是可靠的,即使时出现了错误也不至于破坏数据的完整性 它包含了四种特性: 原子性:保证事物要么…...
麒麟LINUX V10SP3 2401安装ORACLE 12.2.1 runInstaller直接报UNZIP格式不对
好久没有安装ORACLE了,一般都是RHEL上安装得比较多,这不,现在大家都是选择国产操作系统来安装数据库了,以前在龙蜥,欧拉,麒麟上也安装过,都没有问题,想来在麒麟LINUX v10sp3 2401上面…...
华为HuaweiCloudStack(一)介绍与架构
本文简单介绍了华为HCS私有云解决方案,并从下至上介绍HCS的整体架构,部署架构、部署方式等内容。 目录 HCS简介 HCS架构 纵向结构 ?管理平台类型 HCS节点类型 FusionSphere OpenStack CPS ServiceOM SC 运营面 OC 运维面 HCS部署架构 regi…...
微服务学习:基础理论
一、微服务和应用现代化 1、时代的浪潮,企业的机遇和挑战 在互联网化数字化智能化全球化的当今社会,IT行业也面临新的挑战: 【快】业务需求如“滔滔江水连绵不绝”,企业需要更快的交付【变】林子大了,百色用户&…...
C++实现设计模式---迭代器模式 (Iterator)
迭代器模式 (Iterator) 迭代器模式 是一种行为型设计模式,它提供了一种方法,顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 意图 提供一种方法,可以顺序访问一个容器对象中的元素,而无需暴露其…...
海康工业相机的应用部署不是简简单单!?
作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 笔者使用的设备及环境:WSL2-Ubuntu22.04MV-CS016-10UC 不会吧?不会吧?不会还有人拿到海康工业相机还是一脸懵叭?不会还有人…...
Windows电脑安装File Browser与cpolar轻松搭建本地云盘
文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 无论是个人用户还是企业团队,都希望能够有一个高效、安全的解决方案来…...
mac配置 iTerm2 使用lrzsz与服务器传输文件
mac配置 1. 安装支持rz和sz命令的lrzsz brew install lrzsz2. 下载iterm2-send-zmodem.sh和iterm2-recv-zmodem.sh两个脚本 # 克隆仓库 git clone https://github.com/aikuyun/iterm2-zmodem ~/iterm2-zmodem# 进入到仓库目录 cd ~/iterm2-zmodem# 设置脚本文件可执行权限 c…...
【HBuilderX 中 Git 的使用】
目录: 一:安装必要的版本控制工具二:把Github上的项目克隆到本地三:将本地的项目上传到Github上 一:安装必要的版本控制工具 1️⃣ 安装 TortoiseGit 工具,下载地址:https://tortoisegit.org/do…...
Golang结合MySQL和DuckDB提高查询性能
要在Golang中组合MySQL和DuckDB以提高查询性能,请考虑使用混合查询执行方法。这种方法利用了MySQL强大的事务管理和DuckDB闪电般的分析处理能力。本文介绍如何充分利用两者的方法。 各取所长 用MySQL处理事务,用DuckDB处理分析 MySQL应该处理常规的INS…...
学技术学英语:TCP的三次握手和四次挥手
单词 汉语意思 音标 acknowledge 承认,确认 /əkˈnɒl.ɪdʒ/ acknowledgment 确认,承认 /əkˈnɒl.ɪdʒ.mənt/ duplex 双向的 /ˈdjuː.pleks/ establish 建立 /ɪˈstb.lɪʃ/ handshake 握手,握手协议 /ˈhnd.ʃeɪk…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
