FPGA实现SRIO高速接口与DSP交互,FPGA+DSP异构方案,提供3套工程源码和技术支持

目录

  • 1、前言:SRIO在FPGA+DSP架构中的作用
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
    • 我这里已有的FPGA+DSP异构方案
    • 我这里已有的 GT 高速接口解决方案
  • 3、工程详细设计方案
    • 工程设计原理框图
    • FPGA端工程源码
    • FPGA端SRIO从设备(Target)
    • FPGA端SRIO请求响应事务模块
    • DSP端工程
  • 4、工程源码1详解:FPGA逻辑工程
  • 5、工程源码2详解:DSP裸机工程
  • 6、工程源码3详解:DSP RTOS系统工程
  • 7、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 8、上板调试验证
    • 准备工作
    • 程序下载bit
    • DSP裸机工程测试
    • DSP RTOS系统工程测试
  • 9、工程代码获取

FPGA实现SRIO高速接口与DSP交互,FPGA+DSP异构方案,提供3套工程源码和技术支持

1、前言:SRIO在FPGA+DSP架构中的作用

SRIO简介:

RapidIO 是由 Motorola 和 Mercury 等公司率先倡导的一种高性能、 低引脚数,基于数据包交换的互连体系结构,是为满足高性能嵌入式系统需求而设计的一种开放式互连技术标准;SRIO 包含三层结构协议,即物理层、传输层、逻辑层,SRIO体系结构如下:
在这里插入图片描述
逻辑层:定义包的类型、大小、物理地址、传输协议等必要配置信息。
传输层:定义包交换、路由和寻址规则,以确保信息在系统内正确传输。
物理层:包含设备级接口信息,如电气特性、错误管理数据和基本流量控制数据等信息。

SRIO收发逻辑框图如下:
在这里插入图片描述
SRIO(Serial RapidIO)在FPGA+DSP异构架构中扮演着高速数据通道与系统互连核心的角色,其作用与优势主要体现在以下方面:

SRIO的核心作用
1、高速数据通道
实时数据传输:FPGA负责前端数据采集(如雷达回波、图像信号),通过SRIO将原始数据直接传输至DSP处理,速率可达 8-10 Gbps(实测效率>80%理论值)。
低延迟交互:点对点传输延迟仅微秒级,满足实时处理需求(如电机控制、雷达成像)。
2、直接内存访问(DMA)
DSP可通过SRIO直接读写FPGA的片上存储或外挂DDR,无需CPU干预。例如:
SWRITE事务实现零开销突发传输,效率达95%以上。
FPGA作为协处理器时,DSP直接获取处理结果(如滤波后图像)。
3、可靠消息通知
门铃(Doorbell)中断:DSP向FPGA发送16位轻量级消息,触发实时响应(如任务启动/停止)。
中断延迟<1μs,优于传统GPIO。
4、系统级扩展性
通过SRIO交换器连接多DSP/FPGA,构建分布式计算网络(如4个DSP+FPGA的基带处理卡)。
支持动态路由与多播传输,适应复杂拓扑。

SRIO的技术优势
1、高带宽与低延迟
在这里插入图片描述
2、硬件级可靠性
错误检测与重传:内置CRC校验与链路层重传机制,误码率<10⁻¹²。
路径冗余:支持多路径备份,单点故障不影响系统运行(关键用于航天电子)。
3、灵活的协议支持
传输模式:
Direct I/O:直接存储映射(NWRITE/NREAD),适合大数据块传输。
Message Passing:信箱机制,支持复杂命令交互(如FPGA向DSP发送状态报告)。
物理层适配:支持1x/2x/4x链路聚合,兼容背板(VPX)、光模块等连接方式。
4、低功耗设计
相比PCIe,SRIO功耗低30-40%(实测1.5W@5Gbps)。
静态功耗<0.1W,适合电池供电设备(如无人机雷达)。

