当前位置: 首页 > news >正文

嵌入式硬件实战提升篇(二)PCB高速板设计 FPGA核心板带DDR3 PCB设计DDR全面解析

引言:设计一款高速板,供读者学习,FPGA核心板,带一颗DDR3内存,FPGA型号:XC6SLX16-2FTG256C。
随着嵌入式硬件技术的快速发展,高速板设计逐渐成为嵌入式系统设计中的核心技术之一。高速板的设计要求技术人员具备信号完整性、电源完整性及高频布线的综合能力,特别是在FPGA与高速存储器(如DDR3)的结合应用中,更是对硬件设计提出了严苛的挑战。
本项目旨在通过设计一款基于FPGA XC6SLX16-2FTG256C核心板的高速板,带一颗DDR3内存模块,采用项目导向的学习方式,结合实际绘制和理论分析,全面解析高速板的设计方法和DDR3的PCB设计要点。通过本项目,读者将从基础理论到实践操作,逐步构建起一套适合实际开发的高速PCB设计知识体系,为后续复杂嵌入式硬件开发奠定坚实基础。

通过项目导向性进行学习最切合实际的高速板的绘制和理论结合实践的知识体系构建!

目录

一、何为高速板?

1.1. 高速板的核心特点

1.2. 高速板与传统PCB的区别

1.3. 高速板的设计关键点

1.4. 高速板的典型应用

1.5. 本项目的高速板设计

二、不同DDR详解

2.1.不同DDR管脚介绍

2.2.不同DDR封装结构

2.3.DDR实例详解

三、PCB设计不同DDR思路要点

3.1.DDR1和DDR2 PCB设计要点

3.1.1.DDR布线要求

 3.1.2.DDR2的三类

 3.1.3.Class规则设置

3.1.4.等长设计

3.1.5.其他要求

3.2.DDR3和DDR4 PCB设计要点

3.2.1.DDR信号线分组

3.2.2.DDR时序同步

3.3.DDR PCB设计共同点

3.4.DDR PCB设计不同点

3.5.SDRAM,DDR1,DDR2,DDR3,DDR4传输速率和供电电压的汇总

四、原理图设计

五、PCB设计

六、3D预览图


一、何为高速板?

高速板是指在电路板设计中,能够支持高频率、高速率信号传输的PCB(Printed Circuit Board)。随着电子技术的快速发展,嵌入式系统、通信设备、计算机等领域对数据传输速率的要求越来越高,传统PCB设计无法满足信号完整性和高速传输的需求,高速板设计应运而生。

1.1. 高速板的核心特点

高速板的设计具有以下几个显著特点:

  • 高速信号传输:支持百兆、千兆甚至更高传输速率的信号,典型应用包括DDR3/DDR4内存、FPGA、PCIe、USB 3.0 等高速接口。
  • 严格的信号完整性要求:为保证高速信号传输的稳定性和可靠性,需要控制信号的阻抗、时序和串扰,避免信号畸变。
  • 多层结构:高速板通常采用多层结构(6层或以上),提供完整的参考平面(电源和地),以降低电磁干扰(EMI)并提高信号质量。

1.2. 高速板与传统PCB的区别

高速板和传统PCB设计的主要区别在于对高频信号传输的要求和处理方式:

  • 信号频率:传统PCB主要处理低频信号(如模拟电路或低速数字电路),而高速板需要处理频率达到数百MHz或GHz的高速信号。
  • 设计复杂度:高速板需要考虑串扰、反射、延迟、时序等因素,设计难度远高于传统PCB。
  • 仿真验证:在高速板设计中,仿真验证工具(如SI仿真、PI仿真)是不可或缺的一环,用于验证设计是否满足信号完整性和电源完整性要求。

1.3. 高速板的设计关键点

设计高速板需要掌握以下关键技术:

  • 阻抗匹配:控制传输线的特性阻抗,使其与源端或负载端阻抗一致,避免信号反射。
  • 信号完整性:关注高速信号的时序、抖动、串扰等问题,优化信号传输路径。
  • 电源完整性:确保电源分布网络(PDN)低噪声,避免对高速信号产生干扰。
  • 差分对布线:高速差分信号(如DDR3的时钟线)需按差分规则布线,保持差分对的长度和间距一致。

1.4. 高速板的典型应用

