AD7606芯片驱动-FPGA实现

        简介

        AD7606是一款16位ADC芯片,可实现8通道并行采集,每通道最大速度可达1M,可实现多种模式数据采集。

        介绍

        本次FPGA使用的是8通道串行采样模式,设计中所用到的AD7606引脚说明如下:

名称定义
CONVST同步采集转换开始信号
BUSYADC忙碌状态信号
RD/SCLK采样/寄存器工作时钟
CS片选使能
DOUTA~DOUTH

ADC 8通道串行输出

SDI寄存器数据输入

 本次采用的寄存器读写时序如下图所示:

 1、寄存器读写第一位默认为0;

2、第二位代表寄存器读写位,0代表写寄存器,1代表读寄存器;

3、6个地址位,具体寄存器定义查阅芯片手册;

4、如果是写操作,后面8bit为寄存器值,如果是读操作则通过DoutA接口读取返回的寄存器数据。

5、该芯片支持CRC模式,本次设计默认不启动CRC模式,所以后面8bitCRC在普通模式下不存在。

采样时序如下图所示:

                        

本时序图发现如下两个问题:

1、DoutA~DoutH输出的应该是V1~V7数据,上图中标识有错误;

2、上图未标识CONVST和BUSY信号,显然这两个信号是必须存在的;

另外芯片引脚OS0~OS2都接高点平,进入Enters software mode模式。

代码