典型应用场景
1、实时图像处理系统
在这里插入图片描述
FPGA完成像素校正,DSP执行AI识别,传输延迟<10ms
2、无线通信基带
FPGA处理ADC采样数据,经SRIO分发至多DSP核(如LDPC解码)。
支持5G Massive MIMO的μs级波束成型。
3、高可靠性系统
航天器中的FPGA+DSP通过SRIO互连,抗辐射设计(如三模冗余)确保太空环境下的数据传输

总结
SRIO在FPGA+DSP架构中的核心价值是:
✅ 突破总线瓶颈:提供>8Gbps的稳定带宽,替代共享总线。
✅ 实现异构协同:FPGA并行预处理 + DSP复杂算法,通过SRIO无缝衔接。
✅ 构建高可靠网络:冗余链路与硬件校验机制,满足军工/航天级需求

工程概述

本文详细描述了Xilinx的7系列FPGA实现FPGA实现SRIO高速接口与DSP交互;以下从FPGA工程和DSP工程两个方向描述整个设计:

FPGA工程

FPGA工程调用Xilinx官方的SRIO IP核实现SRIO协议的物理层、传输层、逻辑层,作为SRIO的从设备(target),SRIO IP核留出了用户逻辑接口,用户只需要写自己的逻辑电路与之对接即可完成SRIO通信;本设计只做简单的数据缓存和读写,所以用户逻辑为纯verilog代码实现的请求响应事务模块,模块例化了两个RAMB36SDP的BRAM原语用户数据读写的缓存(4K Byte),为接收到的请求事务生成对应的响应事务,该模块参考了Xilinx官方SRIO IP核的仿真工程,根据请求-响应机制构造HELLO数据包,并根据读写地址操作BRAM以实现基于SRIO协议的数据收发架构;

DSP工程

DSP工程实现 DSP作为SRIO主设备(Initiator),通过SRIO总线与远程设备通信,进行高速数据传输测试。核心功能包括SRIO子系统初始化与链路建立、NWRITE/SWRITE写操作性能测试、NREAD读操作与数据完整性验证、传输速率实时统计与错误检测等,DSP工程分为裸机工程和RTOS系统工程,裸机工程不带操作系统,实时性更好,RTOS系统工程带轻量版RTOS操作系统,稳定性更好,测试结果通过串口打印观察;

针对市场主流需求,本博客提供3套工程源码,具体如下:
在这里插入图片描述
现对上述3套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为Xilinx公司的XC7K325T-2FFG676I;FPGA工程调用Xilinx官方的SRIO IP核实现SRIO协议的物理层、传输层、逻辑层,作为SRIO的从设备(target),SRIO IP核留出了用户逻辑接口,用户只需要写自己的逻辑电路与之对接即可完成SRIO通信;本设计只做简单的数据缓存和读写,所以用户逻辑为纯verilog代码实现的请求响应事务模块,模块例化了两个RAMB36SDP的BRAM原语用户数据读写的缓存(4K Byte),为接收到的请求事务生成对应的响应事务,该模块参考了Xilinx官方SRIO IP核的仿真工程,根据请求-响应机制构造HELLO数据包,并根据读写地址操作BRAM以实现基于SRIO协议的数据收发架构;

工程源码2

开发板DSP型号为TI公司的TMS320C6678;DSP工程实现 DSP作为SRIO主设备(Initiator),通过SRIO总线与远程设备通信,进行高速数据传输测试。核心功能包括SRIO子系统初始化与链路建立、NWRITE/SWRITE写操作性能测试、NREAD读操作与数据完整性验证、传输速率实时统计与错误检测等,本套工程为CCS 裸机工程,不带操作系统,实时性更好,测试结果通过串口打印观察;

工程源码3

开发板DSP型号为TI公司的TMS320C6678;DSP工程实现 DSP作为SRIO主设备(Initiator),通过SRIO总线与远程设备通信,进行高速数据传输测试。核心功能包括SRIO子系统初始化与链路建立、NWRITE/SWRITE写操作性能测试、NREAD读操作与数据完整性验证、传输速率实时统计与错误检测等,本套工程为CCS RTOS工程,带RTOS操作系统,稳定性更好,测试结果通过串口打印观察;

