高速电路设计必看:同步开关噪声问题解析

信号完整性
同时被 2 个专栏收录
¥49.90
¥99.00
185 篇文章

引言:地弹(Ground bounce)和电压弹(Vcc bounce)在数字电路中始终存在。在过去,由于边沿速率较低和引脚数量有限,这些噪声问题并不总是明显。现在,任何使用高边沿速率器件的设计师都必须意识到这些噪声问题的严重性,并需要采取相应措施加以解决。

目录

1 同步开关噪声的基本概念

2 各种地弹参数

3 地弹的影响因子

4 设计预防措施

4.1 芯片选型与设计规划阶段

4.2 电路设计与参数配置阶段

4.3 PCB布局布线阶段(最关键的实施环节)

4.4 系统级与后期调试阶段

5 总结


1 同步开关噪声的基本概念

当多个输出驱动器同时进行开关动作时,会在芯片/封装的电源分配网络中引发电压跌落。这种同步开关行为会使器件内部的地电位相对于系统地瞬时抬升。地电位表现出的这种非零偏移,即为同步开关噪声(SSN),更常被称作“地弹”。地弹电压的大小与器件地和系统地之间存在的电感、以及每个输出所吸入的电流量有关,由以下公式给出。

一个输入/输出端口的电平由高到低或由低到高的切换,实质上是对其负载电容进行放电或充电的过程。由此产生的电流变化率是累积的,并随同时进行开关的输出端数量增加而增大。因此,电流变化率越高,地弹的幅度就越大。

