高速PCB设计指南系列(二)
第三篇 高速PCB设计
(一)、电子系统设计所面临的挑战
随着系统设计复杂性和集成度的大规模提高,电子系统设计师们正在从事100MHZ以上的电路设计,总线的工作频率也已经达到或者超过50MHZ,有的甚至超过100MHZ。目前约50% 的设计的时钟频率超过50MHz,将近20% 的设计主频超过120MHz。
当系统工作在50MHz时,将产生传输线效应和信号的完整性问题;而当系统时钟达到120MHz时,除非使用高速电路设计知识,否则基于传统方法设计的PCB将无法工作。因此,高速电路设计技术已经成为电子系统设计师必须采取的设计手段。只有通过使用高速电路设计师的设计技术,才能实现设计过程的可控性。
(二)、什么是高速电路
通常认为如果数字逻辑电路的频率达到或者超过45MHZ~50MHZ,而且工作在这个频率之上的电路已经占到了整个电子系统一定的份量(比如说1/3),就称为高速电路。
实际上,信号边沿的谐波频率比信号本身的频率高,是信号快速变化的上升沿与下降沿(或称信号的跳变)引发了信号传输的非预期结果。因此,通常约定如果线传播延时大于1/2数字信号驱动端的上升时间,则认为此类信号是高速信号并产生传输线效应。
信号的传递发生在信号状态改变的瞬间,如上升或下降时间。信号从驱动端到接收端经过一段固定的时间,如果传输时间小于1/2的上升或下降时间,那么来自接收端的反射信号将在信号改变状态之前到达驱动端。反之,反射信号将在信号改变状态之后到达驱动端。如果反射信号很强,叠加的波形就有可能会改变逻辑状态。
(三)、高速信号的确定
上面我们定义了传输线效应发生的前提条件,但是如何得知线延时是否大于1/2驱动端的信号上升时间? 一般地,信号上升时间的典型值可通过器件手册给出,而信号的传播时间在PCB设计中由实际布线长度决定。下图为信号上升时间和允许的布线长度(延时)的对应关系。
PCB 板上每单位英寸的延时为 0.167ns.。但是,如果过孔多,器件管脚多,网线上设置的约束多,延时将增大。通常高速逻辑器件的信号上升时间大约为0.2ns。如果板上有GaAs芯片,则最大布线长度为7.62mm。
设Tr 为信号上升时间, Tpd 为信号线传播延时。如果Tr≥4Tpd,信号落在安全区域。如果2Tpd≥Tr≥4Tpd,信号落在不确定区域。如果Tr≤2Tpd,信号落在问题区域。对于落在不确定区域及问题区域的信号,应该使用高速布线方法。
(四)、什么是传输线
PCB板上的走线可等效为下图所示的串联和并联的电容、电阻和电感结构。串联电阻的典型值0.25-0.55 ohms/foot,因为绝缘层的缘故,并联电阻阻值通常很高。将寄生电阻、电容和电感加到实际的PCB连线中之后,连线上的最终阻抗称为特征阻抗Zo。线径越宽,距电源/地越近,或隔离层的介电常数越高,特征阻抗就越小。如果传输线和接收端的阻抗不匹配,那么输出的电流信号和信号最终的稳定状态将不同,这就引起信号在接收端产生反射,这个反射信号将传回信号发射端并再次反射回来。随着能量的减弱反射信号的幅度将减小,直到信号的电压和电流达到稳定。这种效应被称为振荡,信号的振荡在信号的上升沿和下降沿经常可以看到。
(五)、传输线效应
基于上述定义的传输线模型,归纳起来,传输线会对整个电路设计带来以下效应。
· 反射信号Reflected signals
· 延时和时序错误Delay & Timing errors
· 多次跨越逻辑电平门限错误False Switching
· 过冲与下冲Overshoot/Undershoot
· 串扰Induced Noise (or crosstalk)
· 电磁辐射EMI radiation
5.1 反射信号
如果一根走线没有被正确终结(终端匹配),那么来自于驱动端的信号脉冲在接收端被反射,从而引发不预期效应,使信号轮廓失真。当失真变形非常显著时可导致多种错误,引起设计失败。同时,失真变形的信号对噪声的敏感性增加了,也会引起设计失败。如果上述情况没有被足够考虑,EMI将显著增加,这就不单单影响自身设计结果,还会造成整个系统的失败。
反射信号产生的主要原因:过长的走线;未被匹配终结的传输线,过量电容或电感以及阻抗失配。
5.2 延时和时序错误
信号延时和时序错误表现为:信号在逻辑电平的高与低门限之间变化时保持一段时间信号不跳变。过多的信号延时可能导致时序错误和器件功能的混乱。
通常在有多个接收端时会出现问题。电路设计师必须确定最坏情况下的时间延时以确保设计的正确性。信号延时产生的原因:驱动过载,走线过长。
5.3 多次跨越逻辑电平门限错误
信号在跳变的过程中可能多次跨越逻辑电平门限从而导致这一类型的错误。多次跨越逻辑电平门限错误是信号振荡的一种特殊的形式,即信号的振荡发生在逻辑电平门限附近,多次跨越逻辑电平门限会导致逻辑功能紊乱。反射信号产生的原因:过长的走线,未被终结的传输线,过量电容或电感以及阻抗失配。
5.4 过冲与下冲
过冲与下冲来源于走线过长或者信号变化太快两方面的原因。虽然大多数元件接收端有输入保护二极管保护,但有时这些过冲电平会远远超过元件电源电压范围,损坏元器件。
5.5 串扰
串扰表现为在一根信号线上有信号通过时,在PCB板上与之相邻的信号线上就会感应出相关的信号,我们称之为串扰。
信号线距离地线越近,线间距越大,产生的串扰信号越小。异步信号和时钟信号更容易产生串扰。因此解串扰的方法是移开发生串扰的信号或屏蔽被严重干扰的信号。
5.6 电磁辐射
EMI(Electro-Magnetic Interference)即电磁干扰,产生的问题包含过量的电磁辐射及对电磁辐射的敏感性两方面。EMI表现为当数字系统加电运行时,会对周围环境辐射电磁波,从而干扰周围环境中电子设备的正常工作。它产生的主要原因是电路工作频率太高以及布局布线不合理。目前已有进行 EMI仿真的软件工具,但EMI仿真器都很昂贵,仿真参数和边界条件设置又很困难,这将直接影响仿真结果的准确性和实用性。最通常的做法是将控制EMI的各项设计规则应用在设计的每一环节,实现在设计各环节上的规则驱动和控制。
(六)、避免传输线效应的方法
针对上述传输线问题所引入的影响,我们从以下几方面谈谈控制这些影响的方法。
6.1 严格控制关键网线的走线长度
如果设计中有高速跳变的边沿,就必须考虑到在PCB板上存在传输线效应的问题。现在普遍使用的很高时钟频率的快速集成电路芯片更是存在这样的问题。解决这个问题有一些基本原则:如果采用CMOS或TTL电路进行设计,工作频率小于10MHz,布线长度应不大于7英寸。工作频率在50MHz布线长度应不大于1.5英寸。如果工作频率达到或超过75MHz布线长度应在1英寸。对于GaAs芯片最大的布线长度应为0.3英寸。如果超过这个标准,就存在传输线的问题。
6.2 合理规划走线的拓扑结构
解决传输线效应的另一个方法是选择正确的布线路径和终端拓扑结构。走线的拓扑结构是指一根网线的布线顺序及布线结构。当使用高速逻辑器件时,除非走线分支长度保持很短,否则边沿快速变化的信号将被信号主干走线上的分支走线所扭曲。通常情形下,PCB走线采用两种基本拓扑结构,即菊花链(Daisy Chain)布线和星形(Star)分布。
对于菊花链布线,布线从驱动端开始,依次到达各接收端。如果使用串联电阻来改变信号特性,串联电阻的位置应该紧靠驱动端。在控制走线的高次谐波干扰方面,菊花链走线效果最好。但这种走线方式布通率最低,不容易100%布通。实际设计中,我们是使菊花链布线中分支长度尽可能短,安全的长度值应该是:Stub Delay <= Trt *0.1.
例如,高速TTL电路中的分支端长度应小于1.5英寸。这种拓扑结构占用的布线空间较小并可用单一电阻匹配终结。但是这种走线结构使得在不同的信号接收端信号的接收是不同步的。
星形拓扑结构可以有效的避免时钟信号的不同步问题,但在密度很高的PCB板上手工完成布线十分困难。采用自动布线器是完成星型布线的最好的方法。每条分支上都需要终端电阻。终端电阻的阻值应和连线的特征阻抗相匹配。这可通过手工计算,也可通过CAD工具计算出特征阻抗值和终端匹配电阻值。
在上面的两个例子中使用了简单的终端电阻,实际中可选择使用更复杂的匹配终端。第一种选择是RC匹配终端。RC匹配终端可以减少功率消耗,但只能使用于信号工作比较稳定的情况。这种方式最适合于对时钟线信号进行匹配处理。其缺点是RC匹配终端中的电容可能影响信号的形状和传播速度。
串联电阻匹配终端不会产生额外的功率消耗,但会减慢信号的传输。这种方式用于时间延迟影响不大的总线驱动电路。 串联电阻匹配终端的优势还在于可以减少板上器件的使用数量和连线密度。
最后一种方式为分离匹配终端,这种方式匹配元件需要放置在接收端附近。其优点是不会拉低信号,并且可以很好的避免噪声。典型的用于TTL输入信号(ACT, HCT, FAST)。
此外,对于终端匹配电阻的封装型式和安装型式也必须考虑。通常SMD表面贴装电阻比通孔元件具有较低的电感,所以SMD封装元件成为首选。如果选择普通直插电阻也有两种安装方式可选:垂直方式和水平方式。
垂直安装方式中电阻的一条安装管脚很短,可以减少电阻和电路板间的热阻,使电阻的热量更加容易散发到空气中。但较长的垂直安装会增加电阻的电感。水平安装方式因安装较低有更低的电感。但过热的电阻会出现漂移,在最坏的情况下电阻成为开路,造成PCB走线终结匹配失效,成为潜在的失败因素。
6.3 抑止电磁干扰的方法
很好地解决信号完整性问题将改善PCB板的电磁兼容性(EMC)。其中非常重要的是保证PCB板有很好的接地。对复杂的设计采用一个信号层配一个地线层是十分有效的方法。此外,使电路板的最外层信号的密度最小也是减少电磁辐射的好方法,这种方法可采用"表面积层"技术"Build-up"设计制做PCB来实现。表面积层通过在普通工艺 PCB 上增加薄绝缘层和用于贯穿这些层的微孔的组合来实现 ,电阻和电容可埋在表层下,单位面积上的走线密度会增加近一倍,因而可降低 PCB的体积。PCB 面积的缩小对走线的拓扑结构有巨大的影响,这意味着缩小的电流回路,缩小的分支走线长度,而电磁辐射近似正比于电流回路的面积;同时小体积特征意味着高密度引脚封装器件可以被使用,这又使得连线长度下降,从而电流回路减小,提高电磁兼容特性。
6.4 其它可采用技术
为减小集成电路芯片电源上的电压瞬时过冲,应该为集成电路芯片添加去耦电容。这可以有效去除电源上的毛刺的影响并减少在印制板上的电源环路的辐射。
当去耦电容直接连接在集成电路的电源管腿上而不是连接在电源层上时,其平滑毛刺的效果最好。这就是为什么有一些器件插座上带有去耦电容,而有的器件要求去耦电容距器件的距离要足够的小。
任何高速和高功耗的器件应尽量放置在一起以减少电源电压瞬时过冲。
如果没有电源层,那么长的电源连线会在信号和回路间形成环路,成为辐射源和易感应电路。
走线构成一个不穿过同一网线或其它走线的环路的情况称为开环。如果环路穿过同一网线其它走线则构成闭环。两种情况都会形成天线效应(线天线和环形天线)。天线对外产生EMI辐射,同时自身也是敏感电路。闭环是一个必须考虑的问题,因为它产生的辐射与闭环面积近似成正比。
相关文章:
高速PCB设计指南系列(二)
第三篇 高速PCB设计 (一)、电子系统设计所面临的挑战 随着系统设计复杂性和集成度的大规模提高,电子系统设计师们正在从事100MHZ以上的电路设计,总线的工作频率也已经达到或者超过50MHZ,有的甚至超过100MHZ。目前…...
uniapp项目打包上线流程
平台:h5小程序app (安卓)小程序打包上线流程第一步:登录小程序公众平台第二步:hbuilderx打包小程序1.在mainfest.json文件中进行相关配置2.需要将项目中的网络请求改为https协议做为生产环境(配置项目的环境…...
垃圾回收:垃圾数据如何自动回收
有些数据被使用之后,可能就不再需要了,我们把这种数据称为垃圾数据。如果这些垃圾数据一直保存在内存中,那么内存会越用越多,所以我们需要对这些垃圾数据进行回收,以释放有限的内存空间 不同语言的垃圾回收策略 通常…...
苹果笔不用原装可以吗?Apple Pencil平替笔推荐
近些年来,不管是学习还是画画,都有不少人喜欢用ipad。而ipad的用户,也是比较重视它的实用价值,尤其是不少人都想要好好利用来进行学习记笔记。事实上,有很多替代品都能替代Apple Pencil,仅仅用于记笔记就没…...
uniCloud基础使用-杂文
获取openID云函数use strict; exports.main async (event, context) > {//event为客户端上传的参数console.log(event : , event)// jscode2session 微信小程序登录接口,获取openidconst {code} event;// 云函数中如需要请求其他http服务,则使用uni…...
vector的模拟实现
文章目录vector的模拟实现vector 结构定义1. vector的迭代器的实现2. vector四个默认成员函数2.1 构造函数2.1.1 无参2.1.2 n个val初始化2.1.3 迭代器初始化2.2 析构函数2.3 拷贝构造函数2.3.1 传统写法2.3.2 现代写法2.4 赋值重载运算符3. 管理数组相关接口3.1 reserve3.2 res…...
【无标题】compose系列教程-4.相对布局ConstraintLayout的使用
相对布局在Compose中被称为ConstraintLayout,它可以让您以相对于其他元素的方式放置元素。 以下是使用ConstraintLayout实现相对布局的示例代码: Composable fun ConstraintLayoutExample() { ConstraintLayout(modifier Modifier.fillMaxSize()…...
JavaEE简单示例——Bean管理
简单介绍: 在这一章节我们会比较详细的介绍我们在之前的测试类中以及Bean管理XML配置文件中所使用到的类和方法,以及XML中配置的属性所代表的详细含义。以及之前我们反复提到但是一直没有详细的讲解的一个东西:容器。我们可以大致的有一个概…...
react+antdpro+ts实现企业级项目四:注册页面实现及useEmotionCss的介绍
创建文件路径并注册register路由 在pages/User下创建Register文件夹并创建index.tsx文件 然后在config/routes创建register注册路由。注册完后,当在登陆页面点击注册按钮时就可以跳转到此注册页面而不会报404了。 export default [{path: /user,layout: false,rou…...
Shifu基础功能:数据采集
数据采集 我们可以通过HTTP/gRPC与deviceShifu进行通信,deviceShifu会将我们发送的请求转换成设备所支持协议的形式,并发送给设备。 当设备接收到指令之后,数据会传输到deviceShifu中,之后deviceShifu将数据作为我们请求的返回值…...
代码随想录算法训练营day54 | 动态规划之子序列 392.判断子序列 115.不同的子序列
day54392.判断子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组115.不同的子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺…...
MCAL知识点(三):Port与Dio配置
目录 1、概述 2、 Port的EB-tresos配置 2.1、创建模块 2.2 General配置 2.3、PortCnfigSet 2.4、Port的属性...
初识C++需要了解的一些东西(1)
目录🥇命名空间🏅存在原因🏵命名空间定义🎧命名空间的3种使用方式🏆C输入和输出🌝缺省参数🌜缺省参数概念⭐️缺省参数分类☀️函数重载🔥引用🌚引用概念🌓引…...
友元函数的使用大全
概述 我们知道,C的类具有封装和信息隐藏的特性。一般情况下,我们会封装public的成员函数供用户调用,而将成员变量设置为private或protected。但在一些比较复杂的业务情况下,可能需要去访问对象中大量的private或protected成员变量…...
QT学习笔记-QT多项目系统中如何指定各项目的编译顺序
QT学习笔记-QT多项目系统中如何指定各项目的编译顺序背景环境解决思路具体操作背景 为了更好的复用程序功能以及更优雅的管理程序,有经验的程序员通常要对程序进行分层和模块化设计。在QT/C这个工具中同样可以通过创建子项目的方式对程序进行模块化,在这…...
JWT令牌解析及刷新令牌(十一)
写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️&#…...
Hibernate学习(一)
Hibernate学习(一) Hibernate框架的概述: 一:什么是框架:指软件的半成品,已经完成了部分功能。 二:EE的三层架构: 1.EE的三层经典架构: 我在这里主要学的是ssh框架。 三…...
Go的 context 包的使用
文章目录背景简介主要方法获得顶级上下文当前协程上下文的操作创建下级协程的Context场景示例背景 在父子协程协作过程中, 父协程需要给子协程传递信息, 子协程依据父协程传递的信息来决定自己的操作. 这种需求下可以使用 context 包 简介 Context通常被称为上下文ÿ…...
微服务为什么要用到 API 网关?
本文介绍了 API 网关日志的价值,并以知名网关 Apache APISIX 为例,展示如何集成 API 网关日志。 作者程小兰,API7.ai 技术工程师,Apache APISIX Contributor。 原文链接 什么是微服务 微服务架构(通常简称为微服务&a…...
SWUST OJ 1042: 中缀表达式转换为后缀表达式【表达式转逆波兰表达式】
题目描述 中缀表达式是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3 4),中缀表达式是人们常用的算术表示方法。后缀表达式不包含括号,运算符放在两个运算对象的后面&#…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点
中科院1区顶刊|IF14:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点 当下,免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入,我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…...