本文详细描述了FPGA实现SRIO高速接口与DSP交互的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

我这里已有的FPGA+DSP异构方案

目前我这里有大量FPGA+DSP异构方案的工程源码,包括EMIF、SRIO、PCIE等等,对FPGA+DSP异构方案有需求的兄弟可以去看看:
直接点击前往

我这里已有的 GT 高速接口解决方案

我的主页有FPGA GT 高速接口专栏,该专栏有 GTP 、 GTX 、 GTH 、 GTY 等GT 资源的视频传输例程和PCIE传输例程,其中 GTP基于A7系列FPGA开发板搭建,GTX基于K7或者ZYNQ系列FPGA开发板搭建,GTH基于KU或者V7系列FPGA开发板搭建,GTY基于KU+系列FPGA开发板搭建;以下是专栏地址:
点击直接前往

3、工程详细设计方案

工程设计原理框图

工程设计原理框图如下:
在这里插入图片描述

FPGA端工程源码

FPGA端工程源码架构如下:
在这里插入图片描述

FPGA端SRIO从设备(Target)

FPGA工程调用Xilinx官方的SRIO IP核实现SRIO协议的物理层、传输层、逻辑层,作为SRIO的从设备(target),SRIO IP核留出了用户逻辑接口,用户只需要写自己的逻辑电路与之对接即可完成SRIO通信;本设计使用Xilinx官方的Serial Rapidlo Gen2 IP核,基础配置如下:
在这里插入图片描述
SRIO配置为5Gbps×4 Lane,对应的GT差分时钟需为125M;工程代码中通过配置cdcm61002时钟芯片输出125M连接至GTX高速收发器BANK;SRIO设计请参考Xilinx官方数据手册《pg007_srio_gen2》;I/O 端口配置使用 HELLO 格式包,其他参数保持默认值即可;

FPGA端SRIO请求响应事务模块

本设计只做简单的数据缓存和读写,所以用户逻辑为纯verilog代码实现的请求响应事务模块,模块例化了两个RAMB36SDP的BRAM原语用户数据读写的缓存(4K Byte),为接收到的请求事务生成对应的响应事务,该模块参考了Xilinx官方SRIO IP核的仿真工程,根据请求-响应机制构造HELLO数据包,并根据读写地址操作BRAM以实现基于SRIO协议的数据收发架构;
当 Initiator 发过来的写请求的目标地址的第 31 位到 16 位为 0x1087(address[31:16]=8’h1087),数据将会存储至 BRAM;其他所有无需返回响应的写请求将会被丢弃,该模块不会为 SWRITE 返回响应。当 Initiator 发过来的读请求的目标地址的第 31 位到 16 位为 0x1087(address[31:16]=8’h1087),数据将会从实际地址读出;
定义 HELLO 格式包头 FTYPE 字段与 TTYPE 字段的值,这两个字段的值与事务的类型有关。如下:
在这里插入图片描述
将 Initiator 发送的请求 treq_tdata 中的数据,按照 HELLO 格式的定义把对应的关键字段分离出来,如下:
在这里插入图片描述
生成有响应事务的标志,可看到没有 SWRITE 的标志,如下:
在这里插入图片描述
配置 SRIO Initiator 发送的读写事务基地址为 0x10870000;当地址字段的第 31 位到第 16 位为 0x1087,写事务的数据将会存储至 BRAM,如下:
在这里插入图片描述
生成数据存储的写地址信号 data_store_waddr 和读地址信号 data_store_raddr,该模块的数据位宽为 64bit,其中地址取了 current_addr[11:3],而不是从第 0bit 开始取,即一次从 BRAM 读写 8Byte 大小的数据,一个地址对应一个字节,所以每读写一
次地址需递增(加 8),如下:
在这里插入图片描述
例化一个 RAMB36SDP,用于存储数据。DATA_WIDTH 为 64bit,ADDR 为 9bit,总容量为 2^9 x (64 / 8) = 512 x 8Byte = 4KByte,如下:
在这里插入图片描述