高速板广泛应用于现代电子系统中,尤其是在以下场景中更为常见:

  • 嵌入式系统中的处理器核心板设计(如带DDR3/DDR4的FPGA或ARM核心板)。
  • 高速通信设备,如路由器、交换机。
  • 消费电子产品,如智能手机、平板电脑、笔记本电脑。
  • 工业控制系统和医疗设备中的高速采集与处理模块。

1.5. 本项目的高速板设计

本文以设计一款基于FPGA(型号:XC6SLX16-2FTG256C)的核心板为案例,重点解析DDR3在高速板中的设计实现。读者将通过项目实践掌握高速板的设计方法和DDR3的关键布线要点,为后续深入学习打下坚实基础。

二、不同DDR详解

2.1.不同DDR管脚介绍

以下是DDR1、DDR2、DDR3、DDR4、DDR5 各代内存的管脚定义概要表,涵盖主要管脚及其功能的对比。

管脚名称DDR1DDR2DDR3DDR4DDR5
VDD2.5V1.8V1.5V1.2V1.1V
VDDQ同VDD同VDD同VDD同VDD独立,1.1V
时钟 (CLK)差分信号,单方向差分信号,单方向差分信号,单方向差分信号,单方向差分信号,单方向
地址 (Annn)A0:120:120:12, 包括BA信号A0:130:130:13, 包括BA信号A0:150:150:15, 包括BA信号A0:160:160:16, 包括BG信号A0:170:170:17, 包括BG信号
命令 (CMD)RAS, CAS, WE, CSRAS, CAS, WE, CSRAS, CAS, WE, CSRAS, CAS, WE, CSRAS, CAS, WE, CS
数据 (DQ)单端,双向单端,双向单端,双向单端,双向单端,双向
数据掩码 (DM)可选可选可选替换为DBI替换为DBI
数据时钟 (DQS)单端,同步差分,同步差分,同步差分,同步差分,同步
芯片选择 (CS)单路多路多路多路多路
行位选通 (RAS)行选择行选择行选择行选择行选择
列位选通 (CAS)列选择列选择列选择列选择列选择
银行选择 (BA)BA0:20:20:2BA0:20:20:2BA0:20:20:2BG0:10:10:1, BA0:10:10:1BG0:10:10:1, BA0:10:10:1
复位 (RESET)可选必需必需
校验信号 (PAR)支持ECC支持ECC支持ECC
阻抗匹配 (ZQ)支持支持支持支持
温度传感器 (TS)可选可选支持支持
能效管理 (PMIC)集成

说明:

  1. 时钟信号:DDR2起采用差分时钟信号,相比单端信号抗干扰能力更强。
  2. 数据总线宽度:通常为64位,ECC内存添加8位校验。
  3. 电压变化:随代数提升,工作电压逐步下降,提高功耗效率。
  4. 地址/命令信号扩展:更高代数支持更多存储容量,因此地址位数增多,增加银行组信号 (BG)。
  5. DBI(Data Bus Inversion):从DDR4开始引入,用于数据线上的电平反转以降低功耗。
  6. PMIC(电源管理芯片):DDR5内存将PMIC集成到内存模块中,进一步优化供电和稳定性。

2.2.不同DDR封装结构

如下就是封装结构了,我们了解即可。

相关管脚介绍如下所示:

2.3.DDR实例详解

由于我们这次项目用的是DDR3,我们在此实际调研并运用,如下就是DDR3L SDRAM的数据手册图了。

引脚定义如下所示:

因此我们对于上述内容做总结,得到如下的表格,这里我也是精简了一下,读者最好还是回到手册去读取相关内容。