如下方图示,器件地是通过一系列电感连接到系统地(即PCB地)的,这些电感主要包括封装键合线(bond wi

VIP 高速电路设计实战:SI/PI/EMI问题诊断与经典工具书解析 本文深入探讨高速电路设计中信号完整性(SI)、电源完整性(PI)和电磁干扰(EMI)三大核心挑战的诊断与解决方案。通过实战案例解析SI/PI/EMI问题的内在关联性,并详细评析Allegro Sigrity等经典工具书在实际工程中的应用价值,为工程师提供系统性学习路径和实战技巧。 开通可读全文·1k 阅读·10 点赞·28 收藏 阅读全文

相关推荐

Altium Designer 20高速电路设计全面讲解

深入解析Altium Designer 20在高速电路设计中的核心功能与实战技巧,涵盖信号完整性分析与PCB布局优化,助力高效掌握altium工具的进阶应用。

weixin_42600128的博客 1204

高速电路地弹噪声分析与抑制方案

地弹噪声是高速数字电路设计中的常见问题,本质上是由于接地回路的寄生电感导致参考地电位波动。这种现象在高频电路中尤为显著,会引发信号完整性问题和电磁干扰。从工程实践角度看,合理配置去耦电容网络和优化接地系统是抑制地弹的关键技术。通过采用多层板设计、缩短电流回路、优化电容布局等措施,可有效降低地弹幅度。典型应用场景包括高速ADC、DDR内存和千兆以太网等设计,其中BGA封装芯片和FPGA器件尤其需要注意地弹控制。掌握地弹的测量方法和仿真技术,能显著提升高速电路设计的可靠性。

weixin_42588672的博客 577

高速电路设计的基石:深入解析信号与电源完整性

本文深入探讨高速电路设计中信号完整性与电源完整性的关键作用,揭示GHz级数字电路中的传输线特性和电源噪声问题。通过实战案例分享阻抗匹配、串扰抑制和PDN阻抗控制等核心技术,提供从仿真到实测的完整解决方案,助力工程师攻克高速设计难题。

weixin_29175469的博客 302

高速电路设计中的SSN问题:手把手教你用旁路电容解决电源反弹

本文深入探讨高速电路设计中的同步开关噪声(SSN)问题,重点解析如何通过旁路电容的精准选型和PCB布局优化来有效解决电源反弹。文章详细介绍了MLCC电容的选型策略、布局黄金法则以及仿真验证方法,帮助工程师在GHz级时钟频率下确保信号完整性。

weixin_29291069的博客 283

深入解析地弹现象:从电感原理到高速电路噪声抑制实战

电感是电路中的基本无源元件,其物理本质是抵抗电流变化的‘惯性’,遵循V=L*di/dt的基本原理。在高速数字电路和电源系统中,电感特性决定了信号完整性与电源质量,是影响系统稳定性的关键技术因素。其工程价值在于,理解并控制寄生电感是抑制同步开关噪声、提升电磁兼容性的核心。在FPGA、微处理器及高速ADC等应用场景中,寄生电感与电流快速变化相互作用,会引发地弹和电源轨塌陷等典型噪声问题。本文聚焦于地弹这一由封装引线、PCB走线等寄生电感导致的电压尖峰现象,通过剖析其产生机制与电流突变的关系,为工程师提供从测量调

weixin_34178244的博客 380

差分晶振技术解析:高速电路设计的关键

在高速数字电路设计中,时钟信号的完整性至关重要。差分晶振技术通过LVDS或LVPECL等差分信号标准,显著提升了抗干扰能力和信号质量。其核心原理是利用两根相位相反的信号线传输时钟,共模干扰被自动抵消,从而降低抖动和相位噪声。差分晶振在工业自动化、汽车电子和医疗设备等场景中表现优异,尤其在5G基站和高速SerDes参考时钟中不可或缺。本文深入探讨了差分晶振的阻抗匹配、电源滤波和布局布线等关键技术要点,帮助工程师优化设计。

weixin_30906185的博客 373

ADI 高速电路设计综合指南与实践

模拟-数字转换器(ADC)和数字-模拟转换器(DAC)是电子系统中实现模拟信号与数字信号之间相互转换的关键组件。ADC将模拟信号转换成数字信号,以便于数字系统处理;DAC则执行相反的操作,将数字信号转换回模拟信号。这些转换器是嵌入式系统、数据采集设备、通信设备等众多电子系统不可或缺的部分。信号完整性是指信号在传输路径上保持其幅度和时间特性的能力。在理想情况下,信号应该在接收端准确无误地再现其在发送端的波形。

weixin_28949937的博客 680

电源完整性与同步开关噪声

电源完整性与同步开关噪声,非常好的资料,希望对大家有用。

同步开关噪声总结

对于一个给定电路,即di/dt不变的情况下,要减小同步开关噪声就得尽量减小回路的等效电感Leff。可以把Leff划分为3个部分:芯片内部开关输出回路等效电感Leff,P;芯片外部开关驱动从高电平到低电平输出的回路等效电感Leff,HL;芯片外部开关驱动从低电平到高电平输出的回路等效电感Leff,LH。   由于芯片外同步开关在工作的时候,1到0的变化与0到1的变化同时存在,并且跳变不一致,因而导致某些回流方向相反,会因耦合而降低等效电感。在实际分析中,为了预测最坏的可能,都把所有的同步开关状态按一致变化情况处理。   芯片封装问题是导致同步开关噪声的根源,除此之外还有接插件和连接器。如何比

减小同步开关噪声的其他措施

由于芯片封装与电源平面的电感和电阻会引发电源噪声,电源噪声会在地平面上产生电压波动,此波动对其他共电源/地总线的静态驱动将构成严重的干扰,甚至引起错误的触发。负载电容的增加、负载电阻的减小、地电感的增大和开关器件数目的增加均会导致同步开关噪声的增大。由式(4-4)可知,可以采取下面的措施减小同步开关噪声。   · 增大信号的翻转时间。例如—些ASIC,提供了慢速和快速工作模式的选择,可使用慢速工作模式增大信号的翻转时间。   · 合理布局电源/地引脚。对于一些采用BGA、QFP等封装形式的芯片,同一类型的电源或地(如同是数字地或同是模拟地)引脚往往不止一个,尽管这些引脚在内部逻辑上都是连通

PCB上FPGA的同步开关噪声分析

如今CMOS技术让一块FPGA器件可以拥有多个I/O接口。同时,近几年,低功耗已开始成为高速I/O接口的主流概念。降低功耗有效的途径就是降低电压,而电压降低就会导致I/O接口所允许的噪声余量变小。因此,对FPGA用户而言,量化芯片、封装和PCB环境下的系统级同步开关噪声(SSN)就显得十分必要。   本文对SSN进行了系统性介绍,着重介绍由FPGA输出缓冲导致的SSN。这种噪声一般被称作同步开关输出噪声(SSO),与输入缓冲导致的SSN不同。本文介绍了系统级SSO的成因,并提出了一种分层的系统级SSO建模方法。同时,本文还讲解了如何将SSO模型与频域和时域测量相关联,并给出了几种减小SSO的

电脑版微信多开,最详细教程没有之一

首先桌面任意的位置右键新建文本文档输入如下代码: TASKKILL /F/IM WECHAT.EXE start " " "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe" start " " "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe" ...

大超子 4385

2024“华为杯”中国研究生数学建模竞赛(A题)深度剖析_数学建模完整过程+详细思路+代码全解析

目标是优化风力涡轮机的功率调度,使其在给定的实时风速数据下,最小化涡轮机关键组件(如塔架和主轴)的疲劳损伤。问题的挑战在于,考虑通信延迟和测量噪声的同时,要确保功率输出与风速变化的响应快速且准确。

2401_82549447的博客 6615

别再死磕MuJoCo了!用PyBullet+Stable-Baselines3搞定机械臂强化学习(保姆级环境配置)

本文详细介绍了如何使用PyBullet和Stable-Baselines3构建机械臂强化学习系统,绕过昂贵的MuJoCo许可壁垒。通过实战指南,包括环境配置、机械臂Gym环境构建、训练策略与调优技巧,帮助开发者快速掌握机器人强化学习技术,提升智能控制效率。

weixin_42667269的博客 262

STM32 FDCAN热插拔恢复机制与自动重发功能优化

本文深入分析了STM32 FDCAN在热插拔场景下触发bus-off状态导致通讯中断的根本原因,指出自动重发功能是问题关键。通过禁用自动重发、配置硬件自动恢复机制及优化总线参数,实现了FDCAN热插拔后的100%稳定恢复,为工业应用提供了可靠的CAN总线解决方案。

ice55的博客 677

TPAMI审稿人关注什么

写在开头:被tpami接收大概是每个cs er最开心的事情吧!今天阅读TPAMI的文章时,发现有扩刊的文章,也有不是扩刊的文章,那么这两类文章哪个更容易被接收呢?

carlous0的专栏 1682

C#项目实战——YModem协议文件传输【实例】

1、先由上位机发送*update*的握手信号,下位机返回响应字符‘C’(字符C,ASII码为0x43),之后通信双方开始以YMODEM协议进行数据通信。2、 YMODEM协议格式说明(1)起始帧数据格式帧类型(1byte)帧序号帧序号反码传输的文件名文件大小数据CRCSOH00FFfilenamefileziseNULCRCSOH=0x01,表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个);00表示数据帧序号,初始是0,依次向下排。