DSP端工程

DSP工程实现 DSP作为SRIO主设备(Initiator),通过SRIO总线与远程设备通信,进行高速数据传输测试。核心功能包括SRIO子系统初始化与链路建立、NWRITE/SWRITE写操作性能测试、NREAD读操作与数据完整性验证、传输速率实时统计与错误检测等,DSP工程分为裸机工程和RTOS系统工程,裸机工程不带操作系统,实时性更好,RTOS系统工程带轻量版RTOS操作系统,稳定性更好,测试结果通过串口打印观察;

代码功能概述
此代码实现 DSP作为SRIO主设备(Initiator),通过Serial RapidIO(SRIO)总线与远程设备通信,进行高速数据传输测试。核心功能包括:
1、SRIO子系统初始化与链路建立
2、NWRITE/SWRITE写操作性能测试
3、NREAD读操作与数据完整性验证
4、传输速率实时统计与错误检测
DSP端工程流程图如下:
在这里插入图片描述
DSP端SRIO读写核心细节
1、SRIO物理层配置(srio_device_init)
关键配置参数如下:

// SERDES PLL配置(250MHz参考时钟→2.5GHz)
CSL_BootCfgSetSRIOSERDESConfigPLL(0x51);  // MPY=10x
// 接收器配置(5Gbps速率)
CSL_BootCfgSetSRIOSERDESRxConfig(i, 0x00468495);  // EQ/CDR/TERM使能
// 发送器配置(5Gbps速率)
CSL_BootCfgSetSRIOSERDESTxConfig(i, 0x001C8F95);  // TAP权重/输出摆幅

链路建立流程如下:

while(!CSL_SRIO_IsPortOk(hSrio, 0)) { // 轮询端口状态cpu_delaycycles(1000000);         // 延迟1ms
}

2、数据传输机制(srio_test)
NWRITE写操作配置如下:

tparams.ftype = Srio_Ftype_WRITE;     // 快速非确认写
tparams.ttype = Srio_Ttype_Write_NWRITE;
tparams.bytecount = 4096;             // 4KB传输
tparams.rapidIOLSB = 0x10870000;      // 目标设备地址
tparams.dspAddress = w_buff_global;   // 源数据地址(DSP全局地址)

SWRITE写操作配置如下:

tparams.ftype = Srio_Ftype_SWRITE;    // 流式写(低开销)
tparams.ttype = Srio_Ttype_Write_SWRITE;

NREAD读操作配置如下:

tparams.ftype = Srio_Ftype_REQUEST;   // 请求类型
tparams.ttype = Srio_Ttype_Request_NREAD; 
tparams.rapidIOLSB = 0x10870000;      // 源数据地址(远程)
tparams.dspAddress = r_buff_global;   // 目标地址(DSP)

传输控制流程
传输控制流程如下:
在这里插入图片描述
性能计算原理

transStart = _itoll(TSCH, TSCL); // 记录开始时间戳
// ...传输执行...
transCost = _itoll(TSCH, TSCL) - transStart; // 计算周期数// 计算带宽(Gbps)
w_rate = (transfer_size * 8) * (main_pll_freq / transCost) / 1e9; 

在这里插入图片描述
关键代码解析
1、地址转换机制

w_buff_global = (uint8_t*)Convert_CoreLocal2GlobalAddr((uint32_t)w_buff);

2、数据验证方法