FPGA驱动代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/08/05 15:39:27
// Design Name: 
// Module Name: ADC_SLAVE_DRI_TOP
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module ADC_SLAVE_DRI_TOP(input sys_clk,input sys_rst_n,output reg ADC_CONVST,input ADC_BUSY,output ADC_SCLK,output ADC_CS,input ADC_FRSTDATA,input[7:0] ADC_DATA,[7]:a [6]:b [5]:c ......output ADC_SDI,reg setinput[15:0] adc_frame_length,input[15:0] adc_tdata_reg,input[15:0] adc_sample_rate_h,input[15:0] adc_sample_rate_l,	ADC REC REG DATAoutput[7:0] adc_rec_reg_data,output adc_rec_reg_data_en,input[3:0] adc_rw_set,//[1]:sample [0]:reg w/rinput[15:0] adc_sample_rate_reg,input[15:0] adc_sample_channel_en_reg,ADC SAMPLE DATA	output[15:0] rx_data_length,output [7:0] axis_adc_data,output  axis_adc_tvalid,output  axis_adc_tlast	);parameter ADC_CONVST_num = 'd100;	reg[7:0] spi_tdata;
reg spi_tvalid;
reg tx_reg_en_r1;
wire[31:0] ADC_SAMPLE_RATE;
reg[31:0]sample_cnt;
reg tx_reg_wr_r1;
reg tx_reg_rd_r1;
wire tx_reg_wr;
wire tx_reg_rd;
wire sample_en;
reg ADC_BUSY_r1;
reg ADC_BUSY_r2;
reg ADC_BUSY_r3;
reg ADC_BUSY_r4;
reg ADC_BUSY_r5;
wire ADC_BUSY_neg;reg[15:0]rec_adc_a_sample_data;
reg[15:0]rec_adc_b_sample_data;
reg[15:0]rec_adc_c_sample_data;
reg[15:0]rec_adc_d_sample_data;
reg[15:0]rec_adc_e_sample_data;
reg[15:0]rec_adc_f_sample_data;
reg[15:0]rec_adc_g_sample_data;
reg[15:0]rec_adc_h_sample_data;
reg rec_adc_sample_en;
reg ADC_SCLK_i;
reg ADC_CS_i;
reg[3:0] adc_mode;
reg[31:0] sample_en_delay;
reg[31:0] adc_stop_delay;reg[15:0] rec_data_cnt;reg[7:0] s_axis_tdata;
reg s_axis_tvalid;
wire s_axis_tlast;
reg[15:0] s_axis_tvalid_cnt;reg[15:0] spi_clk_cnt;
reg[15:0] clk_cnt;reg sample_en_r1;
reg sample_en_r2;
wire sample_en_neg;
wire[13:0] axis_data_count;reg fifo_rst_n;
reg[15:0] fifo_rst_cnt;
reg fifo_rst_en;wire channel_a_en;
wire channel_b_en;
wire channel_c_en;
wire channel_d_en;
wire channel_e_en;
wire channel_f_en;
wire channel_g_en;
wire channel_h_en;assign channel_a_en = adc_sample_channel_en_reg[7];
assign channel_b_en = adc_sample_channel_en_reg[6];
assign channel_c_en = adc_sample_channel_en_reg[5];
assign channel_d_en = adc_sample_channel_en_reg[4];
assign channel_e_en = adc_sample_channel_en_reg[3];
assign channel_f_en = adc_sample_channel_en_reg[2];
assign channel_g_en = adc_sample_channel_en_reg[1];
assign channel_h_en = adc_sample_channel_en_reg[0];assign rx_data_length = adc_frame_length;
assign tx_reg_wr = adc_rw_set[0];
assign tx_reg_rd = adc_rw_set[1];
assign sample_en = adc_rw_set[2];
assign ADC_SAMPLE_RATE = {adc_sample_rate_h,adc_sample_rate_l};
assign ADC_BUSY_neg = (~ADC_BUSY_r4) && ADC_BUSY_r5;assign ADC_SCLK = (adc_mode == 'd3)?ADC_SCLK_i:ADC_SCLK_ii;
assign ADC_CS = (adc_mode == 'd3)?ADC_CS_i:ADC_CS_ii;
assign sample_en_neg = sample_en_r2 && (~sample_en_r1);assign s_axis_tlast = (s_axis_tvalid_cnt == adc_frame_length - 'd1)?1'b1:1'b0;always@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin adc_mode <= 'd0;endelse if(tx_reg_wr == 'd1)beginadc_mode <= 'd1;	endelse if(tx_reg_rd == 'd1)beginadc_mode <= 'd2;endelse if(sample_en == 'd1)beginadc_mode <= 'd3;end
endreg set
always@(posedge sys_clk)begintx_reg_wr_r1 <= tx_reg_wr;tx_reg_rd_r1 <= tx_reg_rd;
end	always@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  spi_tdata <= 'd0;spi_tvalid <= 'd0;endelse if(tx_reg_wr == 'd1)beginspi_tdata <= {2'b00,adc_tdata_reg[13:8]};spi_tvalid <= 'd1;endelse if(tx_reg_rd == 'd1)beginspi_tdata <= {2'b01,adc_tdata_reg[13:8]};spi_tvalid <= 'd1;endelse if(tx_reg_wr_r1 == 'd1 || tx_reg_rd_r1 == 'd1)beginspi_tdata <= adc_tdata_reg[7:0];spi_tvalid <= 'd1;		endelse beginspi_tdata <= 'd0;spi_tvalid <= 'd0;		end
endsamplealways@(posedge sys_clk)beginADC_BUSY_r1 <= ADC_BUSY;ADC_BUSY_r2 <= ADC_BUSY_r1;ADC_BUSY_r3 <= ADC_BUSY_r2;ADC_BUSY_r4 <= ADC_BUSY_r3;ADC_BUSY_r5 <= ADC_BUSY_r4;sample_en_r1 <= sample_en;sample_en_r2 <= sample_en_r1;
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  sample_cnt <= 'd0;endelse if(sample_cnt >= ADC_SAMPLE_RATE - 'd1)beginsample_cnt <= 'd0;endelse if(sample_en == 'd1)beginsample_cnt <= sample_cnt + 'd1;endelse beginsample_cnt <= 'd0;end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  ADC_CONVST <= 'd0;endelse if(sample_cnt < ADC_CONVST_num + 'd10 && sample_cnt >= 'd10 && sample_en == 'd1)beginADC_CONVST <= 'd1;endelse beginADC_CONVST <= 'd0;end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  spi_clk_cnt <= 'd0;clk_cnt <= 'd0;end	else if(ADC_BUSY_neg == 'd1) beginspi_clk_cnt <= 'd36;clk_cnt <= adc_sample_rate_reg;20M;endelse if(spi_clk_cnt > 'd0 && clk_cnt == 'd1)beginspi_clk_cnt <= spi_clk_cnt - 'd1;clk_cnt <= adc_sample_rate_reg;endelse if(spi_clk_cnt > 'd0)beginclk_cnt <= clk_cnt - 'd1;end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  ADC_CS_i <= 'd1;end	else if(spi_clk_cnt > 'd0) beginADC_CS_i <= 'd0;endelse beginADC_CS_i <= 'd1;end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  ADC_SCLK_i <= 'd1;end	else if(clk_cnt == 'd1 && spi_clk_cnt >='d3 && spi_clk_cnt <= 'd34) beginADC_SCLK_i <= ~ADC_SCLK_i;end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  rec_adc_a_sample_data <= 'd0;rec_adc_b_sample_data <= 'd0;	rec_adc_c_sample_data <= 'd0;	rec_adc_d_sample_data <= 'd0;	rec_adc_e_sample_data <= 'd0;	rec_adc_f_sample_data <= 'd0;	rec_adc_g_sample_data <= 'd0;	rec_adc_h_sample_data <= 'd0;		end	else if(clk_cnt == 'd1 && spi_clk_cnt >='d3 && spi_clk_cnt <= 'd34 && ADC_SCLK_i == 'd0) beginrec_adc_a_sample_data <= {rec_adc_a_sample_data[14:0],ADC_DATA[7]};rec_adc_b_sample_data <= {rec_adc_b_sample_data[14:0],ADC_DATA[6]};rec_adc_c_sample_data <= {rec_adc_c_sample_data[14:0],ADC_DATA[5]};rec_adc_d_sample_data <= {rec_adc_d_sample_data[14:0],ADC_DATA[4]};	rec_adc_e_sample_data <= {rec_adc_e_sample_data[14:0],ADC_DATA[3]};rec_adc_f_sample_data <= {rec_adc_f_sample_data[14:0],ADC_DATA[2]};rec_adc_g_sample_data <= {rec_adc_g_sample_data[14:0],ADC_DATA[1]};rec_adc_h_sample_data <= {rec_adc_h_sample_data[14:0],ADC_DATA[0]};end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  rec_adc_sample_en <= 'd0;end	else if(clk_cnt == 'd1 && spi_clk_cnt == 'd3 && ADC_SCLK_i == 'd0) beginrec_adc_sample_en <= 'd1;endelse beginrec_adc_sample_en <= 'd0;end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  sample_en_delay <= 'd0;adc_stop_delay <= 'd0;end	else beginsample_en_delay <= {sample_en_delay[30:0],rec_adc_sample_en};adc_stop_delay <= {adc_stop_delay[30:0],sample_en_neg};end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  s_axis_tdata <= 'd0;s_axis_tvalid <= 'd0;end	else if(sample_en_delay[0] == 'd1 && channel_a_en == 'd1)begins_axis_tdata <= rec_adc_a_sample_data[15:8];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[1] == 'd1 && channel_a_en == 'd1)begins_axis_tdata <= rec_adc_a_sample_data[7:0];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[2] == 'd1 && channel_b_en == 'd1)begins_axis_tdata <= rec_adc_b_sample_data[15:8];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[3] == 'd1 && channel_b_en == 'd1)begins_axis_tdata <= rec_adc_b_sample_data[7:0];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[4] == 'd1 && channel_c_en == 'd1)begins_axis_tdata <= rec_adc_c_sample_data[15:8];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[5] == 'd1 && channel_c_en == 'd1)begins_axis_tdata <= rec_adc_c_sample_data[7:0];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[6] == 'd1 && channel_d_en == 'd1)begins_axis_tdata <= rec_adc_d_sample_data[15:8];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[7] == 'd1 && channel_d_en == 'd1)begins_axis_tdata <= rec_adc_d_sample_data[7:0];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[8] == 'd1 && channel_e_en == 'd1)begins_axis_tdata <= rec_adc_e_sample_data[15:8];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[9] == 'd1 && channel_e_en == 'd1)begins_axis_tdata <= rec_adc_e_sample_data[7:0];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[10] == 'd1 && channel_f_en == 'd1)begins_axis_tdata <= rec_adc_f_sample_data[15:8];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[11] == 'd1 && channel_f_en == 'd1)begins_axis_tdata <= rec_adc_f_sample_data[7:0];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[12] == 'd1 && channel_g_en == 'd1)begins_axis_tdata <= rec_adc_g_sample_data[15:8];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[13] == 'd1 && channel_g_en == 'd1)begins_axis_tdata <= rec_adc_g_sample_data[7:0];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[14] == 'd1 && channel_h_en == 'd1)begins_axis_tdata <= rec_adc_h_sample_data[15:8];s_axis_tvalid <= 'd1;endelse if(sample_en_delay[15] == 'd1 && channel_h_en == 'd1)begins_axis_tdata <= rec_adc_h_sample_data[7:0];s_axis_tvalid <= 'd1;endelse begins_axis_tvalid <= 'd0;end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  s_axis_tvalid_cnt <= 'd0;end	else if(s_axis_tvalid == 'd1 && s_axis_tvalid_cnt == adc_frame_length - 'd1)begins_axis_tvalid_cnt <= 'd0;endelse if(s_axis_tvalid == 'd1)begins_axis_tvalid_cnt <= s_axis_tvalid_cnt + 'd1;end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  fifo_rst_en <= 'd0;end	else if(sample_en == 'd0 && axis_adc_tvalid == 'd0 && axis_data_count > 'd0 && axis_data_count <adc_frame_length)beginfifo_rst_en <= 'd1;endelse beginfifo_rst_en <= 'd0;end
endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 'D0)begin  fifo_rst_n <= 'd1;fifo_rst_cnt <= 'd0;end		else if(fifo_rst_en == 'd1)beginfifo_rst_n <= 'd0;fifo_rst_cnt <= 'd200;endelse if(fifo_rst_cnt > 'd0)beginfifo_rst_n <= 'd0;fifo_rst_cnt <= fifo_rst_cnt - 'd1;endelse beginfifo_rst_n <= 'd1;fifo_rst_cnt <= 'd0;end
endSPI_DRV	SPI_DRV_inst(.sys_rstn(sys_rst_n),.sys_clk_100m(sys_clk),.spi_mode(2'b11),.spi_tvalid(spi_tvalid),.spi_tdata(spi_tdata),.spi_rate('d20),.spi_rd_num('d1),.DUT_SPI_WR_BIT_reg(8'h04),.spi_tready(),.dut_data_out(adc_rec_reg_data),.dut_data_out_en(adc_rec_reg_data_en),.spi_fifo_recv_en('d1),.spi_rd_busy(),.spi_sck(ADC_SCLK_ii),.spi_cs(ADC_CS_ii),.spi_mosi(ADC_SDI),.spi_miso(ADC_DATA[7])	
);fifo_adc_sample_data	fifo_adc_sample_data_inst(.s_aclk(sys_clk),.s_aresetn(sys_rst_n && fifo_rst_n),.s_axis_tvalid(s_axis_tvalid),.s_axis_tready(),.s_axis_tdata(s_axis_tdata),.s_axis_tlast(s_axis_tlast),.m_axis_tvalid(axis_adc_tvalid),.m_axis_tready('d1),.m_axis_tdata(axis_adc_data),.m_axis_tlast(axis_adc_tlast),.axis_data_count(axis_data_count));/* testreg[31:0] cnt_tx;
reg[31:0] delay;assign rx_data_length = adc_frame_length;always @(posedge sys_clk or negedge sys_rst_n) beginif(sys_rst_n == 'd0) begin	axis_adc_data <= 'd0;axis_adc_tvalid <= 'd0;axis_adc_tlast <= 'd0;cnt_tx <= 'd0;delay <= 'd0;endelse if(delay <= 'd2000)begindelay <= delay + 'd1;endelse if(cnt_tx == adc_frame_length - 'd1)beginaxis_adc_data <= axis_adc_data + 'd1;axis_adc_tvalid <= 'd1;axis_adc_tlast <= 'd1;cnt_tx <= cnt_tx + 'd1;		endelse if(cnt_tx < adc_frame_length - 'd1)beginaxis_adc_data <= axis_adc_data + 'd1;axis_adc_tvalid <= 'd1;axis_adc_tlast <= 'd0;cnt_tx <= cnt_tx + 'd1;		end///else if(cnt_tx <= 'd20000)beginaxis_adc_data <= 'd0;axis_adc_tvalid <= 'd0;axis_adc_tlast <= 'd0;cnt_tx <= cnt_tx + 'd1;		endelse beginaxis_adc_data <= 'd0;axis_adc_tvalid <= 'd0;axis_adc_tlast <= 'd0;cnt_tx <= 'd0;end
end*/	endmodule

代码接口说明:

信号名说明
adc_frame_length采样数据打包成帧输出,这里设置帧内容长度
adc_tdata_reg寄存器地址+数据信息,如果是读只有读地址有效
adc_sample_rate_hADC循环采样周期高16位
adc_sample_rate_l                ADC循环采样周期低16位
adc_rec_reg_dataADC返回的寄存器值
adc_rec_reg_data_enADC返回的寄存器值使能位
adc_rw_setADC读、写、循环采样控制寄存器
adc_sample_rate_regclk速率控制
adc_sample_channel_en_reg通道使能寄存器控制,8通道可以做任意通道使能。

仿真

代码仿真结果如下:

首先是SPI写操作,放大效果如下:

该操作标识对寄存0x01写0x23值;

ADC采样波形如下:

         CONGVST为高电平期间触发芯片同步采集,此时BUSY会至高表示正在转换中,当BUSY拉低代表转换完成,输出SCLK时钟信号并开始同步采样。

如需要完整的驱动代码或者技术支持可以私聊我,谢谢。

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

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

相关文章

Mysql语句性能优化

SQL查询过程 查询缓存&#xff1a; 执行查询语句的时候&#xff0c;会先查询缓存&#xff08;MySQL 8.0 版本后移除&#xff0c;因为这个功能不太实用&#xff09;。分析器&#xff1a; 没有命中缓存的话&#xff0c;SQL 语句就会经过分析器&#xff0c;分析器说白了就是要先看…

算法之二分查找法和双指针

用二分查找法刷leetcode算法题目的时候&#xff0c;经常遇到视频看着理解很透彻&#xff0c;当上手写时一看就会&#xff0c;一写就废。二分查找法涉及边界条件很多&#xff0c;逻辑很简单&#xff0c;就是写不好。何时写 while(left<right)&#xff0c;while(left<right…

通过写文件方式写入 Hive 数据

通过写文件方式写入 Hive 数据 Hive最简单的写入数据方式就是通过Hive Jdbc写入Hive数据&#xff0c;但这并不是写入Hive最高效的方法。 Hive通过读取相关Hdfs的文件来获取数据信息&#xff0c;而通过直接写入Hdfs文件数据达到写入Hive数据的效果&#xff0c;这是目前最高效的…

nerfstudio半离线配置踩坑记录

安装torch2.1.2 with cuda11.8 由于清华镜像源&#xff08;包括阿里源和豆瓣源&#xff09;都没有torch2.1.2cu118的包&#xff0c;因此只能从pytorch官网下载。 服务器上直接通过下面pip的方式安装会由于网络原因中断&#xff0c;无奈只能在本地先把torch的包下载下来再上传到…

SAP与生产制造MPM系统集成案例

一、需求介绍 某公司为保证企业内部生产管理系统的多项基础数据的同步更新&#xff0c;确保各模块间信息的一致性和准确性&#xff0c;对后续的生产计划和物料管理打下基础&#xff0c;该公司将MPM系统和SAP系统经过SAP PO中间件集成平台进行了集成。MPM全称为Manufacturing…

blender--二维平面图标变为三维网格

有时候我们希望把一些二维图片能变成三维网格&#xff0c;本案例我们就针对这一场景进行实现。 首先我们可以先去找一张需要的图片(注意&#xff0c;本例需要图片是svg格式)&#xff0c;我们可以在阿里巴巴矢量图标库等平台进行搜索&#xff0c;如图所示&#xff0c;找到需要的…

diffusion model(扩散模型)DDPM解析

DDPM 前向阶段 重复 2-5 步骤 x 0 ∼ q ( x 0 ) \mathbf{x}_0\sim q(\mathbf{x}_0) x0​∼q(x0​)从数据集中采样一张图片 t ∼ U n i f o r m ( { 1 , … , T } ) t\sim\mathrm{Uniform}(\{1,\ldots,T\}) t∼Uniform({1,…,T})&#xff0c;从 1~T 中随机挑选一个时间步 t ϵ …

三种tcp并发服务器实现程序

都需先进行tcp连接 1、多进程并发 2、多线程并发 3、IO多路复用并发 &#xff08;1&#xff09;select &#xff08;2&#xff09;epoll

SAP ERP与长城汽车EDI业务集成案例(SAP CPI平台)

一、项目背景 某智能座舱公司是国内领先的智能座舱领域科技公司&#xff0c;致力于成为智能网联行业变革的领导者和推动者&#xff0c;聚焦整车域控制器产品、智能网联软件产品和运营服务产品&#xff1b; 已建成首条先进的数智化域控制器生产线&#xff0c;为客户提供最优…

大刀阔斧改革之后,阅文距离“东方迪士尼”更近了吗?

当前&#xff0c;网文IP的确是“富矿”。中国社会科学院文学研究所发布的《2023中国网络文学发展研究报告》显示&#xff0c;截至2023年底&#xff0c;网络文学IP市场规模2605亿元&#xff0c;同比增长近百亿元。 近日&#xff0c;网文产业中的头部企业阅文集团也披露数据称&a…

Android U WMShell动画调用堆栈

本文主要简单介绍WMShell动画调用堆栈 代码环境&#xff1a;repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r7 Systemserver侧 TAG: at com.android.server.wm.Transition.onTransactionReady(Transition.java:1575) TA…

爆改YOLOv8|利用分层特征融合策略MSBlock改进yolov8,暴力涨点

1&#xff0c;本文介绍 MSBlock 是一种分层特征融合策略&#xff0c;用于改进卷积神经网络中的特征融合效果。它通过分层次地融合不同尺度的特征图来提高网络的表达能力和性能。MSBlock 采用多尺度特征融合的方法&#xff0c;确保网络能够有效地捕捉不同层次和尺度的信息&…

Neo4j导入csv数据,并创建节点

Neo4j 是一种图数据库&#xff0c;特别适合管理和分析复杂的关系数据。 数据来源&#xff1a;http://openkg.cn/ 导入到 Neo4j 的合适场景&#xff1a; 需要在物种分类中查找层级关系&#xff08;如物种的科、属等&#xff09;。 需要进行关系查询和图结构的分析。 想在分类树…

【Axure高保真原型】输入框控制多选下拉列表选项

今天和大家分享输入框控制多选下拉列表选项选项的原型模板&#xff0c;效果包括&#xff1a; 点击下拉框可以弹出选项列表&#xff0c;点击可以切换选中或取消选中 根据选中项在外框出自动生成标签&#xff0c;可以自适应调整高度 下拉列表的选项由左侧多行输入框里的内容控制…

数据结构—— 再探二叉树

1. TOP-K问题 TOP-K问题&#xff1a;求数据结合中前K个最大或者最小的数据 比如&#xff1a;专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等 思路&#xff1a; 1. 用数据集合中前K个数据来建堆&#xff1a; …

WEB服务器-Nginx源码安装及相关配置

一、web服务的常用种类 Apache HTTP Server 简介&#xff1a;Apache是一款广泛使用的Web服务器软件&#xff0c;支持多种操作系统&#xff0c;包括Linux。​​​​​​​特点&#xff1a; 支持多个虚拟主机。 模块化架构&#xff0c;可以根据需要加载不同的模块。 强大的安全…

多态(虚构的整体,具体的个体)(多态的基本概念/多态的原理剖析/纯虚函数和抽象类/虚析构和纯虚析构)

多态的基本概念 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; // 多态的基本概念 // 多态分为静态多态和动态多态 // 静态多态&#xff1a; 函数重载还运算符重载属于静态多态&#xff0c;服用函数名 // 动态多态&#xff1a; 派生派和虚函…

VUE使用websocket

在之前搭建好的项目的基础上新版security demo&#xff08;二&#xff09;前端-CSDN博客 目录 一、代码改造 1、后端改造 2、VUE使用websocket 3、测试 二、按用户推送 1、完整代码如下 1.1、前端 1.2、后端&#xff1a; 2、测试 一、代码改造 1、后端改造 &#x…

逆波兰表达式

简介 介绍逆波兰表达式之前&#xff0c;先介绍一下运算种类。 中缀运算与后缀运算 中缀运算是一种常用的算术和逻辑公式表示方法&#xff0c;其中操作符位于两个运算数之间。例如&#xff0c;在表达式 “3 2” 中&#xff0c;加号&#xff08;&#xff09;是操作符&#xf…

算法设计:实验一分治与递归

【实验目的】 深入理解分治法的算法思想&#xff0c;应用分治法解决实际的算法问题。 【实验内容与要求】 设有n2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表&#xff1a; 1.每个选手必须与其他n-1个选手各赛一次&#xff1b;2.每个选手一天只能赛一…