做有价值的事,积累有价值的笔记! 3648

数学建模学习(75):全局敏感性分析Morris 方法

敏感性分析 (SA) 是分析不同应用条件下模型行为的基本实践。提出了许多 SA 技术,从简单的筛选方法到计算成本高昂的基于方差的方法。本篇内容我们通过将 Morris 方法来对模型进行分析。

全栈川川 1万+

【花雕学编程】Arduino ESP32 SPP 之使用Servo库控制360度舵机正反转

使用 Servo 库控制 360 度舵机的正反转是 Arduino ESP32 SPP 应用中的一个重要案例,具有简易控制接口、灵活速度调节和高兼容性等特点,广泛应用于机器人、自动化装置和动态艺术等领域。在第三个案例中,使用map()函数将用户输入的速度参数(范围0-100)映射到舵机控制的角度(0-180),使得用户能够以更人性化的方式控制舵机速度。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。

雕爷学编程 1464

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 高速信号设计:何时该考虑传输线效应?
下一篇: 高速PCB设计的隐形杀手:通孔分支

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
一只豌豆象
一只豌豆象 新星创作者: 嵌入式与硬件开发技术领域 新星创作者: 嵌入式与硬件开发技术领域
博客等级 码龄4年 3016粉丝 325原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只豌豆象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值