for(i=0; i<transfer_size; i++) {if(w_buff_global[i] != r_buff_global[i]) {err_count++;// 记录首个错误位置}
}

测试数据生成:基于种子随机数(保证可重复性)

srand(i); 
w_buff[i] = rand() % 0xFF;

3、传输状态监控

CSL_SRIO_GetLSUCompletionCode(hSrio, LSU_Number, transactionID, &uiCompletionCode, &context);

在这里插入图片描述
DSP端性能测试结果
典型输出示例如下:

=== loop times: 0 | err_count: 0 | 
trans_size: 4096 Byte | NWRITE write times: 1200 ns(3.28 Gbps) | 
NREAD read times: 1500 ns(2.73 Gbps)SRIO test 8 cycles, errcnt: 0, total size 32 KB, 
write type: NWRITE, avg write rate: 3.20 Gbps, 
read type: NREAD, avg read rate: 2.70 Gbps

性能分析:
NWRITE优势:无确认开销,实测带宽达理论值(5Gbps)的 64%
NREAD瓶颈:需等待远程响应,带宽利用率降至 54%

核心价值总结
此代码实现的价值在于:
1、验证SRIO物理层:通过SERDES配置确保5Gbps稳定链路
2、量化传输性能:精确测量NWRITE/SWRITE/NREAD的实时带宽
3、构建可靠基础:错误检测机制满足军工/航天级数据传输要求
4、提供优化基准:为异构系统(FPGA+DSP)提供高速互联参考实现

通过该测试框架,可快速评估SRIO在特定硬件平台上的极限性能,为实时信号处理、无线通信基带等场景提供关键互联技术支持。

4、工程源码1详解:FPGA逻辑工程

开发板FPGA型号:Xilinx–XC7K325T-2FFG676I;
FPGA开发环境:Vivado2019.1;
输入输出接口:SRIO高速接口;
实现功能:FPGA为SRIO从设备(Target);
工程作用:此工程目的是让读者掌握FPGA实现SRIO高速接口与DSP交互的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程源码2详解:DSP裸机工程

开发板DSP型号:TI–TMS320C6678;
FPGA开发环境:CCS5.5;
输入输出接口:SRIO高速接口;
实现功能:DSP为SRIO主设备(Initiator);
DSP工程操作系统:裸机,无操作系统;
工程作用:此工程目的是让读者掌握FPGA实现SRIO高速接口与DSP交互的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
DSP裸机工程源码架构如下:
在这里插入图片描述

6、工程源码3详解:DSP RTOS系统工程

开发板DSP型号:TI–TMS320C6678;
FPGA开发环境:CCS5.5;
输入输出接口:SRIO高速接口;
实现功能:DSP为SRIO主设备(Initiator);
DSP工程操作系统:RTOS操作系统;
工程作用:此工程目的是让读者掌握FPGA实现SRIO高速接口与DSP交互的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
DSP裸机工程源码架构如下:
在这里插入图片描述

7、工程移植说明

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软核;

8、上板调试验证

准备工作

需要准备的器材如下:
FPGA+DSP异构开发板;
测试用PC电脑;
串口线;

程序下载bit

步骤如下:(顺序一定要对)
1、先下载FPGA程序
2、再下载DSP程序

DSP裸机工程测试

DSP裸机工程测试结果如下:
在这里插入图片描述
NWRITE + NREAD 模式:NWRITE=12.50Gbps NREAD=7.74Gbps
SWRITE + NREAD 模式:SWRITE=12.49Gbps NREAD=7.74G

DSP RTOS系统工程测试

DSP RTOS系统工程测试结果如下:
在这里插入图片描述
NWRITE + NREAD 模式:NWRITE=12.53Gbps NREAD=7.73Gbps
SWRITE + NREAD 模式:SWRITE=12.55Gbps NREAD=7.73Gbps

打印信息解析
loop time: N :当前处于第 N 次循环读写;
err_count : 读写校验误码率;
trans_size : 读写大小;
NWRITE、SWRITE、”NREAD : 表示使用 NWRITE、SWRITE 等方式传输;
write_time、read_times : 读写耗时,并根据 trans_size 计算读写速率;
SRIO test 8 cycles, errcnt: 0, total size 32 KB,
write type: NWRITE, avg write rate: xx.xx Gbps,
read type: NREAD, avg read rate: xx.xx Gbps
表示共进行了 8 次循环读写,总读写大小为32KByte,码率为 0,并打印在 NWRITE + NREAD模式 8 次循环的平均速率;

9、工程代码获取

工程代码如下:
在这里插入图片描述

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

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

相关文章

记一次导出pdf表单引发的问题

需求&#xff1a;点击按钮&#xff0c;将相关内容生成pdf下载下来问题1&#xff1a;之前项目封装好的下载文件方法不携带token 我尝试新写了一个方法&#xff0c;携带token问题2&#xff1a;此时出现了跨域问题 我分别尝试在controller类上和方法上加CrossOrigin(origins “*”…

AI-调查研究-39-多模态大模型量化 微调与量化如何协同最大化性能与效率?

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; AI炼丹日志-30-新发布【1T 万亿】参数量大模型&#xff01;Kim…

基于Dify构建本地化知识库智能体:从0到1的实践指南

技术选型与方案设计 在企业级AI应用落地中&#xff0c;本地化知识库智能体已成为提升业务效率的核心工具。Dify作为低代码AI应用开发平台&#xff0c;结合RAG&#xff08;检索增强生成&#xff09;技术&#xff0c;可快速构建私有化智能问答系统。以下是关键技术选型与架构设计…

C++与C#实战:FFmpeg屏幕录制开发指南

基于FFmpeg使用C#和C++开发 以下是一些基于FFmpeg使用C#和C++开发的简单屏幕录制软件示例,涵盖不同平台和功能需求。这些示例可作为学习或项目开发的起点。 使用C++开发FFmpeg屏幕录制 基础屏幕录制(Windows) #include <libavcodec/avcodec.h> #include <libav…

「源力觉醒 创作者计划」_DeepseekVS文心一言代码简单测试

一起来轻松玩转文心大模型吧一文心大模型免费下载地址&#xff1a;https://ai.gitcode.com/theme/1939325484087291906小插曲发现自己的上一篇文章的被盗了&#xff0c;而且是在deepseek上检索资料发现的&#xff0c;最让我破防的点在于&#xff0c;它完完全全搬运我的文章&…

服务器数据恢复—RAID上层部署的oracle数据库数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某公司一台服务器上有一组由24块FC硬盘组建的raid。 服务器出现故障&#xff0c;无法正常工作。 经过初步检测&#xff0c;管理员发现导致服务器故障的原因是raid中有两块硬盘掉线&#xff0c;导致卷无法挂载。服务器数据恢复过程&…

链表迭代翻转|二分|状态压缩bfs|数学

&#x1f36d;lc2039.bfs空闲时间把网络抽象成图&#xff0c;用 BFS 算出 0 号节点到各节点的最短距离 d 。结合每个节点发消息的间隔 patience[v] &#xff0c;先算消息往返需要 2d 秒。再看 2d 和 patience[v] 的关系若 2d 能被 patience[v] 整除&#xff0c;最后一条消息已发…

Vulnhub 02-Breakout靶机渗透攻略详解

一、下载靶机 下载地址&#xff1a;https://download.vulnhub.com/empire/02-Breakout.zip 下载好后使用VM打开&#xff0c;将网络配置模式改为net&#xff0c;防止桥接其他主机干扰&#xff08;桥接Mac地址也可确定主机&#xff09;。 二、发现主机 使用nmap扫描没有相应的…

数据结构(5)单链表算法题(中)

一、合并两个有序链表 1、题目描述 https://leetcode.cn/problems/merge-two-sorted-lists 2、算法分析 这道题和之前的合并两个有序数组的思路很像&#xff0c;创建空链表即可&#xff0c;可以很轻松地写出如下代码。 /*** Definition for singly-linked list.* struct L…

园区网络搭建实验

跟着B站上的老师&#xff0c;用华为ensp模拟搭建了一个园区网络&#xff0c;感觉挺好玩的虽然老师说这个很简单&#xff0c;但还是比我公司里的拓扑复杂LSW3配置上行端口3/4配置为串口&#xff0c;下行端口1/2为access口用于连接终端[Huawei]vlan batch 10 20 --创建vlan [Hua…

【tips】小程序css ➕号样式

上传的时候一般页面显示的是加号。不用图片可以用样式实现&#xff1b;wxss&#xff1a; /* 加号 */ .plus-box {width: 91rpx;height: 91rpx;border-radius: 6rpx;background: rgba(204, 204, 204, 1);position: relative; /* 用于定位加号 */ }/* 水平线条 */ .plus-box::bef…

MCU中的GPIO(通用输入/输出)是什么?

MCU中的GPIO(通用输入/输出)是什么? GPIO(General-Purpose Input/Output,通用输入/输出)是微控制器(MCU)或嵌入式系统中的一种可编程数字接口,用于与外部设备进行简单的高低电平信号交互。它是最基础、最常用的外设之一,广泛应用于按键检测、LED控制、传感器通信等场…

echarts 之 datazoom Y轴缩放

如果想 y 轴也能够缩放&#xff0c;那么在 y 轴上也加上 dataZoom 组件const dataZoomY ref([{type: "slider",yAxisIndex: 0,startValue: 0,endValue: 9,filterMode: "empty",width: 10,height: "80%",showDataShadow: false,left: 5,},{type:…

(四)Python基础入门-核心数据结构

概览 列表操作&#xff08;增删改查/切片/推导式&#xff09;元组特性与不可变性字典操作&#xff08;键值对/嵌套字典&#xff09;集合运算&#xff08;交集/并集/差集&#xff09; Python的核心数据结构是编程的基石&#xff0c;本文将系统讲解列表、元组、字典和集合四大数…

FCN语义分割算法原理与实战

FCN语义分割算法原理与实战 本文若有舛误&#xff0c;尚祈诸君不吝斧正&#xff0c;感激不尽。 前提概要&#xff1a;所使用的材料来源 对应视频材料&#xff1a;FCN语义分割 虽然可能比较简单但是奠定了使用卷积神经网络做语义分割任务的基础。 语义分割&#xff1a;输入图片…

堆的理论知识

1 引入1.1 普通二叉树不适合用数组存储的原因普通二叉树的结构是 “不规则” 的 —— 节点的左右孩子可能缺失&#xff0c;且缺失位置无规律。 若用数组存储&#xff08;按 “层次遍历顺序” 分配索引&#xff0c;即根节点放索引 0&#xff0c;根的左孩子放 1、右孩子放 2&…

【python实用小脚本-161】Python Json转Xml:告别手敲标签——一行命令把配置秒变可导入的XML

Python Json转Xml&#xff1a;告别手敲标签——一行命令把配置秒变可导入的XML 关键词&#xff1a;json转xml、零依赖脚本、自动生成标签、小白友好、跨平台故事开场&#xff1a;周五下午&#xff0c;老板又甩来“配置翻译”任务 17:55&#xff0c;你正准备关机&#xff0c;老板…

WisFile(文件整理工具) v1.2.19 免费版

下载&#xff1a;https://pan.quark.cn/s/db99b679229fWisFile是一款免费AI文件管理工具&#xff0c;可以在电脑本地运行。它专注于解决文件命名混乱、归类无序和手动整理耗时的问题。通过AI技术智能识别文件内容&#xff0c;支持批量重命名和智能分类归档功能&#xff0c;可自…

简历美容院:如何把“打杂经历“包装成“核心项目“?

简历美容院&#xff1a;如何把"打杂经历"包装成"核心项目"&#xff1f; 大家好&#xff0c;我是程序员小白条&#xff0c;今天来研究下简历包装的事&#xff0c;小白可以按我的包装流程走&#xff0c;可以分步骤进行包装&#xff0c;具体怎么进行可以看正文…

零基础-动手学深度学习-7.7 稠密连接网络(DenseNet)

ResNet极大地改变了如何参数化深层网络中函数的观点。 稠密连接网络&#xff08;DenseNet&#xff09;在某种程度上是ResNet的逻辑扩展。让我们先从数学上了解一下。 7.7.1. 从ResNet到DenseNet 7.7.2. 稠密块体 DenseNet使用了ResNet改良版的“批量规范化、激活和卷积”架构…