信号名称类型描述
A14:13], A\[12/BC#], A11, A10/AP, A\[9:0输入地址输入:提供行地址(激活命令),列地址和自动预充电位(A10)用于读/写命令。PRECHARGE命令中,A10用于指定单个或所有bank的预充电。A12/BC#用于动态切换突发模式 (BL8 或 BC4)。
BA2:02:02:0输入Bank地址输入:定义当前命令(ACTIVATE、READ、WRITE、PRECHARGE)作用的目标Bank,或定义加载模式寄存器的编号(MR0-MR3)。
CK, CK#输入差分时钟输入:用于采样控制信号和地址信号,DQS信号也以其为参考。
CKE输入时钟使能:控制内部电路的启用(高电平)和关闭(低电平)。在低电平时,可进入预充电省电模式、自刷新模式或激活省电模式。
CS#输入芯片选择:低电平启用命令解码,高电平屏蔽所有命令。用于多Rank系统中的Rank选择。
LDM输入数据屏蔽信号:用于写入数据时屏蔽低字节数据(高电平时屏蔽)。
UDM输入数据屏蔽信号:用于写入数据时屏蔽高字节数据(高电平时屏蔽)。
ODT输入芯片内终端:控制内部终端电阻启用(高电平)或禁用(低电平),作用于数据线和数据相关信号。
RAS#, CAS#, WE#输入命令输入:与CS#一起定义进入的命令(如激活、读取、写入、预充电等)。
RESET#输入复位:低电平有效的异步复位信号,复位输入参考VSS,提供设备复位功能。
DQ15:015:015:0双向数据输入/输出:双向数据总线,用于传输数据,分为高字节 (DQ15:815:815:8) 和低字节 (DQ7:07:07:0)。参考电压为VREFDQ。
LDQS, LDQS#I/O数据选通信号(低字节):读数据时与数据边缘对齐;写数据时与数据中心对齐。
UDQS, UDQS#I/O数据选通信号(高字节):读数据时与数据边缘对齐;写数据时与数据中心对齐。
VDD电源主电源:1.5V ± 0.075V。
VDDQ电源数据电源:1.5V ± 0.075V,独立设计以改善噪声抑制能力。
VREFCA电源控制、命令和地址信号的参考电压:需要在所有操作模式下维持。
VREFDQ电源数据信号的参考电压:需要在所有非自刷新模式下维持。
VSS电源地电源。
VSSQ电源数据信号地电源:独立设计以改善噪声抑制能力。
ZQ参考外部参考端:用于输出驱动校准,与外部240Ω电阻(RZQ)连接至VSSQ。
NC-无连接信号:这些引脚未连接至DRAM内部或外部。

结构如下所示:

三、PCB设计不同DDR思路要点

3.1.DDR1和DDR2 PCB设计要点

3.1.1.DDR布线要求

1.所有信号连线过孔数量都是两个,都是从顶层到底层,线宽都要一样,走线方向要一致,平行走线不得有交叉,弯线平滑处理,不得有直角,锐角,线距为线宽两倍。
2.要求等长差分走线的必须先布好,如时钟线。
3.以时钟线长度为基准,等长布其它信号线。
忽略电源,地网络

 3.1.2.DDR2的三类

1.差分时钟信号:CLKN.CLKP
2,数据线DO0-DO15,数据掩码信号DOMO,DOM1,数据选通信号DOS*_N,DOS*_P3,地址线/控制线:除数据,时钟外的其他信号,如A0A12,WE,CS,BA02,CKE等。

 3.1.3.Class规则设置

1.DATA L BUS:00-DO7.DOMO.DOS0 NDOS0_P
2.DATA H BUS:08-DO15.DOM1.DOS1 N.DOS1_P
3.ADDR BUS: 除数据线外的其他信号
4.CLK DIFF: CLK N,CLK P

3.1.4.等长设计

1,所有信号线参考差分时钟的长度作等长
2,DATA_L_BUS共11根走在同层,与差分时钟的长度误差25mil
3,DATA H BUS共11根走在同层,与差分时钟的长度误差25mil
4,ADDR BUS:与差分时钟的长度误差200~300mil


3.1.5.其他要求

1.特性阻抗: 单端 50欧,差分100欧
2.保证完整的参考平面
3,VREF电容要靠近相关的电源管脚,线宽尽量在40mil以上
4,信号线不能跨分割.
5.DDR2走线区域不允许有其他信号穿过
6,去耦电容要靠近相关IC的电源管脚
7.尽量采用多层板 

以下是对DDR1和DDR2 PCB设计思路要点的总结表格:

设计要点详细说明
DDR布线要求- 信号连线过孔数量为两个,从顶层到底层。
- 线宽一致,走线方向一致,平行走线不得交叉。
- 弯线需平滑处理,不得有直角、锐角,线距为线宽两倍。
- 差分走线(如时钟线)需优先布线并等长处理。
时钟线基准等长布线以时钟线长度为基准,等长布其它信号线。
DDR2三类信号1. 差分时钟信号:CLK_N,CLK_P。
2. 数据信号:D0-D15,数据掩码信号(DM0, DM1),数据选通信号(DQ_N, DQ_P)。
3. 地址/控制信号:A0-A12,WE,CS,BA0-BA2,CKE等。
Class规则设置1. DATA L BUS:D0-D7, DM0, DQ0_N, DQ0_P。
2. DATA H BUS:D8-D15, DM1, DQ1_N, DQ1_P。
3. ADDR BUS:除数据线外的其他信号。
4. CLK DIFF:CLK_N, CLK_P。
等长设计1. 所有信号线等长参考差分时钟线。
2. DATA L BUS:11根,误差≤25mil。
3. DATA H BUS:11根,误差≤25mil。
4. ADDR BUS:误差在200~300mil范围内。
特性阻抗要求- 单端信号:50欧姆。
- 差分信号:100欧姆。
参考平面确保完整的参考平面,不允许信号线跨分割区域。
VREF电容布局VREF电容应靠近相关电源管脚,线宽尽量≥40mil。
去耦电容布局去耦电容应靠近相关IC的电源管脚。
信号区域限制DDR2走线区域不允许其他信号穿过。
板层设计建议尽量采用多层板以优化信号完整性和隔离。

3.2.DDR3和DDR4 PCB设计要点

3.2.1.DDR信号线分组

将DDR布线的信号进行分组,可以分为时钟线、地址线、命令控制线、数据线四部分。
(1)、时钟线的布线规则:为高速差分信号线,按照差分布线规则进行布线,而且需要在接收端进行阴抗匹配
(2)、地址线与命令控制线布线规则:地址和命令信号线要进行端接匹配,通过匹配电阻接端接电源VTT。
(3)、数据线布线规则:数据线由于采用了ODT技术,因此不需要外部进行端接匹配。另外需要注意的是:对于时钟线、地址线、命令控制线和数据线,对等长布线要求较高,除了每一组信号线内部要求等长布线以外,还要保持时钟线、地址线和数据线等组间信号线尽量保持等长。尽量保持同组信号线保持在同层,避免跨层布线。对于差分信号线,为了避免信号间的串扰,要使用3W原则进行布线。除此之外,为了使DDR电路具备完整的参考地平面和电源平面,因此在DDR保护区内不得出现与DDR无关的信号且信号走线的参考平面不能中断。DDR的PCB单端走线阻抗一般控制为50欧,差分走线阻抗一般控制为100欧。对于多块DDR芯片的布局布线,根据菊花链的拓扑结构进行布置即可。


3.2.2.DDR时序同步

作为源同步系统的DDR电路设计来说,时序控制至关重要,共有三组时序设计要求如下:
(1)、DQ和DQS的等长关系:所有数据线DQ参考DOS的差分线等长,DOS差分线误差控制在5mil,所有数据线误差控制在DOS目标长度的15mil。
(2)、时钟CLK和地址线、命令控制线的等长关系:所有地址和命令控制线参考差分时钟线CLK等长,所有地址和命令控制线误差控制在时钟CLK目标长度的50mil。
(3)、时钟CLK和DQS线的等长关系:对于DDR2来说,时钟CLK和DQS线的时序关系是松散的时序关系,它们之间的时序参数为,一般控制在100mil即可,但是在DDR3中,时钟CLK和DOS线的时序没有严格要求。

下是对DDR3和DDR4 PCB设计要点的总结表格:

设计要点详细说明
DDR信号线分组DDR信号分为四类:时钟线、地址线、命令控制线、数据线。
时钟线布线规则- 高速差分信号线,按照差分布线规则布线。
- 接收端需进行阻抗匹配。
地址线与命令控制线规则- 地址线和命令信号需端接匹配,通过匹配电阻接端接电源VTT。
数据线布线规则- 数据线采用ODT技术,无需外部端接匹配。
- 组内信号需等长布线,组间信号需尽量等长。
- 数据线与其他组信号保持层内布线,避免跨层。
差分信号布线规则- 使用3W原则布线,避免信号串扰。
信号参考平面要求- 确保完整的参考地平面和电源平面。
- DDR保护区内不得有无关信号,参考平面不能中断。
特性阻抗要求- 单端阻抗:50欧姆。
- 差分阻抗:100欧姆。
多块DDR芯片布局- 使用菊花链拓扑结构布置信号。
DQ和DQS的等长关系- 数据线DQ参考DQS差分线等长。
- DQS差分线误差控制在5mil以内。
- 数据线误差控制在DQS目标长度的15mil以内。
CLK与地址/命令线等长关系- 地址线与命令控制线参考CLK差分时钟线等长。
- 误差控制在CLK目标长度的50mil以内。
CLK与DQS等长关系- DDR2中CLK与DQS线时序参数为100mil以内。
- DDR3中CLK与DQS线的时序要求更为松散。

3.3.DDR PCB设计共同点

1、确定PCB叠层设计
2、理清高速信号线的阻抗计算要求
3、信号分类处理
4、根据CPU出线确定DDR布局及走线的拓扑结构(T型或者菊花链)5、布线要求同组同层,最好都参考地平面
6、信号线之间尽量保证3W线宽
7、数据线等长误差要求控制在5-15mil,地址线、控制线、时钟线等长误差要求控制在20-50mil
8、所有DDR3滤波电容紧挨电源管脚放置,以免影响滤波效果,最好每个电源管脚对应一个滤波电容
9、DDR电源模块要尽量靠近CPU及DDR放置,减少平面分割面积
10、所有信号线都有完整的参考平面,以免由于跨分割带来的阻抗跳变

3.4.DDR PCB设计不同点

快速辨别方法如下:
1、红色方框的内存芯片,DDR1代是大片,DDR2和DDR3是小片,直观吧!
2、绿色方框的内存卡口,DDR1和DDR2是圆口的,DDR3是方口的,直观吧!
3、DDR3的缺口在左边,DDR4的缺口在右边,DDR4 将内存金手指设计为中间稍突出、边缘收矮的形状!
综合起来就是:DDR1=大片+圆口;DDR2=小片+圆口;DDR3=小片+方口左;DDR4=小片+方口右;

3.5.SDRAM,DDR1,DDR2,DDR3,DDR4传输速率和供电电压的汇总

四、原理图设计

本次设计的主要目标是开发一块带 DDR3 内存的 FPGA 核心板,面向高速电路项目,为后续的高速设计积累经验。重点包括:

  1. 优化 IO 分配,尤其是 LVDS 等低压差分高速接口。
  2. 使用 4 层 PCB,探索低成本低复杂度的实现方式,同时保证较高的运行速度。
  3. 为了简化设计,板上不集成 FLASH,仅通过 JTAG 加载程序,适合调试应用。

通过上述的理论支撑,我们知道原理图应该如何设计,具体如下所示:

如上分别为DDR原理图电路图,以及总体的电路图。

IO 分配策略

根据项目需求和设计权衡,对各 Bank 的 IO 做了如下分配:

  • Bank2

    • 电压:2.5V
    • 配置:全部引脚以差分对形式引出,共计 18 对(17 对等长)。
    • 用途:标准 LVDS 输入输出。
  • Bank0

    • 电压:3.3V
    • 配置:全部引脚以差分对形式引出,共计 20 对,全部等长。
    • 用途:一般 IO 输入输出。
  • Bank3

    • 电压:3.3V
    • 配置:部分引脚引出,用于板载外设 IO 或扩展 Bank0 的 IO 数目。
  • Bank1

    • 电压:1.5V
    • 配置:专门用于连接 DDR3 内存颗粒。

设计调整建议
考虑到 Bank0 和 Bank2 的供电电压可以互换,将 Bank0 调整为 2.5V 供电,可统一作为 LVDS 接口。但需注意 JTAG 接口电压将降至 2.5V,可能需要带 Buffer 的下载器支持。

FPGA高速板设计总结

设计目标与总体思路

本次设计的主要目标是开发一块带 DDR3 内存的 FPGA 核心板,面向高速电路项目,为后续的高速设计积累经验。重点包括:

  1. 优化 IO 分配,尤其是 LVDS 等低压差分高速接口。
  2. 使用 4 层 PCB,探索低成本低复杂度的实现方式,同时保证较高的运行速度。
  3. 为了简化设计,板上不集成 FLASH,仅通过 JTAG 加载程序,适合调试应用。

IO 分配策略

根据项目需求和设计权衡,对各 Bank 的 IO 做了如下分配:

  • Bank2

    • 电压:2.5V
    • 配置:全部引脚以差分对形式引出,共计 18 对(17 对等长)。
    • 用途:标准 LVDS 输入输出。
  • Bank0

    • 电压:3.3V
    • 配置:全部引脚以差分对形式引出,共计 20 对,全部等长。
    • 用途:一般 IO 输入输出。
  • Bank3

    • 电压:3.3V
    • 配置:部分引脚引出,用于板载外设 IO 或扩展 Bank0 的 IO 数目。
  • Bank1

    • 电压:1.5V
    • 配置:专门用于连接 DDR3 内存颗粒。

设计调整建议
考虑到 Bank0 和 Bank2 的供电电压可以互换,将 Bank0 调整为 2.5V 供电,可统一作为 LVDS 接口。但需注意 JTAG 接口电压将降至 2.5V,可能需要带 Buffer 的下载器支持。


DDR3 设计注意事项

  1. 信号完整性
    • DDR3 校准电阻(RZQ)和 VREF 电压的正确接入不可忽略。
    • ODT 和 RST 信号线因高速切换需求不高,允许一定灵活性,无需严格等长。
  2. 布局布线
    • DDR3 信号线宽约 5 mil,阻抗控制在 50 欧姆左右;过孔数限制为最多两个。
    • 受限于四层板的走线空间,仅支持单颗 DDR3 的布线设计。

电源设计与去耦

  • 电源方案:采用经典的 EA3059 单芯四路电源管理方案,满足 XC6SLX16-2FTG256C 的供电需求。
  • 去耦设计
    • 每路电压设置独立的去耦电容。
    • 按官方手册推荐配置:
      • 每个 Bank 一个大容量贴片电容;
      • 每个供电轨靠近芯片处放置两到三个 4.7μF 电容;
      • 在芯片正背面分别放置 470nF 电容用于高频去耦。

五、PCB设计

PCB 设计原则

  1. 四层板布局
    • 顶层和底层用于高速信号走线。
    • 中间两层分别分配为电源层和地层,保证参考平面的完整性。
  2. 阻抗控制
    • 信号线宽为 5 mil,经阻抗计算结果约为 54 欧姆,可通过加宽微调至 50 欧姆。
  3. 走线优化
    • 高速信号避免分层和过孔,DDR 信号尽量等长布线。
    • 为便于走线,放弃设计双颗 DDR3 的支持。

设计优化经验

  1. 双颗 DDR3 的挑战
    • 使用四层板设计时,Bank3 的内存引脚在等长布线和信号完整性方面遇到严重困难,最终放弃双颗 DDR3 的支持。
  2. 可改进点
    • 进一步优化 Bank0 和 Bank2 的分配逻辑,统一 LVDS 接口电压标准,提高信号一致性。

如下分别为四层的PCB结构图。

网络长度查看如下所示,等长,这里就随便拿出两组来对比。

六、3D预览图

相关文章:

嵌入式硬件实战提升篇(二)PCB高速板设计 FPGA核心板带DDR3 PCB设计DDR全面解析

引言:设计一款高速板,供读者学习,FPGA核心板,带一颗DDR3内存,FPGA型号:XC6SLX16-2FTG256C。 随着嵌入式硬件技术的快速发展,高速板设计逐渐成为嵌入式系统设计中的核心技术之一。高速板的设计要…...

亚信安全携手飞书“走近先进” 与保隆科技探索制造业数字化转型

亚信安全携手飞书组织举办“走近先进”活动。近日活动“走近”了中国汽车供应链百强、上海市制造业五十强企业——上海保隆汽车科技股份有限公司(以下简称“保隆科技”)。活动围绕“突破桎梏 加速升级”的主题,聚焦企业数字化转型的核心议题&…...

【C++篇】排队的艺术:用生活场景讲解优先级队列的实现

文章目录 须知 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗&#xff1…...

VTK的基本概念(一)

文章目录 三维场景的基本要素1.灯光2.相机3.颜色4.纹理映射 三维场景的基本要素 1.灯光 在三维渲染场景中,可以有多个灯光的存在,灯光和相机是三维渲染场景的必备要素,如果没有指定的话,vtkRenderer会自动创建默认的灯光和相机。…...

error LNK2001: 无法解析的外部符号 memcpy strcmp strlen

0>LIBMY_static.lib(pixdesc.obj) : error LNK2001: 无法解析的外部符号 __imp_abort 10>LIBMY_static.lib(random_seed.obj) : error LNK2001: 无法解析的外部符号 __imp_abort 10>postprocess.obj : error LNK2001: 无法解析的外部符号 __imp_abort 10>LIBMY_sta…...

打造智能扩容新纪元:Kubernetes Custom Metrics深度解析

自定义指标:Kubernetes Auto Scaling的革命 1. 引言 1.1 Kubernetes与Auto Scaling Kubernetes作为当今容器编排的事实标准,提供了强大的自动化能力,其中Auto Scaling(自动扩缩容)是其核心特性之一。Auto Scaling允许Kubernetes集群根据当前负载动态调整资源,以应对不…...

【K8s】专题十五(4):Kubernetes 网络之 Calico 插件安装、切换网络模式、卸载

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全…...

Unity类银河战士恶魔城学习总结(P141 Finalising ToolTip优化UI显示)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ UI部分暂时完结!!! 本章节优化了UI中物品描述的显示效果,技能描述的显示效果 并且可以批…...

c++(入门)

1. 引用 引用的定义 引用是另一个变量的别名,它在声明时必须被初始化,并且一旦初始化后,它就始终引用那个变量。 引用的语法 引用的声明方式是在变量名前加上&符号。 引用的特点 引用必须在声明时初始化。引用一旦初始化后&#x…...

【优选算法】前缀和

目录 一、[【模板】前缀和](https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId230&tqId2021480&ru/exam/oj&qru/ta/dynamic-programming/question-ranking&sourceUrl%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595…...

Spring Bean 的生命周期详解

所谓万物皆对象,对于一个 bean 而言,从出生到死亡,他要经历哪些阶段呢? 生命周期 理解对象的生命周期,可以帮助我们更好的做一些扩展。 一个对象从被创建到被垃圾回收,可以大致分为这 5 个阶段&#xff1a…...

MySQL【知识改变命运】12

视图 1:什么是视图2:创建视图使用视图(视图的好处)2.1.隐藏敏感字段2.2.对外提供统一访问3:视图和真实表进⾏表连接查询 4:修改视图数据4.1:通过真实表修改数据,会影响视图4.2&#…...

shell编程(完整版)

目录 一、shell脚本解释器 二、shell脚本的执行 三、变量的使用 四、永久环境变量 按用户设置永久环境变量 文件路径: 示例步骤: 删除永久环境变量 五、脚本程序传递参数怎么实现 六、用编程进行数学运算 shell中利用expr进行运算 运算与变量…...

数字逻辑(一)——导论

1.导论 1.1什么是数字逻辑? 数字逻辑是指在数字电路设计、计算机科学领域中对于离散的二进制信号进行逻辑处理、运算、存储和传输的基本原理和方法。 1.2数字量和模拟量的区别 数字量:在时间上和数量上都是离散的、不连续的物理量。模拟量&#xff1…...

量化交易系统开发-实时行情自动化交易-4.4.做市策略

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说做市策略原理。 做市策…...

《线性代数的本质》

之前收藏的一门课,刚好期末复习,顺便看一看哈哈 课程链接:【线性代数的本质】合集-转载于3Blue1Brown官方双语】 向量究竟是什么 线性代数中最基础、最根源的组成部分就是向量,需要先明白什么是向量 不同专业对向量的看法 物理专…...

Gbase8s 允许内置用户创建用户以及创建只读权限用户以及利用角色管理普通用户权限

Gbase8s 允许内置用户创建用户以及创建只读权限用户以及利用角色管理普通用户权限 普通安装实例创建数据库以后,DBA权限只有gbasedbt用户。gbasdbt可以创建普通用户,并且给普通用户赋予库及权限或者表级权限。 但是gbasedbt用户口令和操作系统相关,所以想在不提供gbasedbt的…...

24/11/25 视觉笔记 深度传感器和手势识别

本章的目的是开发一个应用程序,使用深度传感器的输出实时检测和跟踪简单的手势。该应用程序将分析每个已捕捉的帧。并执行以下任务。 手部区域分割:通过分析Kinect传感器的深度图输出,在每一帧中提取用户的手部区域,这是通过阈值…...

迄今为止的排序算法总结

迄今为止的排序算法总结 7.10 迄今为止的排序算法总结复杂度和稳定性时间复杂度测试程序sortAlgorithm.hsortAlgorithm.cpptest.cpp 时间复杂度测试结果 7.10 迄今为止的排序算法总结 复杂度和稳定性 排序算法平均情况最好情况最坏情况稳定性空间复杂度选择排序O(n^2)O(n^2)O…...

HTML和CSS 表单、表格练习

HTML和CSS 表格练习 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>HTML表格练习</title>…...

H5流媒体播放器EasyPlayer.js网页直播/点播播放器如果H.265视频在播放器上播放不流畅,可以考虑的解决方案

随着流媒体技术的迅速发展&#xff0c;H5流媒体播放器已成为现代网络视频播放的重要工具。其中&#xff0c;EasyPlayer.js网页直播/点播播放器作为一款功能强大的H5播放器&#xff0c;凭借其全面的协议支持、多种解码方式以及跨平台兼容性&#xff0c;赢得了广泛的关注和应用。…...

Http 转 https 中 Nginx 的详细配置过程

摘要 本节将简要介绍从 HTTP 到 HTTPS 的配置过程&#xff0c;并完整展示 Nginx 的相关配置信息。 经过两天断断续续的调试&#xff0c;终于将 http 变成 https 了。现在说说这个安装 ssl 证书的过程。 服务器是在某云上。这个过程大致分为三个步骤&#xff1a;申请 ssl 证书、…...

【测试工具JMeter篇】JMeter性能测试入门级教程(二)出炉,测试君请各位收藏了!!!

上篇文章&#xff1a;CSDN 我们介绍了JMeter的一些原理介绍&#xff0c;以及安装配置和启动流程&#xff0c;本文我们就来讲讲JMeter如何使用。 一、JMeter目录结构组成 1. 根目录 Jmeter安装包解压后的根目录如下图&#xff1a; 1.1 backups目录&#xff1a;脚本备份目录&am…...

Otter 安装流程

优质博文&#xff1a;IT-BLOG-CN 一、背景 随着公司的发展&#xff0c;订单库的数据目前已达到千万级别&#xff0c;需要进行分表分库&#xff0c;就需要对数据进行迁移&#xff0c;我们使用了otter&#xff0c;这里简单整理下&#xff0c;otter 的安装过程&#xff0c;希望对…...

一文学会Golang里拼接字符串的6种方式(性能对比)

g o l a n g golang golang的 s t r i n g string string类型是不可修改的&#xff0c;对于拼接字符串来说&#xff0c;本质上还是创建一个新的对象将数据放进去。主要有以下几种拼接方式 拼接方式介绍 1.使用 s t r i n g string string自带的运算符 ans ans s2. 使用…...

【笔记】Linux下编译Python3.10.15为动态库同时正确处理OpenSSL3依赖

之前自己第一次编译Python后发现pip会提示无法使用SSL&#xff0c;后来了解到是自己编译时没有配置OpenSSL。这个过程有点曲折&#xff0c;里面有一个坑&#xff0c;怕忘记于是写博客记录一下。 首先是下载OpenSSL&#xff0c;Python3.10.15支持此时最新版的OpenSSL 3.4.0&…...

Go语言获取客户端真实IP

在一些需求中&#xff0c;服务器需要记录客户端的ip地址&#xff0c;要获取ip地址&#xff0c;则需要有http.Request的对象参数传入&#xff0c;以下代码直接放在util中使用。 文件名&#xff1a;ip_utils.go package utilsimport ("context""github.com/spf1…...

大模型论文速递(11.23-11.25)

BlueLM-V3B 关键词&#xff1a;动态分辨率&#xff0c;图像放大&#xff0c;适应性网格化方法 研究问题&#xff1a;如何改进现有的动态分辨率匹配方法以减少在模型训练和部署中的计算复杂度&#xff1f; 方法&#xff1a; 分析现有动态分辨率匹配算法&#xff08;如LLaVA-…...

维护在线重做日志(二)

迁移和重命名 可以使用操作系统命令重新定位重做日志&#xff0c;然后使用ALTER DATABASE语句使数据库知道它们的新名称&#xff08;位置&#xff09;。这个过程是必要的&#xff0c;例如&#xff0c;如果当前用于一些重做日志文件的磁盘将被删除&#xff0c;或者如果数据文件…...

.net core MVC入门(一)

文章目录 项目地址一、环境配置1.1 安装EF core需要包1.2 配置数据库连接二、使用EF创建表2.1 整体流程梳理2.1 建表详细流程三、添加第一个视图3.1整体流程梳理3.1 添加视图,并显示在web里四、使用EF增加Catogory数据,并且读取数据到页面4.1整体流程梳理4.2 实现五、增加Cat…...