精华内容
下载资源
问答
  • 二、UDP的特点 1.UDP是无连接的,即就是UDP在发送数据之前不需要建立连接; 2.UDP是尽自己的最大努力来进行交付的,即就是UDP不保证可靠交付; 3.UDP没有拥塞控制,很适合多媒体通信的要求; 4.UDP的首部...

    UDP

    一、UDP是什么?

    UDP是User Datagram Protocol(用户数据报协议)

    二、UDP的特点

    1.UDP是无连接的,即就是UDP在发送数据之前不需要建立连接;

    ps:知道对端的IP和端口号就可以直接进行传输

    2.UDP是尽自己的最大努力来进行交付的,即就是UDP不保证可靠交付;
    3.UDP没有拥塞控制,很适合多媒体通信的要求;
    4.UDP的首部开销小,首部长度只有8个字节;
    5.UDP由于不保证可靠交付,所以UDP传输速度快,故UDP经常用于传送多媒体数据。
    6.UDP是面向数据报的

    ps:由于UDP面向数据报,所以UDP不能够灵活的控制读写数据的次数和数量

    7.UDP不可靠,所以UDP没有确认机制、没有重传机制。
    8.UDP可以实现全双工通信

    ps:全双工通信就是通过UDP的一个socket,既可以读也可以写
    9.应用层交给UDP多长的报文,UDP原样发送,既不会拆分也不会合并

    ps:UDP允许丢包,可以乱序交付
    面向数据报例子
    假设现在需要发送一个长度为100个字节的数据,如果发送端调用一次sendto函数,发送100个字节,那么接收端也必须调用recvfrom函数,接收100个字节,而不能循环的调用10次recvfrom函数,每次接收10个字节

    三、UDP的头部

    这里写图片描述
    字段解析:

    source port: 源端口号,占16位,2个字节
    dest port: 目的端口号,占16位,2个字节
    length: 此字段标记了整个数据报(UDP的首部+UDP数据)的最大长度
    checksum: 检验和,此字段用处是用来检查收到地数据的对错的
    ps:如果校验和出错,就会直接丢弃
    Application data: 数据部分(如果有的话)

    ps:根据端口号的大小得知:同一个主机上的进程数为2^16

    四、UDP的使用注意事项

    1.由于UDP的首部中一个16位的最大长度,所以UDP可以传输的数据最大长度是64k(包含UDP首部)
    2.当传输的数据较大时,需要对数据在应用层手动的进行分包,多次的发送,并在接收端手动拼装

    TCP

    一、TCP是什么

    TCP是传输控制协议(Transmission Control Protocol)

    二、TCP的特点

    1.(connection-oriented)面向连接;
    2.(Reliable)可靠;
    3.(in-order)按顺序;
    4.(Flow control)流量控制;
    5.(Congestion control)拥塞控制;
    6.面向字节流;
    7.编序号是针对字节的,一个字节一个序号,而且报文段的序号是当前报文段中第一个字节的序号;
    8.发送端和接收端都有缓冲区,并且缓冲区的大小大于等于1;
    9.TCP可以实现全双工通信;
    10.没有结构有序的字节流;
    11.发送端能连续发送的报文的大小是根据—->滑动窗口的大小

    ps:滑动窗口中的数据类型
    这里写图片描述

    三、TCP的首部

    这里写图片描述

    字段解析

    (1)源端口:占2字节,指定报文的源端口号
    (2)目的端口:占2字节,指定报文的目的端口号

    ps:端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。

    (3)序号

    占4字节,TCP 连接中传送的数据流中的每一个字节都会被编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

    (4)确认号

    占 4 字节,是期望收到对方的下一个报文段的数据中的第一个字节的序号。

    (5)数据偏移

    占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。

    (6)偏移

    占6位,保留为今后使用,但是目前应置为0。

    (7)ACK

    占1位,ACK被称为确认ACK,只当ACK=1时确认号字段才有效。当 ACK=0 时,确认号是无效的

    (8)SYN

    占1位,被称为同步SYN,当SYN=1时,表示这是一个连接请求或连接接受报文。

    (9)FIN

    占1位,被称为终止SYN,用来释放一个连接,当FIN=1时,说明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

    (10)窗口大小

    占2字节,此字段是用来设置滑动窗口的大小的,单位是字节

    (11)检验和

    占2字节,检验的范围包括TCP的首部和数据两个部分,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部

    (12)紧急指针

    占2字节,此字段用来支出本报文段中紧急数据的字节数(紧急数据放在本报文段数据的前面)

    (13)选项:占24位,是留着备用的,长度可变
    (14)填充

    占8位,此字段没有什么作用,只是为了使TCP的首部长度为4字节的整数倍

    展开全文
  • Altium Dsigner——多层PCB层叠结构

    千次阅读 2019-03-29 10:26:50
    在设计多层PCB电路板之前,设计者需要首先根据电路的规模、电路板的尺寸和电磁兼容(EMC)的要求来确定所采用的电路板结构,也就是决定采用4,6,还是更多数的电路板。确定数之后,再确定内电的放置位置...

    转自:http://www.eefocus.com/html/08-07/46800s.shtml

    在设计多层PCB电路板之前,设计者需要首先根据电路的规模、电路板的尺寸和电磁兼容(EMC)的要求来确定所采用的电路板结构,也就是决定采用4层,6层,还是更多层数的电路板。确定层数之后,再确定内电层的放置位置以及如何在这些层上分布不同的信号。这就是多层PCB层叠结构的选择问题。层叠结构是影响PCB板EMC性能的一个重要因素,也是抑制电磁干扰的一个重要手段。本节将介绍多层PCB板层叠结构的相关内容。 

    11.1.1 层数的选择和叠加原则 

    确定多层PCB板的层叠结构需要考虑较多的因素。从布线方面来说,层数越多越利于布线,但是制板成本和难度也会随之增加。对于生产厂家来说,层叠结构对称与否是PCB板制造时需要关注的焦点,所以层数的选择需要考虑各方面的需求,以达到最佳的平衡。 

    对于有经验的设计人员来说,在完成元器件的预布局后,会对PCB的布线瓶颈处进行重点分析。结合其他EDA工具分析电路板的布线密度;再综合有特殊布线要求的信号线如差分线、敏感信号线等的数量和种类来确定信号层的层数;然后根据电源的种类、隔离和抗干扰的要求来确定内电层的数目。这样,整个电路板的板层数目就基本确定了。 

    确定了电路板的层数后,接下来的工作便是合理地排列各层电路的放置顺序。在这一步骤中,需要考虑的因素主要有以下两点。 

    (1)特殊信号层的分布。 

    (2)电源层和地层的分布。 

    如果电路板的层数越多,特殊信号层、地层和电源层的排列组合的种类也就越多,如何来确定哪种组合方式最优也越困难,但总的原则有以下几条。 

    (1)信号层应该与一个内电层相邻(内部电源/地层),利用内电层的大铜膜来为信号层提供屏蔽。 

    (2)内部电源层和地层之间应该紧密耦合,也就是说,内部电源层和地层之间的介质厚度应该取较小的值,以提高电源层和地层之间的电容,增大谐振频率。内部电源层和地层之间的介质厚度可以在Protel的Layer Stack Manager(层堆栈管理器)中进行设置。选择【Design】/【Layer Stack Manager…】命令,系统弹出层堆栈管理器对话框,用鼠标双击Prepreg文本,弹出如图11-1所示对话框,可在该对话框的Thickness选项中改变绝缘层的厚度。


    如果电源和地线之间的电位差不大的话,可以采用较小的绝缘层厚度,例如5mil(0.127mm)。 

    (3)电路中的高速信号传输层应该是信号中间层,并且夹在两个内电层之间。这样两个内电层的铜膜可以为高速信号传输提供电磁屏蔽,同时也能有效地将高速信号的辐射限制在两个内电层之间,不对外造成干扰。 

    (4)避免两个信号层直接相邻。相邻的信号层之间容易引入串扰,从而导致电路功能失效。在两信号层之间加入地平面可以有效地避免串扰。 

    (5)多个接地的内电层可以有效地降低接地阻抗。例如,A信号层和B信号层采用各自单独的地平面,可以有效地降低共模干扰。 

    (6)兼顾层结构的对称性。 

    11.1.2 常用的层叠结构 

    下面通过4层板的例子来说明如何优选各种层叠结构的排列组合方式。 

    对于常用的4层板来说,有以下几种层叠方式(从顶层到底层)。 
    (1)Siganl_1(Top),GND(Inner_1),POWER(Inner_2),Siganl_2(Bottom)。 
    (2)Siganl_1(Top),POWER(Inner_1),GND(Inner_2),Siganl_2(Bottom)。 
    (3)POWER(Top),Siganl_1(Inner_1),GND(Inner_2),Siganl_2(Bottom)。 

    显然,方案3电源层和地层缺乏有效的耦合,不应该被采用。 

    那么方案1和方案2应该如何进行选择呢?一般情况下,设计人员都会选择方案1作为4层板的结构。选择的原因并非方案2不可被采用,而是一般的PCB板都只在顶层放置元器件,所以采用方案1较为妥当。但是当在顶层和底层都需要放置元器件,而且内部电源层和地层之间的介质厚度较大,耦合不佳时,就需要考虑哪一层布置的信号线较少。对于方案1而言,底层的信号线较少,可以采用大面积的铜膜来与POWER层耦合;反之,如果元器件主要布置在底层,则应该选用方案2来制板。 

    如果采用如图11-1所示的层叠结构,那么电源层和地线层本身就已经耦合,考虑对称性的要求,一般采用方案1。 

    在完成4层板的层叠结构分析后,下面通过一个6层板组合方式的例子来说明6层板层叠结构的排列组合方式和优选方法。 

    (1)Siganl_1(Top),GND(Inner_1),Siganl_2(Inner_2),Siganl_3(Inner_3),POWER(Inner_4),Siganl_4(Bottom)。 

    方案1采用了4层信号层和2层内部电源/接地层,具有较多的信号层,有利于元器件之间的布线工作,但是该方案的缺陷也较为明显,表现为以下两方面。 

    ① 电源层和地线层分隔较远,没有充分耦合。 
    ② 信号层Siganl_2(Inner_2)和Siganl_3(Inner_3)直接相邻,信号隔离性不好,容易发生串扰。 
    (2)Siganl_1(Top),Siganl_2(Inner_1),POWER(Inner_2),GND(Inner_3),Siganl_3(Inner_4),Siganl_4(Bottom)。 

    方案2相对于方案1,电源层和地线层有了充分的耦合,比方案1有一定的优势,但是Siganl_1(Top)和Siganl_2(Inner_1)以及Siganl_3(Inner_4)和Siganl_4(Bottom)信号层直接相邻,信号隔离不好,容易发生串扰的问题并没有得到解决。 

    (3)Siganl_1(Top),GND(Inner_1),Siganl_2(Inner_2),POWER(Inner_3),GND(Inner_4),Siganl_3(Bottom)。 
    相对于方案1和方案2,方案3减少了一个信号层,多了一个内电层,虽然可供布线的层面减少了,但是该方案解决了方案1和方案2共有的缺陷。 

    ① 电源层和地线层紧密耦合。 
    ② 每个信号层都与内电层直接相邻,与其他信号层均有有效的隔离,不易发生串扰。 
    ③ Siganl_2(Inner_2)和两个内电层GND(Inner_1)和POWER(Inner_3)相邻,可以用来传输高速信号。两个内电层可以有效地屏蔽外界对Siganl_2(Inner_2)层的干扰和Siganl_2(Inner_2)对外界的干扰。 

    综合各个方面,方案3显然是最优化的一种,同时,方案3也是6层板常用的层叠结构。 
    通过对以上两个例子的分析,相信读者已经对层叠结构有了一定的认识,但是在有些时候,某一个方案并不能满足所有的要求,这就需要考虑各项设计原则的优先级问题。遗憾的是由于 

    电路板的板层设计和实际电路的特点密切相关,不同电路的抗干扰性能和设计侧重点各有所不同,所以事实上这些原则并没有确定的优先级可供参考。但可以确定的是,设计原则2(内部电源层和地层之间应该紧密耦合)在设计时需要首先得到满足,另外如果电路中需要传输高速信号,那么设计原则3(电路中的高速信号传输层应该是信号中间层,并且夹在两个内电层之间)就必须得到满足。表11-1给出了多层板层叠结构的参考方案,供读者参考。

    11.2.1 元器件布局的一般原则 

    设计人员在电路板布局过程中需要遵循的一般原则如下。 

    (1)元器件最好单面放置。如果需要双面放置元器件,在底层(Bottom Layer)放置插针式元器件,就有可能造成电路板不易安放,也不利于焊接,所以在底层(Bottom Layer)最好只放置贴片元器件,类似常见的计算机显卡PCB板上的元器件布置方法。单面放置时只需在电路板的一个面上做丝印层,便于降低成本。 

    (2)合理安排接口元器件的位置和方向。一般来说,作为电路板和外界(电源、信号线)连接的连接器元器件,通常布置在电路板的边缘,如串口和并口。如果放置在电路板的中央,显然不利于接线,也有可能因为其他元器件的阻碍而无法连接。另外在放置接口时要注意接口的方向,使得连接线可以顺利地引出,远离电路板。接口放置完毕后,应当利用接口元器件的String(字符串)清晰地标明接口的种类;对于电源类接口,应当标明电压等级,防止因接线错误导致电路板烧毁。 

    (3)高压元器件和低压元器件之间最好要有较宽的电气隔离带。也就是说不要将电压等级相差很大的元器件摆放在一起,这样既有利于电气绝缘,对信号的隔离和抗干扰也有很大好处。 

    (4)电气连接关系密切的元器件最好放置在一起。这就是模块化的布局思想。 

    (5)对于易产生噪声的元器件,例如时钟发生器和晶振等高频器件,在放置的时候应当尽量把它们放置在靠近CPU的时钟输入端。大电流电路和开关电路也容易产生噪声,在布局的时候这些元器件或模块也应该远离逻辑控制电路和存储电路等高速信号电路,如果可能的话,尽量采用控制板结合功率板的方式,利用接口来连接,以提高电路板整体的抗干扰能力和工作可靠性。 

    (6)在电源和芯片周围尽量放置去耦电容和滤波电容。去耦电容和滤波电容的布置是改善电路板电源质量,提高抗干扰能力的一项重要措施。在实际应用中,印制电路板的走线、引脚连线和接线都有可能带来较大的寄生电感,导致电源波形和信号波形中出现高频纹波和毛刺,而在电源和地之间放置一个0.1F的去耦电容可以有效地滤除这些高频纹波和毛刺。如果电路板上使用的是贴片电容,应该将贴片电容紧靠元器件的电源引脚。对于电源转换芯片,或者电源输入端,最好是布置一个10F或者更大的电容,以进一步改善电源质量。 

    (7)元器件的编号应该紧靠元器件的边框布置,大小统一,方向整齐,不与元器件、过孔和焊盘重叠。元器件或接插件的第1引脚表示方向;正负极的标志应该在PCB上明显标出,不允许被覆盖;电源变换元器件(如DC/DC变换器,线性变换电源和开关电源)旁应该有足够的散热空间和安装空间,外围留有足够的焊接空间等。 

    11.2.2 元器件布线的一般原则 

    设计人员在电路板布线过程中需要遵循的一般原则如下。 

    (1)元器件印制走线的间距的设置原则。不同网络之间的间距约束是由电气绝缘、制作工艺和元件大小等因素决定的。例如一个芯片元件的引脚间距是8mil,则该芯片的【Clearance Constraint】就不能设置为10mil,设计人员需要给该芯片单独设置一个6mil的设计规则。同时,间距的设置还要考虑到生产厂家的生产能力。 

    另外,影响元器件的一个重要因素是电气绝缘,如果两个元器件或网络的电位差较大,就需要考虑电气绝缘问题。一般环境中的间隙安全电压为200V/mm,也就是5.08V/mil。所以当同一块电路板上既有高压电路又有低压电路时,就需要特别注意足够的安全间距。 

    (2)线路拐角走线形式的选择。为了让电路板便于制造和美观,在设计时需要设置线路的拐角模式,可以选择45°、90°和圆弧。一般不采用尖锐的拐角,最好采用圆弧过渡或45°过渡,避免采用90°或者更加尖锐的拐角过渡。 

    导线和焊盘之间的连接处也要尽量圆滑,避免出现小的尖脚,可以采用补泪滴的方法来解决。当焊盘之间的中心距离小于一个焊盘的外径D时,导线的宽度可以和焊盘的直径相同;如果焊盘之间的中心距大于D,则导线的宽度就不宜大于焊盘的直径。 

    导线通过两个焊盘之间而不与其连通的时候,应该与它们保持最大且相等的间距,同样导线和导线之间的间距也应该均匀相等并保持最大。 

    (3)印制走线宽度的确定方法。走线宽度是由导线流过的电流等级和抗干扰等因素决定的,流过电流越大,则走线应该越宽。一般电源线就应该比信号线宽。为了保证地电位的稳定(受地电流大小变化影响小),地线也应该较宽。实验证明:当印制导线的铜膜厚度 

    为0.05mm时,印制导线的载流量可以按照20A/mm2进行计算,即0.05mm厚,1mm宽的导线可以流过1A的电流。所以对于一般的信号线来说10~30mil的宽度就可以满足要求了;高电压,大电流的信号线线宽大于等于40mil,线间间距大于30mil。为了保证导线的抗剥离强度和工作可靠性,在板面积和密度允许的范围内,应该采用尽可能宽的导线来降低线路阻抗,提高抗干扰性能。 

    对于电源线和地线的宽度,为了保证波形的稳定,在电路板布线空间允许的情况下,尽量加粗,一般情况下至少需要50mil。 

    (4)印制导线的抗干扰和电磁屏蔽。导线上的干扰主要有导线之间引入的干扰、电源线引入的干扰和信号线之间的串扰等,合理安排和布置走线及接地方式可以有效减少干扰源,使设计出的电路板具备更好的电磁兼容性能。 

    对于高频或者其他一些重要的信号线,例如时钟信号线,一方面其走线要尽量宽,另一方面可以采取包地的形式使其与周围的信号线隔离起来(就是用一条封闭的地线将信号线“包裹”起来,相当于加一层接地屏蔽层)。 

    对于模拟地和数字地要分开布线,不能混用。如果需要最后将模拟地和数字地统一为一个电位,则通常应该采用一点接地的方式,也就是只选取一点将模拟地和数字地连接起来,防止构成地线环路,造成地电位偏移。 

    完成布线后,应在顶层和底层没有铺设导线的地方敷以大面积的接地铜膜,也称为敷铜,用以有效减小地线阻抗,从而削弱地线中的高频信号,同时大面积的接地可以对电磁干扰起抑制作用。 

    电路板中的一个过孔会带来大约10pF的寄生电容,对于高速电路来说尤其有害;同时,过多的过孔也会降低电路板的机械强度。所以在布线时,应尽可能减少过孔的数量。另外,在使用穿透式的过孔(通孔)时,通常使用焊盘来代替。这是因为在电路板制作时,有可能因为加工的原因导致某些穿透式的过孔(通孔)没有被打穿,而焊盘在加工时肯定能够被打穿,这也相当于给制作带来了方便。 

    以上就是PCB板布局和布线的一般原则,但在实际操作中,元器件的布局和布线仍然是一项很灵活的工作,元器件的布局方式和连线方式并不唯一,布局布线的结果很大程度上还是取决于设计人员的经验和思路。可以说,没有一个标准可以评判布局和布线方案的对与错,只能比较相对的优和劣。所以以上布局和布线原则仅作为设计参考,实践才是评判优劣的唯一标准。 

    11.2.3 多层PCB板布局和布线的特殊要求 

    相对于简单的单层板和双层板,多层PCB板的布局和布线有其独特的要求。 

    对于多层PCB板的布局,归纳起来就是要合理安排使用不同电源和地类型元器件的布局。其目的一是为了给后面的内电层的分割带来便利,同时也可以有效地提高元器件之间的抗干扰能力。 

    所谓合理安排使用不同电源和地类型元器件的布局,就是将使用相同电源等级和相同类型地的元器件尽量放在一起。例如当电路原理图上有+3.3V、+5V、−5V、+15V、−15V等多个电压等级时,设计人员应该将使用同一电压等级的元器件集中放置在电路板的某一个区域。当然这个布局原则并不是布局的唯一标准,同时还需要兼顾其他的布局原则(双层板布局的一般原则),这就需要设计人员根据实际需求来综合考虑各种因素,在满足其他布局原则的基础上,尽量将使用相同电源等级和相同类型地的元器件放在一起。对于多层PCB板的布线,归纳起来就是一点:先走信号线,后走电源线。这是因为多层板的电源和地通常都通过连接内电层来实现。这样做的好处是可以简化信号层的走线,并且通过内电层这种大面积铜膜连接的方式来有效降低接地阻抗和电源等效内阻,提高电路的抗干扰能力;同时,大面积铜膜所允许通过的最大电流也加大了。 

    一般情况下,设计人员需要首先合理安排使用不同电源和地类型元器件的布局,同时兼顾其他布局原则,然后按照前面章节所介绍的方法对元器件进行布线(只布信号线),完成后分割内电层,确定内电层各部分的网络标号,最后通过内电层和信号层上的过孔和焊盘来进行连接。焊盘和过孔在通过内电层时,与其具有相同网络标号的焊盘或过孔会通过一些未被腐蚀的铜膜连接到内电层,而不属于该网络的焊盘周围的铜膜会被完全腐蚀掉,也就是说不会与该内电层导通。 

    11.3 中间层创建与设置 

    中间层,就是在PCB板顶层和底层之间的层,其结构参见图11-1,读者可以参考图中的标注进行理解。那中间层在制作过程中是如何实现的呢?简单地说多层板就是将多个单层板和双层板压制而成,中间层就是原先单层板和双层板的顶层或底层。在PCB板的制作过程中,首先需要在一块基底材料(一般采用合成树脂材料)的两面敷上铜膜,然后通过光绘等工艺将图纸中的导线连接关系转换到印制板的板材上(对图纸中的印制导线、焊盘和过孔覆膜加以保护,防止这些部分的铜膜在接下来的腐蚀工艺中被腐蚀),再通过化学腐蚀的方式(以FeCl3或H2O2为主要成分的腐蚀液)将没有覆膜保护部分的铜膜腐蚀掉,最后完成钻孔,印制丝印层等后期处理工作,这样一块PCB板就基本制作完成了。同理,多层PCB板就是在多个板层完成后再采取压制工艺将其压制成一块电路板,而且为了减少成本和过孔干扰,多层PCB板往往并不比双层板和单层板厚多少,这就使得组成多层PCB板的板层相对于普通的双层板和单层板往往厚度更小,机械强度更低,导致对加工的要求更高。所以多层PCB板的制作费用相对于普通的双层板和单层板就要昂贵许多。 

    但由于中间层的存在,多层板的布线变得更加容易,这也是选用多层板的主要目的。然而在实际应用中,多层PCB板对手工布线提出了更高的要求,使得设计人员需要更多地得到EDA软件的帮助;同时中间层的存在使得电源和信号可以在不同的板层中传输,信号的隔离和抗干扰性能会更好,而且大面积的敷铜连接电源和地网络可以有效地降低线路阻抗,减小因为共同接地造成的地电位偏移。因此,采用多层板结构的PCB板通常比普通的双层板和单层板有更好的抗干扰性能。 

    11.3.1 中间层的创建 

    Protel系统中提供了专门的层设置和管理工具—Layer Stack Manager(层堆栈管理器)。这个工具可以帮助设计者添加、修改和删除工作层,并对层的属性进行定义和修改。选择【Design】/【Layer Stack Manager…】命令,弹出如图11-2所示的层堆栈管理器属性设置对话框。

    上图所示的是一个4层PCB板的层堆栈管理器界面。除了顶层(TopLayer)和底层(BottomLayer)外,还有两个内部电源层(Power)和接地层(GND),这些层的位置在图中都有清晰的显示。双击层的名称或者单击Properties按钮可以弹出层属性设置对话框,如图11-3所示。

    在该对话框中有3个选项可以设置。 

    (1)Name:用于指定该层的名称。 
    (2)Copper thickness:指定该层的铜膜厚度,默认值为1.4mil。铜膜越厚则相同宽度的导线所能承受的载流量越大。 
    (3)Net name:在下拉列表中指定该层所连接的网络。本选项只能用于设置内电层,信号层没有该选项。如果该内电层只有一个网络例如“+5V”,那么可以在此处指定网络名称;但是如果内电层需要被分割为几个不同的区域,那么就不要在此处指定网络名称。 

    在层间还有绝缘材质作为电路板的载体或者用于电气隔离。其中Core和Prepreg都是绝缘材料,但是Core是板材的双面都有铜膜和连线存在,而Prepreg只是用于层间隔离的绝缘物质。两者的属性设置对话框相同,双击Core或Prepreg,或者选择绝缘材料后单击Properties按钮可以弹出绝缘层属性设置对话框。如图11-4所示。 

    绝缘层的厚度和层间耐压、信号耦合等因素有关,在前面的层数选择和叠加原则中已经介绍过。如果没有特殊的要求,一般选择默认值。 

    除了“Core”和“Prepreg”两种绝缘层外,在电路板的顶层和底层通常也会有绝缘层。点击图11-2左上角的Top Dielectric(顶层绝缘层)或Bottom Dielectric(底层绝缘层)前的选择框选择是否显示绝缘层,单击旁边的按钮可以设置绝缘层的属性。 

    在顶层和底层绝缘层设置的选项下面有一个层叠模式选择下拉列表,可以选择不同的层叠模式:Layer Pairs(层成对)、Internal Layer Pairs(内电层成对)和Build-up(叠压)。在前面讲过,多层板实际上是由多个双层板或单层板压制而成的,选择不同的模式,则表示在实际制作中采用不同压制方法,所以如图11-5所示的“Core”和“Prepreg”的位置也不同。例如,层成对模式就是两个双层板夹一个绝缘层(Prepreg),内电层成对模式就是两个单层板夹一个双层板。通常采用默认的Layer Pairs(层成对)模式。

     


    在图11-2所示的层堆栈管理器属性设置对话框右侧有一列层操作按钮,各个按钮的功能如下。 

    (1)Add Layer:添加中间信号层。例如,需要在GND和Power之间添加一个高速信号层,则应该首先选择GND层,如图11-6所示。单击Add Layer按钮,则会在GND层下添加一个信号层,如图11-7所示,其默认名称为MidLayer1,MidLayer2,„,依此类推。双击层的名称或者点击Properties按钮可以设置该层属性。

    (2)Add Plane:添加内电层。添加方法与添加中间信号层相同。先选择需要添加的内电层的位置,然后单击该按钮,则在指定层的下方添加内电层,其默认名称为Internal Plane1,InternalPlane2,„,依此类推。双击层的名称或者点击Properties按钮可以设置该层属性。 

    (3)Delete:删除某个层。除了顶层和底层不能被删除,其他信号层和内电层均能够被删除,但是已经布线的中间信号层和已经被分割的内电层不能被删除。选择需要删除的层,单击该按钮,弹出如图11-8所示的对话框,单击Yes按钮则该层就被删除。 

    (4)Move Up:上移一个层。选择需要上移的层(可以是信号层,也可以是内电层),单击该按钮,则该层会上移一层,但不会超过顶层。 

    (5)Move Down:下移一个层。与Move Up按钮相似,单击该按钮,则该层会下移一层,但不会超过底层。 
    (6)Properties:属性按钮。单击该按钮,弹出类似图11-3所示的层属性设置对话框。 

    11.3.2 中间层的设置 

    完成层堆栈管理器的相关设置后,单击OK按钮,退出层堆栈管理器,就可以在PCB编辑界面中进行相关的操作。在对中间层进行操作时,需要首先设置中间层在PCB编辑界面中是否显示。选择【Design】/【Options…】命令,弹出如图11-9所示的选项设置对话框,在Internal planes下方的内电层选项上打勾,显示内电层。

     

    在完成设置后,就可以在PCB编辑环境的下方看到显示的层了,如图11-10所示。用鼠标单击电路板板层标签即可切换不同的层以进行操作。如果不习惯系统默认的颜色,可以选择【Tools】/【Preferences…】命令下的Colors选项自定义各层的颜色,相关内容在第8章已有介绍,供读者参考。

    11.4 内电层设计 

    多层板相对于普通双层板和单层板的一个非常重要的优势就是信号线和电源可以分布在不同的板层上,提高信号的隔离程度和抗干扰性能。内电层为一铜膜层,该铜膜被分割为几个相互隔离的区域,每个区域的铜膜通过过孔与特定的电源或地线相连,从而简化电源和地网络的走线,同时可以有效减小电源内阻。 

    11.4.1 内电层设计相关设置 

    内电层通常为整片铜膜,与该铜膜具有相同网络名称的焊盘在通过内电层的时候系统会自动将其与铜膜连接起来。焊盘/过孔与内电层的连接形式以及铜膜和其他不属于该网络的焊盘的安全间距都可以在Power Plane Clearance选项中设置。选择【Design】/【Rules…】命令,单击Manufacturing选项,其中的Power Plane Clearance和Power Plane Connect Style选项与内电层相关,其内容介绍如下。 

    1.Power Plane Clearance 

    该规则用于设置内电层安全间距,主要指与该内电层没有网络连接的焊盘和过孔与该内电层的安全间距,如图11-11所示。在制造的时候,与该内电层没有网络连接的焊盘在通过内电层时其周围的铜膜就会被腐蚀掉,腐蚀的圆环的尺寸即为该约束中设置的数值。

     

    2.Power Plane Connect Style 

    该规则用于设置焊盘与内电层的形式。主要指与该内电层有网络连接的焊盘和过孔与该内电层连接时的形式。如图11-12所示。

    单击Properties(属性)按钮,弹出其规则设置对话框,如图11-13所示。对话框左侧为规则的适用范围,在右侧的Rule Attributes下拉列表中可以选择连接方式:Relief Connect、Direct Connect和No connect。Direct Connect即直接连接,焊盘在通过内电层的时候不把周围的铜膜腐蚀掉,焊盘和内电层铜膜直接连接;No connect指没有连接,即与该铜膜网络同名的焊盘不会被连接到内电层;设计人员一般采用系统默认的Relief Connect连接形式,该规则的设置对话框如图11-13所示。

    这种焊盘连接形式通过导体扩展和绝缘间隙与内电层保持连接,其中在Conductor Width选项中设置导体出口的宽度;Conductors选项中选择导体出口的数目,可以选择2个或4个;Expansion选项中设置导体扩展部分的宽度;Air-Gap选项中设置绝缘间隙的宽度。 


    11.4.2 内电层分割方法 

    在本章的前几节已经介绍了多层板的层叠结构的选择,内电层的建立和相关的设置,在本小节中将主要介绍多层板内电层的分割方法和步骤,供读者参考。 

    (1)在分割内电层之前,首先需要定义一个内电层,这在前面的章节中已经有了介绍,本处不再赘述。选择【Design】/【Split Planes…】命令,弹出如图11-14所示的内电层分割对话框。该对话框中的Current split planes栏中指内电层已经分割的区域。在本例中,内电层尚未被分割,所以图11-14所示的Current split planes栏为空白。Current split planes栏下的Add、Edit、Delete按钮分别用于添加新的电源区域,编辑选中的网络和删除选中的网络。按钮下方的Show Selected Split Plane View选项用于设置是否显示当前选择的内电层分割区域的示意图。如果选择该选项,则在其下方的框中将显示内电层中该区域所划分网络区域的缩略图,其中与该内电层网络同名的引脚、焊盘或连线将在缩略图中高亮显示,不选择该选项则不会高亮显示。Show Net For选项,选择该选项,如果定义内电层的时候已经给该内电层指定了网络,则在该选项上方的方框中显示与该网络同名的连线和引脚情况。 

    (2)单击Add按钮,弹出如图11-15所示的内电层分割设置对话框。

    在如图11-15所示的对话框中,Track Width用于设置绘制边框时的线宽,同时也是同一内电层上不同网络区域之间的绝缘间距,所以通常将Track Width设置的比较大。建议读者在输入数值时也要输入单位。如果在该处只输入数字,不输入单位,那么系统将默认使用当前PCB编辑器中的单位。 

    Layer选项用于设置指定分割的内电层,此处可以选择Power和GND内电层。本例中有多种电压等级存在,所以需要分割Power内电层来为元器件提供不同等级的电压。 

    Connect to Net选项用于指定被划分的区域所连接的网络。通常内电层用于电源和地网络的布置,但是在Connect to Net下拉列表中可以看到,可以将内层的整片网络连接到信号网络,用于信号传输,只是一般设计者不这样处理。信号所要求的信号电压和电流弱,对导线要求小,而电源电流大,需要更小的等效内阻。所以一般信号在信号层走线,内电层专用于电源和地网络连线。 

    (3)单击图11-15内电层分割设置对话框中的OK按钮,进入网络区域边框绘制 状态。 

    在绘制内电层边框时,用户一般将其他层面的信息隐藏起来,只显示当前所编辑的内电层,方便进行边框的绘制。选择【Tools】/【Preferences…】命令,弹出如图11-16所示的对话框。选择Display选项,再选择Single Layer Mode复选框,如图11-16所示。这样,除了当前工作层Power之外,其余层都被隐藏起来了,显示效果如图11-17所示。

     


    在分割内电层时,因为分割的区域将所有该网络的引脚和焊盘都包含在内,所以用户通常需要知道与该电源网络同名的引脚和焊盘的分布情况,以便进行分割。在左侧Browse PCB工具中选择VCC网络(如图11-18所示),单击Select按钮将该网络点亮选取。 

    图11-19所示为将VCC网络点亮选取后,网络标号为VCC的焊盘和引脚与其他网络标号的焊盘和引脚的对比。 
    选择了这些同名的网络焊盘后,在绘制边界的时候就可以将这些

    焊盘都包含到划分的区域中去。此时这些电源网络就可以不通过信号层连线而是直接通过焊盘连接到内电层。 
    (4)绘制内电层分割区域。 

    选择【Design】/【Split Planes…】命令,弹出如图11-14所示的内电层分割对话框,单击Add按钮,弹出如图11-15所示的内电层分割设置对话框。首先选择12V网络,单击OK按钮,光标变为十字状,此时就可以在内电层开始分割工作了。 

    在绘制边框边界线时,可以按“Shift+空格键”来改变走线的拐角形状,也可以按Tab键来改变内电层的属性。在绘制完一个封闭的区域后(起点和终点重合),系统自动弹出如图11-20所示的内电层分割对话框,在该对话框中可以看到一个已经被分割的区域,在PCB编辑界面中显示如图11-21所示。

     

    在添加完内电层后,放大某个12V焊盘,可以看到该焊盘没有与导线相连接(如图11-22(a)所示),但是在焊盘上出现了一个“+”字标识,表示该焊盘已经和内电层连接。 

    将当前工作层切换到Power层,可以看到该焊盘在内电层的连接状态。由于内电层通常是整片铜膜,所以图11-22(b)中焊盘周围所示部分将在制作过程中被腐蚀掉,可见GND和该内电层是绝缘的。


    在内电层添加了12V区域后,还可以根据实际需要添加别的网络,就是说将整个Power内电层分割为几个不同的相互隔离的区域,每个区域连接不同的电源网络。最后完成效果如图11-23所示。 

    在完成内电层的分割之后,可以在如图11-20所示的对话框中编辑和删除已放置的内电层网络。单击Edit按钮可以弹出如图11-15所示的内电层属性对话框,在该对话框中可以修改边界线宽、内电层层面和连接的网络,但不能修改边界的形状。如果对边界的走向和形状不满意,则只能单击Delete按钮,重新绘制边界;或者选择【Edit】/【Move】/【Split Plane Vertices】命令来修改内电层边界线,此时可以通过移动边界上的控点来改变边界的形状,如图11-24所示。完成后在弹出的确认对话框中单击Yes按钮即可完成重绘。

    11.4.3 内电层分割基本原则 

    在完成内电层的分割之后,本节再介绍几个在内电层分割时需要注意的问题。 

    (1)在同一个内电层中绘制不同的网络区域边界时,这些区域的边界线可以相互重合,这也是通常采用的方法。因为在PCB板的制作过程中,边界是铜膜需要被腐蚀的部分,也就是说,一条绝缘间隙将不同网络标号的铜膜给分割开来了,如图11-25所示。这样既能充分利用内电层的铜膜区域,也不会造成电气隔离冲突。 

    (2)在绘制边界时,尽量不要让边界线通过所要连接到的区域的焊盘,如图11-26所示。由于边界是在PCB板的制作过程中需要被腐蚀的铜膜部分,有可能出现因为制作工艺的原因导致焊盘与内电层连接出现问题。所以在PCB设计时要尽量保证边界不通过具有相同网络名称的焊盘。

    (3)在绘制内电层边界时,如果由于客观原因无法将同一网络的所有焊盘都包含在内,那么也可以通过信号层走线的方式将这些焊盘连接起来。但是在多层板的实际应用中,应该尽量避免这种情况的出现。因为如果采用信号层走线的方式将这些焊盘与内电层连接,就相当于将一个较大的电阻(信号层走线电阻)和较小的电阻(内电层铜膜电阻)串联,而采用多层板的重要优势就在于通过大面积铜膜连接电源和地的方式来有效减小线路阻抗,减小PCB接地电阻导致的地电位偏移,提高抗干扰性能。所以在实际设计中,应该尽量避免通过导线连接电源网络。 

    (4)将地网络和电源网络分布在不同的内电层层面中,以起到较好的电气隔离和抗干扰的效果。 

    (5)对于贴片式元器件,可以在引脚处放置焊盘或过孔来连接到内电层,也可以从引脚 

    处引出一段很短的导线(引线应该尽量粗短,以减小线路阻抗),并且在导线的末端放置焊盘和过孔来连接,如图11-27所示。 

    (6)关于去耦电容的放置。前面提到在芯片的附近应该放置0.01μF的去耦电容,对于电源类的芯片,还应该放置10F或者更大的滤波电容来滤除电路中的高频干扰和纹波,并用尽可能短的导线连接到芯片的引脚上,再通过焊盘连接到内电层。 

    (7)如果不需要分割内电层,那么在内电层的属性对话框中直接选择连接到网络就可以了,不再需要内电层分割工具。

    11.5 多层板设计原则汇总 

    在本章及前面几章的介绍中,我们已经强调了一些关于PCB设计所需要遵循的原则,在这里我们将这些原则做一汇总,以供读者在设计时参考,也可以作为设计完成后检查时参考的依据。 

    1.PCB元器件库的要求 

    (1)PCB板上所使用的元器件的封装必须正确,包括元器件引脚的大小尺寸、引脚的间距、引脚的编号、边框的大小和方向表示等。 

    (2)极性元器件(电解电容、二极管、三极管等)正负极或引脚编号应该在PCB元器件库中和PCB板上标出。 

    (3)PCB库中元器件的引脚编号和原理图元器件的引脚编号应当一致,例如在前面章节中介绍了二极管PCB库元器件中的引脚编号和原理图库中引脚编号不一致的问题。 

    (4)需要使用散热片的元器件在绘制元器件封装时应当将散热片尺寸考虑在内,可以将元器件和散热片一并绘制成为整体封装的形式。 

    (5)元器件的引脚和焊盘的内径要匹配,焊盘的内径要略大于元器件的引脚尺寸,以便安装 
    。 
    2.PCB元件布局的要求 

    (1)元器件布置均匀,同一功能模块的元器件应该尽量靠近布置。 
    (2)使用同一类型电源和地网络的元器件尽量布置在一起,有利于通过内电层完成相互之间的电气连接。 
    (3)接口元器件应该靠边放置,并用字符串注明接口类型,接线引出的方向通常应该离开电路板。 
    (4)电源变换元器件(如变压器、DC/DC变换器、三端稳压管等)应该留有足够的散热空间。 
    (5)元器件的引脚或参考点应放置在格点上,有利于布线和美观。 
    (6)滤波电容可以放置在芯片的背面,靠近芯片的电源和地引脚。 

    (7)元器件的第一引脚或者标识方向的标志应该在PCB上标明,不能被元器件覆盖。 
    (8)元器件的标号应该紧靠元器件边框,大小统一,方向整齐,不与焊盘和过孔重叠,不能放置在元器件安装后被覆盖的区域。 

    3.PCB布线要求 

    (1)不同电压等级电源应该隔离,电源走线不应交叉。 
    (2)走线采用45°拐角或圆弧拐角,不允许有尖角形式的拐角。 
    (3)PCB走线直接连接到焊盘的中心,与焊盘连接的导线宽度不允许超过焊盘外径的大小。 
    (4)高频信号线的线宽不小于20mil,外部用地线环绕,与其他地线隔离。 
    (5)干扰源(DC/DC变换器、晶振、变压器等)底部不要布线,以免干扰。 
    (6)尽可能加粗电源线和地线,在空间允许的情况下,电源线的宽度不小于50mil。 
    (7)低电压、低电流信号线宽9~30mil,空间允许的情况下尽可能加粗。 
    (8)信号线之间的间距应该大于10mil,电源线之间间距应该大于20mil。 
    (9)大电流信号线线宽应该大于40mil,间距应该大于30mil。 
    (10)过孔最小尺寸优选外径40mil,内径28mil。在顶层和底层之间用导线连接时,优选焊盘。 
    (11)不允许在内电层上布置信号线。 
    (12)内电层不同区域之间的间隔宽度不小于40mil。 
    (13)在绘制边界时,尽量不要让边界线通过所要连接到的区域的焊盘。 
    (14)在顶层和底层铺设敷铜,建议设置线宽值大于网格宽度,完全覆盖空余空间,且不留有死铜,同时与其他线路保持30mil(0.762mm)以上间距(可以在敷铜前设置安全间距,敷铜完毕后改回原有安全间距值)。 
    (15)在布线完毕后对焊盘作泪滴处理。 
    (16)金属壳器件和模块外部接地。 
    (17)放置安装用和焊接用焊盘。 
    (18)DRC检查无误。 

    4.PCB分层的要求 

    (1)电源平面应该靠近地平面,与地平面有紧密耦合,并且安排在地平面之下。 
    (2)信号层应该与内电层相邻,不应直接与其他信号层相邻。 
    (3)将数字电路和模拟电路隔离。如果条件允许,将模拟信号线和数字信号线分层布置,并采用屏蔽措施;如果需要在同一信号层布置,则需要采用隔离带、地线条的方式减小干扰;模拟电路和数字电路的电源和地应该相互隔离,不能混用。 
    (4)高频电路对外干扰较大,最好单独安排,使用上下都有内电层直接相邻的中间信号层来传输,以便利用内电层的铜膜减少对外干扰。 

    11.6 本 章 小 结 

    本章主要介绍了多层电路板的设计步骤,包括多层板层数的选择、层叠结构的选择;多层板布局布线与普通双层板布局布线的相同和不同;多层板特有的中间层的创建和设置,以及内电层设计。根据本章所罗列的步骤,读者已经能够完成多层PCB的初步设计工作。在接下来的章节中,我们将介绍PCB的电磁兼容和信号完整性的相关内容,以便更好地完成PCB设计。

    展开全文
  • 多层PCB层叠结构

    千次阅读 2017-11-03 10:58:37
    在设计多层PCB电路板之前,设计者需要首先根据电路的规模、电路板的尺寸和电磁兼容(EMC)的要求来确定所采用的电路板结构,也就是决定采用4,6,还是更多数的电路板。确定数之后,再确定内电的放置位置...

    转自:http://www.eefocus.com/html/08-07/46800s.shtml

     

    在设计多层PCB电路板之前,设计者需要首先根据电路的规模、电路板的尺寸和电磁兼容(EMC)的要求来确定所采用的电路板结构,也就是决定采用4层,6层,还是更多层数的电路板。确定层数之后,再确定内电层的放置位置以及如何在这些层上分布不同的信号。这就是多层PCB层叠结构的选择问题。层叠结构是影响PCB板EMC性能的一个重要因素,也是抑制电磁干扰的一个重要手段。本节将介绍多层PCB板层叠结构的相关内容。 

    11.1.1 层数的选择和叠加原则 

    确定多层PCB板的层叠结构需要考虑较多的因素。从布线方面来说,层数越多越利于布线,但是制板成本和难度也会随之增加。对于生产厂家来说,层叠结构对称与否是PCB板制造时需要关注的焦点,所以层数的选择需要考虑各方面的需求,以达到最佳的平衡。 

    对于有经验的设计人员来说,在完成元器件的预布局后,会对PCB的布线瓶颈处进行重点分析。结合其他EDA工具分析电路板的布线密度;再综合有特殊布线要求的信号线如差分线、敏感信号线等的数量和种类来确定信号层的层数;然后根据电源的种类、隔离和抗干扰的要求来确定内电层的数目。这样,整个电路板的板层数目就基本确定了。 

    确定了电路板的层数后,接下来的工作便是合理地排列各层电路的放置顺序。在这一步骤中,需要考虑的因素主要有以下两点。 

    (1)特殊信号层的分布。 

    (2)电源层和地层的分布。 

    如果电路板的层数越多,特殊信号层、地层和电源层的排列组合的种类也就越多,如何来确定哪种组合方式最优也越困难,但总的原则有以下几条。 

    (1)信号层应该与一个内电层相邻(内部电源/地层),利用内电层的大铜膜来为信号层提供屏蔽。 

    (2)内部电源层和地层之间应该紧密耦合,也就是说,内部电源层和地层之间的介质厚度应该取较小的值,以提高电源层和地层之间的电容,增大谐振频率。内部电源层和地层之间的介质厚度可以在Protel的Layer Stack Manager(层堆栈管理器)中进行设置。选择【Design】/【Layer Stack Manager…】命令,系统弹出层堆栈管理器对话框,用鼠标双击Prepreg文本,弹出如图11-1所示对话框,可在该对话框的Thickness选项中改变绝缘层的厚度。


    如果电源和地线之间的电位差不大的话,可以采用较小的绝缘层厚度,例如5mil(0.127mm)。 

    (3)电路中的高速信号传输层应该是信号中间层,并且夹在两个内电层之间。这样两个内电层的铜膜可以为高速信号传输提供电磁屏蔽,同时也能有效地将高速信号的辐射限制在两个内电层之间,不对外造成干扰。 

    (4)避免两个信号层直接相邻。相邻的信号层之间容易引入串扰,从而导致电路功能失效。在两信号层之间加入地平面可以有效地避免串扰。 

    (5)多个接地的内电层可以有效地降低接地阻抗。例如,A信号层和B信号层采用各自单独的地平面,可以有效地降低共模干扰。 

    (6)兼顾层结构的对称性。 

    11.1.2 常用的层叠结构 

    下面通过4层板的例子来说明如何优选各种层叠结构的排列组合方式。 

    对于常用的4层板来说,有以下几种层叠方式(从顶层到底层)。 
    (1)Siganl_1(Top),GND(Inner_1),POWER(Inner_2),Siganl_2(Bottom)。 
    (2)Siganl_1(Top),POWER(Inner_1),GND(Inner_2),Siganl_2(Bottom)。 
    (3)POWER(Top),Siganl_1(Inner_1),GND(Inner_2),Siganl_2(Bottom)。 

    显然,方案3电源层和地层缺乏有效的耦合,不应该被采用。 

    那么方案1和方案2应该如何进行选择呢?一般情况下,设计人员都会选择方案1作为4层板的结构。选择的原因并非方案2不可被采用,而是一般的PCB板都只在顶层放置元器件,所以采用方案1较为妥当。但是当在顶层和底层都需要放置元器件,而且内部电源层和地层之间的介质厚度较大,耦合不佳时,就需要考虑哪一层布置的信号线较少。对于方案1而言,底层的信号线较少,可以采用大面积的铜膜来与POWER层耦合;反之,如果元器件主要布置在底层,则应该选用方案2来制板。 

    如果采用如图11-1所示的层叠结构,那么电源层和地线层本身就已经耦合,考虑对称性的要求,一般采用方案1。 

    在完成4层板的层叠结构分析后,下面通过一个6层板组合方式的例子来说明6层板层叠结构的排列组合方式和优选方法。 

    (1)Siganl_1(Top),GND(Inner_1),Siganl_2(Inner_2),Siganl_3(Inner_3),POWER(Inner_4),Siganl_4(Bottom)。 

    方案1采用了4层信号层和2层内部电源/接地层,具有较多的信号层,有利于元器件之间的布线工作,但是该方案的缺陷也较为明显,表现为以下两方面。 

    ① 电源层和地线层分隔较远,没有充分耦合。 
    ② 信号层Siganl_2(Inner_2)和Siganl_3(Inner_3)直接相邻,信号隔离性不好,容易发生串扰。 
    (2)Siganl_1(Top),Siganl_2(Inner_1),POWER(Inner_2),GND(Inner_3),Siganl_3(Inner_4),Siganl_4(Bottom)。 

    方案2相对于方案1,电源层和地线层有了充分的耦合,比方案1有一定的优势,但是Siganl_1(Top)和Siganl_2(Inner_1)以及Siganl_3(Inner_4)和Siganl_4(Bottom)信号层直接相邻,信号隔离不好,容易发生串扰的问题并没有得到解决。 

    (3)Siganl_1(Top),GND(Inner_1),Siganl_2(Inner_2),POWER(Inner_3),GND(Inner_4),Siganl_3(Bottom)。 
    相对于方案1和方案2,方案3减少了一个信号层,多了一个内电层,虽然可供布线的层面减少了,但是该方案解决了方案1和方案2共有的缺陷。 

    ① 电源层和地线层紧密耦合。 
    ② 每个信号层都与内电层直接相邻,与其他信号层均有有效的隔离,不易发生串扰。 
    ③ Siganl_2(Inner_2)和两个内电层GND(Inner_1)和POWER(Inner_3)相邻,可以用来传输高速信号。两个内电层可以有效地屏蔽外界对Siganl_2(Inner_2)层的干扰和Siganl_2(Inner_2)对外界的干扰。 

    综合各个方面,方案3显然是最优化的一种,同时,方案3也是6层板常用的层叠结构。 
    通过对以上两个例子的分析,相信读者已经对层叠结构有了一定的认识,但是在有些时候,某一个方案并不能满足所有的要求,这就需要考虑各项设计原则的优先级问题。遗憾的是由于 

    电路板的板层设计和实际电路的特点密切相关,不同电路的抗干扰性能和设计侧重点各有所不同,所以事实上这些原则并没有确定的优先级可供参考。但可以确定的是,设计原则2(内部电源层和地层之间应该紧密耦合)在设计时需要首先得到满足,另外如果电路中需要传输高速信号,那么设计原则3(电路中的高速信号传输层应该是信号中间层,并且夹在两个内电层之间)就必须得到满足。表11-1给出了多层板层叠结构的参考方案,供读者参考。

    11.2.1 元器件布局的一般原则 

    设计人员在电路板布局过程中需要遵循的一般原则如下。 

    (1)元器件最好单面放置。如果需要双面放置元器件,在底层(Bottom Layer)放置插针式元器件,就有可能造成电路板不易安放,也不利于焊接,所以在底层(Bottom Layer)最好只放置贴片元器件,类似常见的计算机显卡PCB板上的元器件布置方法。单面放置时只需在电路板的一个面上做丝印层,便于降低成本。 

    (2)合理安排接口元器件的位置和方向。一般来说,作为电路板和外界(电源、信号线)连接的连接器元器件,通常布置在电路板的边缘,如串口和并口。如果放置在电路板的中央,显然不利于接线,也有可能因为其他元器件的阻碍而无法连接。另外在放置接口时要注意接口的方向,使得连接线可以顺利地引出,远离电路板。接口放置完毕后,应当利用接口元器件的String(字符串)清晰地标明接口的种类;对于电源类接口,应当标明电压等级,防止因接线错误导致电路板烧毁。 

    (3)高压元器件和低压元器件之间最好要有较宽的电气隔离带。也就是说不要将电压等级相差很大的元器件摆放在一起,这样既有利于电气绝缘,对信号的隔离和抗干扰也有很大好处。 

    (4)电气连接关系密切的元器件最好放置在一起。这就是模块化的布局思想。 

    (5)对于易产生噪声的元器件,例如时钟发生器和晶振等高频器件,在放置的时候应当尽量把它们放置在靠近CPU的时钟输入端。大电流电路和开关电路也容易产生噪声,在布局的时候这些元器件或模块也应该远离逻辑控制电路和存储电路等高速信号电路,如果可能的话,尽量采用控制板结合功率板的方式,利用接口来连接,以提高电路板整体的抗干扰能力和工作可靠性。 

    (6)在电源和芯片周围尽量放置去耦电容和滤波电容。去耦电容和滤波电容的布置是改善电路板电源质量,提高抗干扰能力的一项重要措施。在实际应用中,印制电路板的走线、引脚连线和接线都有可能带来较大的寄生电感,导致电源波形和信号波形中出现高频纹波和毛刺,而在电源和地之间放置一个0.1F的去耦电容可以有效地滤除这些高频纹波和毛刺。如果电路板上使用的是贴片电容,应该将贴片电容紧靠元器件的电源引脚。对于电源转换芯片,或者电源输入端,最好是布置一个10F或者更大的电容,以进一步改善电源质量。 

    (7)元器件的编号应该紧靠元器件的边框布置,大小统一,方向整齐,不与元器件、过孔和焊盘重叠。元器件或接插件的第1引脚表示方向;正负极的标志应该在PCB上明显标出,不允许被覆盖;电源变换元器件(如DC/DC变换器,线性变换电源和开关电源)旁应该有足够的散热空间和安装空间,外围留有足够的焊接空间等。 

    11.2.2 元器件布线的一般原则 

    设计人员在电路板布线过程中需要遵循的一般原则如下。 

    (1)元器件印制走线的间距的设置原则。不同网络之间的间距约束是由电气绝缘、制作工艺和元件大小等因素决定的。例如一个芯片元件的引脚间距是8mil,则该芯片的【Clearance Constraint】就不能设置为10mil,设计人员需要给该芯片单独设置一个6mil的设计规则。同时,间距的设置还要考虑到生产厂家的生产能力。 

    另外,影响元器件的一个重要因素是电气绝缘,如果两个元器件或网络的电位差较大,就需要考虑电气绝缘问题。一般环境中的间隙安全电压为200V/mm,也就是5.08V/mil。所以当同一块电路板上既有高压电路又有低压电路时,就需要特别注意足够的安全间距。 

    (2)线路拐角走线形式的选择。为了让电路板便于制造和美观,在设计时需要设置线路的拐角模式,可以选择45°、90°和圆弧。一般不采用尖锐的拐角,最好采用圆弧过渡或45°过渡,避免采用90°或者更加尖锐的拐角过渡。 

    导线和焊盘之间的连接处也要尽量圆滑,避免出现小的尖脚,可以采用补泪滴的方法来解决。当焊盘之间的中心距离小于一个焊盘的外径D时,导线的宽度可以和焊盘的直径相同;如果焊盘之间的中心距大于D,则导线的宽度就不宜大于焊盘的直径。 

    导线通过两个焊盘之间而不与其连通的时候,应该与它们保持最大且相等的间距,同样导线和导线之间的间距也应该均匀相等并保持最大。 

    (3)印制走线宽度的确定方法。走线宽度是由导线流过的电流等级和抗干扰等因素决定的,流过电流越大,则走线应该越宽。一般电源线就应该比信号线宽。为了保证地电位的稳定(受地电流大小变化影响小),地线也应该较宽。实验证明:当印制导线的铜膜厚度 

    为0.05mm时,印制导线的载流量可以按照20A/mm2进行计算,即0.05mm厚,1mm宽的导线可以流过1A的电流。所以对于一般的信号线来说10~30mil的宽度就可以满足要求了;高电压,大电流的信号线线宽大于等于40mil,线间间距大于30mil。为了保证导线的抗剥离强度和工作可靠性,在板面积和密度允许的范围内,应该采用尽可能宽的导线来降低线路阻抗,提高抗干扰性能。 

    对于电源线和地线的宽度,为了保证波形的稳定,在电路板布线空间允许的情况下,尽量加粗,一般情况下至少需要50mil。 

    (4)印制导线的抗干扰和电磁屏蔽。导线上的干扰主要有导线之间引入的干扰、电源线引入的干扰和信号线之间的串扰等,合理安排和布置走线及接地方式可以有效减少干扰源,使设计出的电路板具备更好的电磁兼容性能。 

    对于高频或者其他一些重要的信号线,例如时钟信号线,一方面其走线要尽量宽,另一方面可以采取包地的形式使其与周围的信号线隔离起来(就是用一条封闭的地线将信号线“包裹”起来,相当于加一层接地屏蔽层)。 

    对于模拟地和数字地要分开布线,不能混用。如果需要最后将模拟地和数字地统一为一个电位,则通常应该采用一点接地的方式,也就是只选取一点将模拟地和数字地连接起来,防止构成地线环路,造成地电位偏移。 

    完成布线后,应在顶层和底层没有铺设导线的地方敷以大面积的接地铜膜,也称为敷铜,用以有效减小地线阻抗,从而削弱地线中的高频信号,同时大面积的接地可以对电磁干扰起抑制作用。 

    电路板中的一个过孔会带来大约10pF的寄生电容,对于高速电路来说尤其有害;同时,过多的过孔也会降低电路板的机械强度。所以在布线时,应尽可能减少过孔的数量。另外,在使用穿透式的过孔(通孔)时,通常使用焊盘来代替。这是因为在电路板制作时,有可能因为加工的原因导致某些穿透式的过孔(通孔)没有被打穿,而焊盘在加工时肯定能够被打穿,这也相当于给制作带来了方便。 

    以上就是PCB板布局和布线的一般原则,但在实际操作中,元器件的布局和布线仍然是一项很灵活的工作,元器件的布局方式和连线方式并不唯一,布局布线的结果很大程度上还是取决于设计人员的经验和思路。可以说,没有一个标准可以评判布局和布线方案的对与错,只能比较相对的优和劣。所以以上布局和布线原则仅作为设计参考,实践才是评判优劣的唯一标准。 

    11.2.3 多层PCB板布局和布线的特殊要求 

    相对于简单的单层板和双层板,多层PCB板的布局和布线有其独特的要求。 

    对于多层PCB板的布局,归纳起来就是要合理安排使用不同电源和地类型元器件的布局。其目的一是为了给后面的内电层的分割带来便利,同时也可以有效地提高元器件之间的抗干扰能力。 

    所谓合理安排使用不同电源和地类型元器件的布局,就是将使用相同电源等级和相同类型地的元器件尽量放在一起。例如当电路原理图上有+3.3V、+5V、−5V、+15V、−15V等多个电压等级时,设计人员应该将使用同一电压等级的元器件集中放置在电路板的某一个区域。当然这个布局原则并不是布局的唯一标准,同时还需要兼顾其他的布局原则(双层板布局的一般原则),这就需要设计人员根据实际需求来综合考虑各种因素,在满足其他布局原则的基础上,尽量将使用相同电源等级和相同类型地的元器件放在一起。对于多层PCB板的布线,归纳起来就是一点:先走信号线,后走电源线。这是因为多层板的电源和地通常都通过连接内电层来实现。这样做的好处是可以简化信号层的走线,并且通过内电层这种大面积铜膜连接的方式来有效降低接地阻抗和电源等效内阻,提高电路的抗干扰能力;同时,大面积铜膜所允许通过的最大电流也加大了。 

    一般情况下,设计人员需要首先合理安排使用不同电源和地类型元器件的布局,同时兼顾其他布局原则,然后按照前面章节所介绍的方法对元器件进行布线(只布信号线),完成后分割内电层,确定内电层各部分的网络标号,最后通过内电层和信号层上的过孔和焊盘来进行连接。焊盘和过孔在通过内电层时,与其具有相同网络标号的焊盘或过孔会通过一些未被腐蚀的铜膜连接到内电层,而不属于该网络的焊盘周围的铜膜会被完全腐蚀掉,也就是说不会与该内电层导通。 

    11.3 中间层创建与设置 

    中间层,就是在PCB板顶层和底层之间的层,其结构参见图11-1,读者可以参考图中的标注进行理解。那中间层在制作过程中是如何实现的呢?简单地说多层板就是将多个单层板和双层板压制而成,中间层就是原先单层板和双层板的顶层或底层。在PCB板的制作过程中,首先需要在一块基底材料(一般采用合成树脂材料)的两面敷上铜膜,然后通过光绘等工艺将图纸中的导线连接关系转换到印制板的板材上(对图纸中的印制导线、焊盘和过孔覆膜加以保护,防止这些部分的铜膜在接下来的腐蚀工艺中被腐蚀),再通过化学腐蚀的方式(以FeCl3或H2O2为主要成分的腐蚀液)将没有覆膜保护部分的铜膜腐蚀掉,最后完成钻孔,印制丝印层等后期处理工作,这样一块PCB板就基本制作完成了。同理,多层PCB板就是在多个板层完成后再采取压制工艺将其压制成一块电路板,而且为了减少成本和过孔干扰,多层PCB板往往并不比双层板和单层板厚多少,这就使得组成多层PCB板的板层相对于普通的双层板和单层板往往厚度更小,机械强度更低,导致对加工的要求更高。所以多层PCB板的制作费用相对于普通的双层板和单层板就要昂贵许多。 

    但由于中间层的存在,多层板的布线变得更加容易,这也是选用多层板的主要目的。然而在实际应用中,多层PCB板对手工布线提出了更高的要求,使得设计人员需要更多地得到EDA软件的帮助;同时中间层的存在使得电源和信号可以在不同的板层中传输,信号的隔离和抗干扰性能会更好,而且大面积的敷铜连接电源和地网络可以有效地降低线路阻抗,减小因为共同接地造成的地电位偏移。因此,采用多层板结构的PCB板通常比普通的双层板和单层板有更好的抗干扰性能。 

    11.3.1 中间层的创建 

    Protel系统中提供了专门的层设置和管理工具—Layer Stack Manager(层堆栈管理器)。这个工具可以帮助设计者添加、修改和删除工作层,并对层的属性进行定义和修改。选择【Design】/【Layer Stack Manager…】命令,弹出如图11-2所示的层堆栈管理器属性设置对话框。

    上图所示的是一个4层PCB板的层堆栈管理器界面。除了顶层(TopLayer)和底层(BottomLayer)外,还有两个内部电源层(Power)和接地层(GND),这些层的位置在图中都有清晰的显示。双击层的名称或者单击Properties按钮可以弹出层属性设置对话框,如图11-3所示。

    在该对话框中有3个选项可以设置。 

    (1)Name:用于指定该层的名称。 
    (2)Copper thickness:指定该层的铜膜厚度,默认值为1.4mil。铜膜越厚则相同宽度的导线所能承受的载流量越大。 
    (3)Net name:在下拉列表中指定该层所连接的网络。本选项只能用于设置内电层,信号层没有该选项。如果该内电层只有一个网络例如“+5V”,那么可以在此处指定网络名称;但是如果内电层需要被分割为几个不同的区域,那么就不要在此处指定网络名称。 

    在层间还有绝缘材质作为电路板的载体或者用于电气隔离。其中Core和Prepreg都是绝缘材料,但是Core是板材的双面都有铜膜和连线存在,而Prepreg只是用于层间隔离的绝缘物质。两者的属性设置对话框相同,双击Core或Prepreg,或者选择绝缘材料后单击Properties按钮可以弹出绝缘层属性设置对话框。如图11-4所示。 

    绝缘层的厚度和层间耐压、信号耦合等因素有关,在前面的层数选择和叠加原则中已经介绍过。如果没有特殊的要求,一般选择默认值。 

    除了“Core”和“Prepreg”两种绝缘层外,在电路板的顶层和底层通常也会有绝缘层。点击图11-2左上角的Top Dielectric(顶层绝缘层)或Bottom Dielectric(底层绝缘层)前的选择框选择是否显示绝缘层,单击旁边的按钮可以设置绝缘层的属性。 

    在顶层和底层绝缘层设置的选项下面有一个层叠模式选择下拉列表,可以选择不同的层叠模式:Layer Pairs(层成对)、Internal Layer Pairs(内电层成对)和Build-up(叠压)。在前面讲过,多层板实际上是由多个双层板或单层板压制而成的,选择不同的模式,则表示在实际制作中采用不同压制方法,所以如图11-5所示的“Core”和“Prepreg”的位置也不同。例如,层成对模式就是两个双层板夹一个绝缘层(Prepreg),内电层成对模式就是两个单层板夹一个双层板。通常采用默认的Layer Pairs(层成对)模式。

     


    在图11-2所示的层堆栈管理器属性设置对话框右侧有一列层操作按钮,各个按钮的功能如下。 

    (1)Add Layer:添加中间信号层。例如,需要在GND和Power之间添加一个高速信号层,则应该首先选择GND层,如图11-6所示。单击Add Layer按钮,则会在GND层下添加一个信号层,如图11-7所示,其默认名称为MidLayer1,MidLayer2,„,依此类推。双击层的名称或者点击Properties按钮可以设置该层属性。

    (2)Add Plane:添加内电层。添加方法与添加中间信号层相同。先选择需要添加的内电层的位置,然后单击该按钮,则在指定层的下方添加内电层,其默认名称为Internal Plane1,InternalPlane2,„,依此类推。双击层的名称或者点击Properties按钮可以设置该层属性。 

    (3)Delete:删除某个层。除了顶层和底层不能被删除,其他信号层和内电层均能够被删除,但是已经布线的中间信号层和已经被分割的内电层不能被删除。选择需要删除的层,单击该按钮,弹出如图11-8所示的对话框,单击Yes按钮则该层就被删除。 

    (4)Move Up:上移一个层。选择需要上移的层(可以是信号层,也可以是内电层),单击该按钮,则该层会上移一层,但不会超过顶层。 

    (5)Move Down:下移一个层。与Move Up按钮相似,单击该按钮,则该层会下移一层,但不会超过底层。 
    (6)Properties:属性按钮。单击该按钮,弹出类似图11-3所示的层属性设置对话框。 

    11.3.2 中间层的设置 

    完成层堆栈管理器的相关设置后,单击OK按钮,退出层堆栈管理器,就可以在PCB编辑界面中进行相关的操作。在对中间层进行操作时,需要首先设置中间层在PCB编辑界面中是否显示。选择【Design】/【Options…】命令,弹出如图11-9所示的选项设置对话框,在Internal planes下方的内电层选项上打勾,显示内电层。

     

    在完成设置后,就可以在PCB编辑环境的下方看到显示的层了,如图11-10所示。用鼠标单击电路板板层标签即可切换不同的层以进行操作。如果不习惯系统默认的颜色,可以选择【Tools】/【Preferences…】命令下的Colors选项自定义各层的颜色,相关内容在第8章已有介绍,供读者参考。

    11.4 内电层设计 

    多层板相对于普通双层板和单层板的一个非常重要的优势就是信号线和电源可以分布在不同的板层上,提高信号的隔离程度和抗干扰性能。内电层为一铜膜层,该铜膜被分割为几个相互隔离的区域,每个区域的铜膜通过过孔与特定的电源或地线相连,从而简化电源和地网络的走线,同时可以有效减小电源内阻。 

    11.4.1 内电层设计相关设置 

    内电层通常为整片铜膜,与该铜膜具有相同网络名称的焊盘在通过内电层的时候系统会自动将其与铜膜连接起来。焊盘/过孔与内电层的连接形式以及铜膜和其他不属于该网络的焊盘的安全间距都可以在Power Plane Clearance选项中设置。选择【Design】/【Rules…】命令,单击Manufacturing选项,其中的Power Plane Clearance和Power Plane Connect Style选项与内电层相关,其内容介绍如下。 

    1.Power Plane Clearance 

    该规则用于设置内电层安全间距,主要指与该内电层没有网络连接的焊盘和过孔与该内电层的安全间距,如图11-11所示。在制造的时候,与该内电层没有网络连接的焊盘在通过内电层时其周围的铜膜就会被腐蚀掉,腐蚀的圆环的尺寸即为该约束中设置的数值。

     

    2.Power Plane Connect Style 

    该规则用于设置焊盘与内电层的形式。主要指与该内电层有网络连接的焊盘和过孔与该内电层连接时的形式。如图11-12所示。

    单击Properties(属性)按钮,弹出其规则设置对话框,如图11-13所示。对话框左侧为规则的适用范围,在右侧的Rule Attributes下拉列表中可以选择连接方式:Relief Connect、Direct Connect和No connect。Direct Connect即直接连接,焊盘在通过内电层的时候不把周围的铜膜腐蚀掉,焊盘和内电层铜膜直接连接;No connect指没有连接,即与该铜膜网络同名的焊盘不会被连接到内电层;设计人员一般采用系统默认的Relief Connect连接形式,该规则的设置对话框如图11-13所示。

    这种焊盘连接形式通过导体扩展和绝缘间隙与内电层保持连接,其中在Conductor Width选项中设置导体出口的宽度;Conductors选项中选择导体出口的数目,可以选择2个或4个;Expansion选项中设置导体扩展部分的宽度;Air-Gap选项中设置绝缘间隙的宽度。 


    11.4.2 内电层分割方法 

    在本章的前几节已经介绍了多层板的层叠结构的选择,内电层的建立和相关的设置,在本小节中将主要介绍多层板内电层的分割方法和步骤,供读者参考。 

    (1)在分割内电层之前,首先需要定义一个内电层,这在前面的章节中已经有了介绍,本处不再赘述。选择【Design】/【Split Planes…】命令,弹出如图11-14所示的内电层分割对话框。该对话框中的Current split planes栏中指内电层已经分割的区域。在本例中,内电层尚未被分割,所以图11-14所示的Current split planes栏为空白。Current split planes栏下的Add、Edit、Delete按钮分别用于添加新的电源区域,编辑选中的网络和删除选中的网络。按钮下方的Show Selected Split Plane View选项用于设置是否显示当前选择的内电层分割区域的示意图。如果选择该选项,则在其下方的框中将显示内电层中该区域所划分网络区域的缩略图,其中与该内电层网络同名的引脚、焊盘或连线将在缩略图中高亮显示,不选择该选项则不会高亮显示。Show Net For选项,选择该选项,如果定义内电层的时候已经给该内电层指定了网络,则在该选项上方的方框中显示与该网络同名的连线和引脚情况。 

    (2)单击Add按钮,弹出如图11-15所示的内电层分割设置对话框。

    在如图11-15所示的对话框中,Track Width用于设置绘制边框时的线宽,同时也是同一内电层上不同网络区域之间的绝缘间距,所以通常将Track Width设置的比较大。建议读者在输入数值时也要输入单位。如果在该处只输入数字,不输入单位,那么系统将默认使用当前PCB编辑器中的单位。 

    Layer选项用于设置指定分割的内电层,此处可以选择Power和GND内电层。本例中有多种电压等级存在,所以需要分割Power内电层来为元器件提供不同等级的电压。 

    Connect to Net选项用于指定被划分的区域所连接的网络。通常内电层用于电源和地网络的布置,但是在Connect to Net下拉列表中可以看到,可以将内层的整片网络连接到信号网络,用于信号传输,只是一般设计者不这样处理。信号所要求的信号电压和电流弱,对导线要求小,而电源电流大,需要更小的等效内阻。所以一般信号在信号层走线,内电层专用于电源和地网络连线。 

    (3)单击图11-15内电层分割设置对话框中的OK按钮,进入网络区域边框绘制 状态。 

    在绘制内电层边框时,用户一般将其他层面的信息隐藏起来,只显示当前所编辑的内电层,方便进行边框的绘制。选择【Tools】/【Preferences…】命令,弹出如图11-16所示的对话框。选择Display选项,再选择Single Layer Mode复选框,如图11-16所示。这样,除了当前工作层Power之外,其余层都被隐藏起来了,显示效果如图11-17所示。

     


    在分割内电层时,因为分割的区域将所有该网络的引脚和焊盘都包含在内,所以用户通常需要知道与该电源网络同名的引脚和焊盘的分布情况,以便进行分割。在左侧Browse PCB工具中选择VCC网络(如图11-18所示),单击Select按钮将该网络点亮选取。 

    图11-19所示为将VCC网络点亮选取后,网络标号为VCC的焊盘和引脚与其他网络标号的焊盘和引脚的对比。 
    选择了这些同名的网络焊盘后,在绘制边界的时候就可以将这些

    焊盘都包含到划分的区域中去。此时这些电源网络就可以不通过信号层连线而是直接通过焊盘连接到内电层。 
    (4)绘制内电层分割区域。 

    选择【Design】/【Split Planes…】命令,弹出如图11-14所示的内电层分割对话框,单击Add按钮,弹出如图11-15所示的内电层分割设置对话框。首先选择12V网络,单击OK按钮,光标变为十字状,此时就可以在内电层开始分割工作了。 

    在绘制边框边界线时,可以按“Shift+空格键”来改变走线的拐角形状,也可以按Tab键来改变内电层的属性。在绘制完一个封闭的区域后(起点和终点重合),系统自动弹出如图11-20所示的内电层分割对话框,在该对话框中可以看到一个已经被分割的区域,在PCB编辑界面中显示如图11-21所示。

     

    在添加完内电层后,放大某个12V焊盘,可以看到该焊盘没有与导线相连接(如图11-22(a)所示),但是在焊盘上出现了一个“+”字标识,表示该焊盘已经和内电层连接。 

    将当前工作层切换到Power层,可以看到该焊盘在内电层的连接状态。由于内电层通常是整片铜膜,所以图11-22(b)中焊盘周围所示部分将在制作过程中被腐蚀掉,可见GND和该内电层是绝缘的。


    在内电层添加了12V区域后,还可以根据实际需要添加别的网络,就是说将整个Power内电层分割为几个不同的相互隔离的区域,每个区域连接不同的电源网络。最后完成效果如图11-23所示。 

    在完成内电层的分割之后,可以在如图11-20所示的对话框中编辑和删除已放置的内电层网络。单击Edit按钮可以弹出如图11-15所示的内电层属性对话框,在该对话框中可以修改边界线宽、内电层层面和连接的网络,但不能修改边界的形状。如果对边界的走向和形状不满意,则只能单击Delete按钮,重新绘制边界;或者选择【Edit】/【Move】/【Split Plane Vertices】命令来修改内电层边界线,此时可以通过移动边界上的控点来改变边界的形状,如图11-24所示。完成后在弹出的确认对话框中单击Yes按钮即可完成重绘。

    11.4.3 内电层分割基本原则 

    在完成内电层的分割之后,本节再介绍几个在内电层分割时需要注意的问题。 

    (1)在同一个内电层中绘制不同的网络区域边界时,这些区域的边界线可以相互重合,这也是通常采用的方法。因为在PCB板的制作过程中,边界是铜膜需要被腐蚀的部分,也就是说,一条绝缘间隙将不同网络标号的铜膜给分割开来了,如图11-25所示。这样既能充分利用内电层的铜膜区域,也不会造成电气隔离冲突。 

    (2)在绘制边界时,尽量不要让边界线通过所要连接到的区域的焊盘,如图11-26所示。由于边界是在PCB板的制作过程中需要被腐蚀的铜膜部分,有可能出现因为制作工艺的原因导致焊盘与内电层连接出现问题。所以在PCB设计时要尽量保证边界不通过具有相同网络名称的焊盘。

    (3)在绘制内电层边界时,如果由于客观原因无法将同一网络的所有焊盘都包含在内,那么也可以通过信号层走线的方式将这些焊盘连接起来。但是在多层板的实际应用中,应该尽量避免这种情况的出现。因为如果采用信号层走线的方式将这些焊盘与内电层连接,就相当于将一个较大的电阻(信号层走线电阻)和较小的电阻(内电层铜膜电阻)串联,而采用多层板的重要优势就在于通过大面积铜膜连接电源和地的方式来有效减小线路阻抗,减小PCB接地电阻导致的地电位偏移,提高抗干扰性能。所以在实际设计中,应该尽量避免通过导线连接电源网络。 

    (4)将地网络和电源网络分布在不同的内电层层面中,以起到较好的电气隔离和抗干扰的效果。 

    (5)对于贴片式元器件,可以在引脚处放置焊盘或过孔来连接到内电层,也可以从引脚 

    处引出一段很短的导线(引线应该尽量粗短,以减小线路阻抗),并且在导线的末端放置焊盘和过孔来连接,如图11-27所示。 

    (6)关于去耦电容的放置。前面提到在芯片的附近应该放置0.01μF的去耦电容,对于电源类的芯片,还应该放置10F或者更大的滤波电容来滤除电路中的高频干扰和纹波,并用尽可能短的导线连接到芯片的引脚上,再通过焊盘连接到内电层。 

    (7)如果不需要分割内电层,那么在内电层的属性对话框中直接选择连接到网络就可以了,不再需要内电层分割工具。

    11.5 多层板设计原则汇总 

    在本章及前面几章的介绍中,我们已经强调了一些关于PCB设计所需要遵循的原则,在这里我们将这些原则做一汇总,以供读者在设计时参考,也可以作为设计完成后检查时参考的依据。 

    1.PCB元器件库的要求 

    (1)PCB板上所使用的元器件的封装必须正确,包括元器件引脚的大小尺寸、引脚的间距、引脚的编号、边框的大小和方向表示等。 

    (2)极性元器件(电解电容、二极管、三极管等)正负极或引脚编号应该在PCB元器件库中和PCB板上标出。 

    (3)PCB库中元器件的引脚编号和原理图元器件的引脚编号应当一致,例如在前面章节中介绍了二极管PCB库元器件中的引脚编号和原理图库中引脚编号不一致的问题。 

    (4)需要使用散热片的元器件在绘制元器件封装时应当将散热片尺寸考虑在内,可以将元器件和散热片一并绘制成为整体封装的形式。 

    (5)元器件的引脚和焊盘的内径要匹配,焊盘的内径要略大于元器件的引脚尺寸,以便安装 
    。 
    2.PCB元件布局的要求 

    (1)元器件布置均匀,同一功能模块的元器件应该尽量靠近布置。 
    (2)使用同一类型电源和地网络的元器件尽量布置在一起,有利于通过内电层完成相互之间的电气连接。 
    (3)接口元器件应该靠边放置,并用字符串注明接口类型,接线引出的方向通常应该离开电路板。 
    (4)电源变换元器件(如变压器、DC/DC变换器、三端稳压管等)应该留有足够的散热空间。 
    (5)元器件的引脚或参考点应放置在格点上,有利于布线和美观。 
    (6)滤波电容可以放置在芯片的背面,靠近芯片的电源和地引脚。 

    (7)元器件的第一引脚或者标识方向的标志应该在PCB上标明,不能被元器件覆盖。 
    (8)元器件的标号应该紧靠元器件边框,大小统一,方向整齐,不与焊盘和过孔重叠,不能放置在元器件安装后被覆盖的区域。 

    3.PCB布线要求 

    (1)不同电压等级电源应该隔离,电源走线不应交叉。 
    (2)走线采用45°拐角或圆弧拐角,不允许有尖角形式的拐角。 
    (3)PCB走线直接连接到焊盘的中心,与焊盘连接的导线宽度不允许超过焊盘外径的大小。 
    (4)高频信号线的线宽不小于20mil,外部用地线环绕,与其他地线隔离。 
    (5)干扰源(DC/DC变换器、晶振、变压器等)底部不要布线,以免干扰。 
    (6)尽可能加粗电源线和地线,在空间允许的情况下,电源线的宽度不小于50mil。 
    (7)低电压、低电流信号线宽9~30mil,空间允许的情况下尽可能加粗。 
    (8)信号线之间的间距应该大于10mil,电源线之间间距应该大于20mil。 
    (9)大电流信号线线宽应该大于40mil,间距应该大于30mil。 
    (10)过孔最小尺寸优选外径40mil,内径28mil。在顶层和底层之间用导线连接时,优选焊盘。 
    (11)不允许在内电层上布置信号线。 
    (12)内电层不同区域之间的间隔宽度不小于40mil。 
    (13)在绘制边界时,尽量不要让边界线通过所要连接到的区域的焊盘。 
    (14)在顶层和底层铺设敷铜,建议设置线宽值大于网格宽度,完全覆盖空余空间,且不留有死铜,同时与其他线路保持30mil(0.762mm)以上间距(可以在敷铜前设置安全间距,敷铜完毕后改回原有安全间距值)。 
    (15)在布线完毕后对焊盘作泪滴处理。 
    (16)金属壳器件和模块外部接地。 
    (17)放置安装用和焊接用焊盘。 
    (18)DRC检查无误。 

    4.PCB分层的要求 

    (1)电源平面应该靠近地平面,与地平面有紧密耦合,并且安排在地平面之下。 
    (2)信号层应该与内电层相邻,不应直接与其他信号层相邻。 
    (3)将数字电路和模拟电路隔离。如果条件允许,将模拟信号线和数字信号线分层布置,并采用屏蔽措施;如果需要在同一信号层布置,则需要采用隔离带、地线条的方式减小干扰;模拟电路和数字电路的电源和地应该相互隔离,不能混用。 
    (4)高频电路对外干扰较大,最好单独安排,使用上下都有内电层直接相邻的中间信号层来传输,以便利用内电层的铜膜减少对外干扰。 

    11.6 本 章 小 结 

    本章主要介绍了多层电路板的设计步骤,包括多层板层数的选择、层叠结构的选择;多层板布局布线与普通双层板布局布线的相同和不同;多层板特有的中间层的创建和设置,以及内电层设计。根据本章所罗列的步骤,读者已经能够完成多层PCB的初步设计工作。在接下来的章节中,我们将介绍PCB的电磁兼容和信号完整性的相关内容,以便更好地完成PCB设计。

    展开全文
  • 外行人都看懂的SpringCloud,错过了血亏!

    万次阅读 多人点赞 2018-08-27 09:31:50
    一、前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用Spring...)当然了,我的水平是有限的,可能会有一些理解的的概念/知识点,还请大家不吝在评论区指正啊~~ SpringClou...

    一、前言

    只有光头才能变强
    精选文章导航:https://github.com/ZhongFuCheng3y/3y

    认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)…

    所以,这篇主要来讲讲SpringCloud的一些基础的知识。(我就是现学现卖了,主要当做我学习SpringCloud的笔记吧!)当然了,我的水平是有限的,可能会有一些理解错的的概念/知识点,还请大家不吝在评论区指正啊~~

    SpringCloud GitHub Demo(看完文章的同学可以自己练手玩玩):

    项目结构图:

    二、集群/分布式/微服务/SOA是什么?

    像我这种技术小白,看到这些词(集群/分布式/微服务/SOA)的时候,感觉就是遥不可及的(高大尚的技术!!)。就好像刚学Java面向对象的时候,在论坛上翻阅资料的时候,无意看到"面向切面编程",也认为这是遥不可及的(高大尚的技术!!)。

    但真正接触到"面向切面编程"的时候,发现原来就是如此啊,也没什么大不了的。只不过当时被它的名字给唬住了…

    不知道各位在刚接触这些名字集群/分布式/微服务/SOA的时候,有没有被唬住了呢??

    • 下面我就简单说说这些名词的意思

    2.1什么是集群

    以下内容来源维基百科:

    计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多

    集群技术特点:

    • 通过多台计算机完成同一个工作,达到更高的效率。
    • 两机或多机内容、工作过程等完全一样。如果一台死机,另一台可以起作用。

    在维基百科上说得也挺明白的了,我来举个例子吧。

    • 小周在公司写Java程序,但公司业务在发展,一个Java开发者可能忙不过来,小周有的时候也得请个假呀。于是请了3y过去一起做Java开发。平时小周和3y就写Java程序,但3y可能有事要回学校一趟。没事,公司还有小周做Java开发呢,公司开发还能继续运作。
      • 3y跟小周都是做Java开发
      • 3y来了,小周的工作可以分担一些。
      • 3y请假了,还有小周在呢。

    我写了一个910便利网发布到服务器去了,现在越来越多的人访问了,访问有点慢,怎么办???很简单,(只有充钱才能变强),加配置吧(加cpu,加内存)。升级完配置之后,访问人数越来越多,于是发现又不禁用啦,在这台机器上加配置已经解决不了了,怎么办???很简单,(只有充钱才能变强),我再买一台服务器,将910便利网也发布到新买的这台服务器上去

    特点:

    • 这两台服务器都是运行同一个系统—>910便利网

    好处:

    • 本来只有一台机器处理访问,现在有两台机器处理访问了,分担了压力
    • 如果其中一台忘记缴费了,暂时用不了了。没关系,还有另一台可以用呢。

    集群:同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)

    2.2什么是分布式

    以下内容来源维基百科:

    分布式系统是一组计算机,通过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。组件之间彼此进行交互以实现一个共同的目标

    我也来举个例子来说明一下吧:

    • 现在公司有小周和3y一起做Java开发,做Java开发一般jQuery,AJAX都能写一点,所以这些活都由我们来干。可是呢,3y对前端不是很熟,有的时候调试半天都调不出来。老板认为3y是真的菜!于是让小周专门来处理前端的事情。这样3y就高兴了,可以专心写自己的Java,前端就专门交由小周负责了。于是,小周和3y就变成了协作开发
      • 3y对前端不熟(能写出来),但在调试的时候可能会花费很多时间
      • 小周来专门做前端的事,3y可以专心写自己的Java程序了。
      • 都是为了项目正常运行以及迭代。

    我的910便利网已经部署到两台服务器去了,但是越来越多的人去访问。现在也逐渐承受不住啦。那现在怎么办啊??那继续充钱变强??作为一个理智的我,肯定得想想是哪里有问题。现在910便利网的模块有好几个,全都丢在同一个Tomcat里边。

    其实有些模块的访问是很低的(比如后台管理),那我可不可以这样做:将每个模块抽取独立出来,访问量大的模块用好的服务器装着,没啥人访问的模块用差的服务器装着。这样的好处是:一、资源合理利用了(没人访问的模块用性能差的服务器,访问量大的模块单独提升性能就好了)。二、耦合度降低了:每个模块独立出来,各干各的事(专业的人做专业的事),便于扩展

    特点:

    • 将910便利网的功能拆分,模块之间独立,在使用的时候再将这些独立的模块组合起来就是一个系统了。

    好处:

    • 模块之间独立,各做各的事,便于扩展,复用性高
    • 高吞吐量。某个任务需要一个机器运行10个小时,将该任务用10台机器的分布式跑(将这个任务拆分成10个小任务),可能2个小时就跑完了

    分布式:一个业务分拆多个子业务,部署在不同的服务器上(不同的服务器,运行不同的代码,为了同一个目的)

    2.3集群/分布式

    集群和分布式并不冲突,可以有分布式集群

    现在3y的公司规模变大了,有5个小伙子写Java,4个小伙子写前端,2个小伙子做测试,1个小伙子做DBA。

    • Java,前端,测试,DBA的关系看作是分布式的
    • 5个Java看作是集群的(前端,测试同理)…

    2.4分布式/微服务/SOA

    其实我认为分布式/微服务/SOA这三个概念是差不多的,了解了其中的一个,然后将自己的理解往上面套就好了。没必要细分每个的具体概念~~(当然了,我很期待有大佬可以在评论区留言说下自己的看法哈)

    参考资料:

    三、CAP理论

    从上面所讲的分布式概念我们已经知道,分布式简单理解就是:一个业务分拆多个子业务,部署在不同的服务器上

    • 一般来说,一个子业务我们称为节点

    如果你接触过一些分布式的基础概念,那肯定会听过CAP这个理论。就比如说:你学了MySQL的InnoDB存储引擎相关知识,你肯定听过ACID!

    首先,我们来看一下CAP分别代表的是什么意思:

    • C:数据一致性(consistency)
      • 所有节点拥有数据的最新版本
    • A:可用性(availability)
      • 数据具备高可用性
    • P:分区容错性(partition-tolerance)
      • 容忍网络出现分区,分区之间网络不可达。

    下面有三个节点(它们是集群的),此时三个节点都能够相互通信:

    由于我们的系统是分布式的,节点之间的通信是通过网络来进行的。只要是分布式系统,那很有可能会出现一种情况:因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域

    • 数据就散布在了这些不连通的区域中,这就叫分区

    现在出现了网络分区后,此时有一个请求过来了,想要注册一个账户。

    此时我们节点一和节点三是不可通信的,这就有了抉择:

    • 如果允许当前用户注册一个账户,此时注册的记录数据只会在节点一和节点二或者节点二和节点三同步,因为节点一和节点三的记录不能同步的。
      • 这种情况其实就是选择了可用性(availability),抛弃了数据一致性(consistency)
    • 如果不允许当前用户注册一个账户(就是要等到节点一和节点三恢复通信)。节点一和节点三一旦恢复通信,我们就可以保证节点拥有的数据是最新版本
      • 这种情况其实就是抛弃了可用性(availability),选择了数据一致性(consistency)

    3.1再次梳理一下CAP理论

    一般我们说的分布式系统,P:分区容错性(partition-tolerance)这个是必需的,这是客观存在的。

    CAP是无法完全兼顾的,从上面的例子也可以看出,我们可以选AP,也可以选CP。但是,要注意的是:不是说选了AP,C就完全抛弃了。不是说选了CP,A就完全抛弃了!

    在CAP理论中,C所表示的一致性是强一致性(每个节点的数据都是最新版本),其实一致性还有其他级别的:

    • 弱一致性:弱一致性是相对于强一致性而言,它不保证总能得到最新的值;
    • 最终一致性(eventual consistency):放宽对时间的要求,在被调完成操作响应后的某个时间点,被调多个节点的数据最终达成一致

    可用性的值域可以定义成0到100%的连续区间

    所以,CAP理论定义的其实是在容忍网络分区的条件下,“强一致性”和“极致可用性”无法同时达到

    参考资料:

    扩展阅读:

    四、SpringCloud就是这么简单

    相信大家读到这里,对分布式/微服务已经有一定的了解了,其实单从概念来说,是非常容易理解的。只是很可能被它的名字给唬住了。

    下面我就来讲讲SpringCloud最基础的知识~

    4.1为什么需要SpringCloud?

    前面也讲了,从分布式/微服务的角度而言:就是把我们一的项目,分解成多个的模块。这些小的模块组合起来,完成功能。

    举个可能不太恰当的例子(现实可能不会这么拆分,但意思到位就好了):

    拆分出多个模块以后,就会出现各种各样的问题,而SpringCloud提供了一整套的解决方案!

    • 注:这些模块是独立成一个子系统的(不同主机)。

    SpringCloud的基础功能

    • 服务治理: Spring Cloud Eureka
    • 客户端负载均衡: Spring Cloud Ribbon
    • 服务容错保护: Spring Cloud Hystrix
    • 声明式服务调用: Spring Cloud Feign
    • API网关服务:Spring Cloud Zuul
    • 分布式配置中心: Spring Cloud Config

    SpringCloud的高级功能(本文不讲):

    • 消息总线: Spring Cloud Bus
    • 消息驱动的微服务: Spring Cloud Stream
    • 分布式服务跟踪: Spring Cloud Sleuth

    五、引出Eureka

    那会出现什么问题呢??首当其冲的就是子系统之间的通讯问题。子系统与子系统之间不是在同一个环境下,那就需要远程调用。远程调用可能就会想到httpClient,WebService等等这些技术来实现。

    既然是远程调用,就必须知道ip地址,我们可能有以下的场景。

    • 功能实现一:A服务需要调用B服务
      • 在A服务的代码里面调用B服务,显式通过IP地址调用http://123.123.123.123:8888/java3y/3
    • 功能实现二:A服务调用B服务,B服务调用C服务,C服务调用D服务
      • 在A服务的代码里面调用B服务,显式通过IP地址调用:http://123.123.123.123:8888/java3y/3,(同样地)B->C,C->D
    • 功能实现三:D服务调用B服务,B服务调用C服务
      • 在D服务的代码里面调用B服务,显式通过IP地址调用:http://123.123.123.123:8888/java3y/3,(同样地)B->C
    • …等等等等

    万一,我们B服务的IP地址变了,想想会出现什么问题:A服务,D服务(等等)需要手动更新B服务的地址

    • 在服务多的情况下,手动来维护这些静态配置就是噩梦!

    为了解决微服务架构中的服务实例维护问题(ip地址), 产生了大量的服务治理框架和产品。 这些框架和产品的实现都围绕着服务注册与服务发现机制来完成对微服务应用实例的自动化管理

    在SpringCloud中我们的服务治理框架一般使用的就是Eureka。

    我们的问题:

    • 现在有A、B、C、D四个服务,它们之间会互相调用(而且IP地址很可能会发生变化),一旦某个服务的IP地址变了,那服务中的代码要跟着变,手动维护这些静态配置(IP)非常麻烦!

    Eureka是这样解决上面所说的情况的:

    • 创建一个E服务,将A、B、C、D四个服务的信息都注册到E服务上,E服务维护这些已经注册进来的信息

    A、B、C、D四个服务都可以拿到Eureka(服务E)那份注册清单。A、B、C、D四个服务互相调用不再通过具体的IP地址,而是通过服务名来调用

    • 拿到注册清单—>注册清单上有服务名—>自然就能够拿到服务具体的位置了(IP)。
    • 其实简单来说就是:代码中通过服务名找到对应的IP地址(IP地址会变,但服务名一般不会变)

    5.1Eureka细节

    Eureka专门用于给其他服务注册的称为Eureka Server(服务注册中心),其余注册到Eureka Server的服务称为Eureka Client。

    在Eureka Server一般我们会这样配置:

    
        register-with-eureka: false     #false表示不向注册中心注册自己。
        fetch-registry: false     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    

    Eureka Client分为服务提供者和服务消费者

    • 但很可能,某服务既是服务提供者又是服务消费者

    如果在网上看到SpringCloud的某个服务配置没有"注册"到Eureka-Server也不用过于惊讶(但是它是可以获取Eureka服务清单的)

    • 很可能只是作者把该服务认作为单纯的服务消费者,单纯的服务消费者无需对外提供服务,也就无须注册到Eureka中了
    
    eureka:
      client:
        register-with-eureka: false  # 当前微服务不注册到eureka中(消费端)
        service-url: 
          defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/  
    
    

    下面是Eureka的治理机制:

    • 服务提供者
      • 服务注册:启动的时候会通过发送REST请求的方式将自己注册到Eureka Server上,同时带上了自身服务的一些元数据信息。
      • **服务续约:**在注册完服务之后,服务提供者会维护一个心跳用来持续告诉Eureka Server: "我还活着 ” 、
      • 服务下线:当服务实例进行正常的关闭操作时,它会触发一个服务下线的REST请求给Eureka Server, 告诉服务注册中心:“我要下线了 ”。
    • 服务消费者
      • 获取服务:当我们启动服务消费者的时候,它会发送一个REST请求给服务注册中心,来获取上面注册的服务清单
      • 服务调用:服务消费者在获取服务清单后,通过服务名可以获得具体提供服务的实例名和该实例的元数据信息。在进行服务调用的时候,优先访问同处一个Zone中的服务提供方
    • Eureka Server(服务注册中心):
      • **失效剔除:**默认每隔一段时间(默认为60秒) 将当前清单中超时(默认为90秒)没有续约的服务剔除出去
      • 自我保护:。EurekaServer 在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%(通常由于网络不稳定导致)。 Eureka Server会将当前的实例注册信息保护起来, 让这些实例不会过期,尽可能保护这些注册信息

    最后,我们就有了这张图:

    举个例子:

    • 3y跟女朋友去东站的东方宝泰逛街,但不知道东方宝泰有什么好玩的。于是就去物业搜了一下东方宝泰商户清单,发现一楼有优衣库,二楼有星巴克,三楼有麦当劳。
    • 在优衣库旁边,有新开张的KFC,在墙壁打上了很大的标识“欢迎KFC入驻东方宝泰”。
    • 商家们需要定时交物业费给物业。
    • 物业维持东方宝泰的稳定性。如果某个商家不想在东方宝泰运营了,告诉了物业。物业自然就会将其在东方宝泰商户清单去除。

    优秀博文:

    六、引出RestTemplate和Ribbon

    通过Eureka服务治理框架,我们可以通过服务名来获取具体的服务实例的位置了(IP)。一般在使用SpringCloud的时候不需要自己手动创建HttpClient来进行远程调用。

    可以使用Spring封装好的RestTemplate工具类,使用起来很简单:

    
    	// 传统的方式,直接显示写死IP是不好的!
        //private static final String REST_URL_PREFIX = "http://localhost:8001";
    	
    	// 服务实例名
        private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";
    
        /**
         * 使用 使用restTemplate访问restful接口非常的简单粗暴无脑。 (url, requestMap,
         * ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。
         */
        @Autowired
        private RestTemplate restTemplate;
    
        @RequestMapping(value = "/consumer/dept/add")
        public boolean add(Dept dept) {
            return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
        }
    
    

    为了实现服务的高可用,我们可以将服务提供者集群。比如说,现在一个秒杀系统设计出来了,准备上线了。在11月11号时为了能够支持高并发,我们开多台机器来支持并发量。

    现在想要这三个秒杀系统合理摊分用户的请求(专业来说就是负载均衡),可能你会想到nginx。

    其实SpringCloud也支持的负载均衡功能,只不过它是客户端的负载均衡,这个功能实现就是Ribbon!

    负载均衡又区分了两种类型:

    • 客户端负载均衡(Ribbon)
      • 服务实例的清单在客户端,客户端进行负载均衡算法分配。
      • (从上面的知识我们已经知道了:客户端可以从Eureka Server中得到一份服务清单,在发送请求时通过负载均衡算法,在多个服务器之间选择一个进行访问)
    • 服务端负载均衡(Nginx)
      • 服务实例的清单在服务端,服务器进行负载均衡算法分配

    所以,我们的图可以画成这样:

    6.1Ribbon细节

    Ribbon是支持负载均衡,默认的负载均衡策略是轮询,我们也是可以根据自己实际的需求自定义负载均衡策略的。

    
    @Configuration
    public class MySelfRule
    {
    	@Bean
    	public IRule myRule()
    	{
    		//return new RandomRule();// Ribbon默认是轮询,我自定义为随机
    		//return new RoundRobinRule();// Ribbon默认是轮询,我自定义为随机
    		
    		return new RandomRule_ZY();// 我自定义为每台机器5次
    	}
    }
    
    

    实现起来也很简单:继承AbstractLoadBalancerRule类,重写public Server choose(ILoadBalancer lb, Object key)即可。

    SpringCloud 在CAP理论是选择了AP的,在Ribbon中还可以配置重试机制的(有兴趣的同学可以去搜搜)~

    举个例子:

    • 3y跟女朋友过了几个月,又去东方宝泰了。由于记性不好,又去物业那弄了一份东方宝泰商户清单。
    • 这次看到东方宝泰又开了一间麦当劳,一间在二楼,一间在三楼。原来生意太好了,为了能提高用户体验,在二楼多开了一间麦当劳
    • 这时,3y问女朋友:“去哪间麦当劳比较好?要不我们抛硬币决定?”3y女朋友说:”你是不是傻,肯定哪间近去哪间啊“

    优秀博文:

    七、引出Hystrix

    到目前为止,我们的服务看起来好像挺好的了:能够根据服务名来远程调用其他的服务,可以实现客户端的负载均衡。

    但是,如果我们在调用多个远程服务时,某个服务出现延迟,会怎么样??

    高并发的情况下,由于单个服务的延迟,可能导致所有的请求都处于延迟状态,甚至在几秒钟就使服务处于负载饱和的状态,资源耗尽,直到不可用,最终导致这个分布式系统都不可用,这就是“雪崩”。

    针对上述问题, Spring Cloud Hystrix实现了断路器、线程隔离等一系列服务保护功能。

    • Fallback(失败快速返回):当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝), 向调用方返回一个错误响应, 而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延
    • 资源/依赖隔离(线程池隔离):它会为每一个依赖服务创建一个独立的线程池,这样就算某个依赖服务出现延迟过高的情况,也只是对该依赖服务的调用产生影响, 而不会拖慢其他的依赖服务

    Hystrix提供几个熔断关键参数:滑动窗口大小(20)、 熔断器开关间隔(5s)、错误率(50%)

    • 每当20个请求中,有50%失败时,熔断器就会打开,此时再调用此服务,将会直接返回失败,不再调远程服务。
    • 直到5s钟之后,重新检测该触发条件,判断是否把熔断器关闭,或者继续打开

    Hystrix还有请求合并、请求缓存这样强大的功能,在此我就不具体说明了,有兴趣的同学可继续深入学习~

    7.1Hystrix仪表盘

    Hystrix仪表盘:它主要用来实时监控Hystrix的各项指标信息。通过Hystrix Dashboard反馈的实时信息,可以帮助我们快速发现系统中存在的问题,从而及时地采取应对措施。

    启动时的页面:

    监控单服务的页面:

    我们现在的服务是这样的:

    除了可以开启单个实例的监控页面之外,还有一个监控端点 /turbine.stream是对集群使用的。 从端点的命名中,可以引入Turbine, 通过它来汇集监控信息,并将聚合后的信息提供给 HystrixDashboard 来集中展示和监控

    举个例子:

    • 3y和女朋友决定去万达玩,去到万达的停车场发现在负一层已经大大写上“负一层已停满,请下负二层,负二层空余停车位还有100个!”
    • 这时,3y就跟女朋友说:“万达停车场是做得挺好的,如果它没有直接告知我负一层已满,可能我就去负一层找位置了,要是一堆人跑去负一层但都找不到车位的话,恐怕就塞死了”。3y接着说:“看停车位的状态也做得不错,在停车位上头有一个感应(监控),如果是红色就代表已被停了,如果是绿色就说明停车位是空的”。
    • 3y女朋友不屑的说:“你话是真的多”

    参考资料:

    八、引出Feign

    上面已经介绍了Ribbon和Hystrix了,可以发现的是:他俩作为基础工具类框架广泛地应用在各个微服务的实现中。我们会发现对这两个框架的使用几乎是同时出现的。

    为了简化我们的开发,Spring Cloud Feign出现了!它基于 Netflix Feign 实现,整合了 Spring Cloud Ribbon 与 Spring Cloud Hystrix, 除了整合这两者的强大功能之外,它还提
    供了声明式的服务调用(不再通过RestTemplate)。

    Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。

    下面就简单看看Feign是怎么优雅地实现远程调用的:

    服务绑定:

    
    // value --->指定调用哪个服务
    // fallbackFactory--->熔断器的降级提示
    @FeignClient(value = "MICROSERVICECLOUD-DEPT", fallbackFactory = DeptClientServiceFallbackFactory.class)
    public interface DeptClientService {
    
    
        // 采用Feign我们可以使用SpringMVC的注解来对服务进行绑定!
        @RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
        public Dept get(@PathVariable("id") long id);
    
        @RequestMapping(value = "/dept/list", method = RequestMethod.GET)
        public List<Dept> list();
    
        @RequestMapping(value = "/dept/add", method = RequestMethod.POST)
        public boolean add(Dept dept);
    }
    

    Feign中使用熔断器:

    
    /**
     * Feign中使用断路器
     * 这里主要是处理异常出错的情况(降级/熔断时服务不可用,fallback就会找到这里来)
     */
    @Component // 不要忘记添加,不要忘记添加
    public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService> {
        @Override
        public DeptClientService create(Throwable throwable) {
            return new DeptClientService() {
                @Override
                public Dept get(long id) {
                    return new Dept().setDeptno(id).setDname("该ID:" + id + "没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭")
                            .setDb_source("no this database in MySQL");
                }
    
                @Override
                public List<Dept> list() {
                    return null;
                }
    
                @Override
                public boolean add(Dept dept) {
                    return false;
                }
            };
        }
    }
    
    

    调用:

    九、引出Zuul

    基于上面的学习,我们现在的架构很可能会设计成这样:

    这样的架构会有两个比较麻烦的问题:

    1. 路由规则与服务实例的维护间题:外层的负载均衡(nginx)需要维护所有的服务实例清单(图上的OpenService)
    2. 签名校验、 登录校验冗余问题:为了保证对外服务的安全性, 我们在服务端实现的微服务接口,往往都会有一定的权限校验机制,但我们的服务是独立的,我们不得不在这些应用中都实现这样一套校验逻辑,这就会造成校验逻辑的冗余。

    还是画个图来理解一下吧:

    每个服务都有自己的IP地址,Nginx想要正确请求转发到服务上,就必须维护着每个服务实例的地址

    • 更是灾难的是:这些服务实例的IP地址还有可能会变,服务之间的划分也很可能会变。
    
    http://123.123.123.123
    
    http://123.123.123.124
    
    http://123.123.123.125
    
    http://123.123.123.126
    
    http://123.123.123.127
    
    

    购物车和订单模块都需要用户登录了才可以正常访问,基于现在的架构,只能在购物车和订单模块都编写校验逻辑,这无疑是冗余的代码。

    为了解决上面这些常见的架构问题,API网关的概念应运而生。在SpringCloud中了提供了基于Netfl ix Zuul实现的API网关组件Spring Cloud Zuul

    Spring Cloud Zuul是这样解决上述两个问题的:

    • SpringCloud Zuul通过与SpringCloud Eureka进行整合,将自身注册为Eureka服务治理下的应用,同时从Eureka中获得了所有其他微服务的实例信息。外层调用都必须通过API网关,使得将维护服务实例的工作交给了服务治理框架自动完成
    • 在API网关服务上进行统一调用来对微服务接口做前置过滤,以实现对微服务接口的拦截和校验

    Zuul天生就拥有线程隔离和断路器的自我保护功能,以及对服务调用的客户端负载均衡功能。也就是说:Zuul也是支持Hystrix和Ribbon

    关于Zuul还有很多知识点(由于篇幅问题,这里我就不细说了):

    • 路由匹配(动态路由)
    • 过滤器实现(动态过滤器)
    • 默认会过滤掉Cookie与敏感的HTTP头信息(额外配置)

    9.1可能对Zuul的疑问

    Zuul支持Ribbon和Hystrix,也能够实现客户端的负载均衡。我们的Feign不也是实现客户端的负载均衡和Hystrix的吗?既然Zuul已经能够实现了,那我们的Feign还有必要吗?

    或者可以这样理解:

    • zuul是对外暴露的唯一接口相当于路由的是controller的请求,而Ribbonhe和Fegin路由了service的请求
    • zuul做最外层请求的负载均衡 ,而Ribbon和Fegin做的是系统内部各个微服务的service的调用的负载均衡

    有了Zuul,还需要Nginx吗?他俩可以一起使用吗?

    • 我的理解:Zuul和Nginx是可以一起使用的(毕竟我们的Zuul也是可以搭成集群来实现高可用的),要不要一起使用得看架构的复杂度了(业务)~~~

    参考资料:

    十、引出SpringCloud Config

    随着业务的扩展,我们的服务会越来越多,越来越多。每个服务都有自己的配置文件。

    既然是配置文件,给我们配置的东西,那难免会有些改动的。

    比如我们的Demo中,每个服务都写上相同的配置文件。万一我们有一天,配置文件中的密码需要更换了,那就得三个都要重新更改

    在分布式系统中,某一个基础服务信息变更,都很可能会引起一系列的更新和重启

    Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用

    • 简单来说,使用Spring Cloud Config就是将配置文件放到统一的位置管理(比如GitHub),客户端通过接口去获取这些配置文件。
    • 在GitHub上修改了某个配置文件,应用加载的就是修改后的配置文件。

    SpringCloud Config其他的知识:

    • 在SpringCloud Config的服务端, 对于配置仓库的默认实现采用了Git,我们也可以配置SVN。
    • 配置文件内的信息加密和解密
    • 修改了配置文件,希望不用重启来动态刷新配置,配合Spring Cloud Bus 使用~

    使用SpringCloud Config可能的疑问:application.yml和 bootstrap.yml区别

    总结

    本文主要写了SpringCloud的基础知识,希望大家看完能有所帮助~

    SpringCloud的资料也很多,我整理一些我认为比较好,想要深入的同学不妨看看下边的资源~~~

    SpringCloud系列文章参考资料:

    参考书籍:

    • 《SpringCloud 微服务实战》

    SpringCloud GitHub Demo(看完文章的同学可以自己练手玩玩,写好了ReadMe了):

    乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,关注即可获取!
    在这里插入图片描述

    觉得写得不错,点赞!关注我的公众号Java3y!

    展开全文
  • 【精】多层PCB层叠结构

    千次阅读 2014-12-03 21:12:11
    在设计多层PCB电路板之前,设计者需要首先根据电路的规模、电路板的尺寸和电磁兼容(EMC)的要求来确定所采用的电路板结构,也就是决定采用4,6,还是更多数的电路板。确定数之后,再确定内电的放置位置...
  • 运输功能详解

    千次阅读 2019-06-01 21:31:11
    传输控制协议TCP3.1 TCP最主要的特点3.2 TCP的连接3.3 可靠传输的工作原理3.3.1 停止等待协议(ARQ协议)3.3.2 滑动窗口协议(连续ARQ协议)3.3.3 流量控制3.3.4 拥塞控制4 TCP报文段首部 1.概述 作用:运输为它...
  • 计算机网络的各及其协议的集合被称为网络的体系结构,按照不同的维度,其常被分为七、五、四网络结构: 1.1 七网络模型 开放式系统互联模型(Open System Interconnection Model,简称为 OSI 模型)是一种...
  • 控制等。MAC子的存在屏蔽了不同物理链路种类的差异性; 在MAC子的诸多功能中,非常重要的一项功能是仲裁介质的使用权,即规定站点何时可以使用通信介 质。实际上,局域网技术中是采用具有冲突检测的载波侦...
  • 数据链路在物理提供服务的基础上向网络提供服务,其最基本的服务是将源自网络来的数据可靠地传输到相邻节点的目标机网络。其主要作用是加强物理传输原始比特流的功能,将物理提供的可能出错的物理连接...
  • 计算机网络——五与七模型

    万次阅读 多人点赞 2019-08-31 21:40:53
    文章目录1 TCP/IP五模型与OSI七模型1.0 OSI是什么1.1 TCP/IP五模型与OSI七模型分别是什么1.2 TCP/IP五模型与OSI七模型的工作设备1.3 TCP/IP五模型与OSI七模型的协议1.4 四、五、还是七?...
  • 传输详解

    万次阅读 2016-01-06 19:08:05
    传输详解 ①理解TCP的封装和工作原理 ②理解UDP的封装和工作原理 ③了解常用的TCP和UDP端口号 ④对TCP和UDP首部能够进行分析   传输的作用是什么?传输实现端到端的连接,端到端是什么概念呢?打个...
  • 运输知识梳理

    千次阅读 2018-03-01 22:56:08
    运输,也叫传输,实现端对端的传输,应用进程得到消息后交给传输变成数据段,然后交予网络。 它位于网络之上,应用之下,为运行在不同主机上的应用进程之间提供了逻辑通信功能。 与...
  • OSI七模型OSI是Open System Interconnect的缩写,意为开放式系统互联。OSI是Open System Interconnect的缩写,意为开放式系统互联。OSI七参考模型的各个层次的划分遵循下列原则: 同一中的各网络节点都有相同...
  • 第五章 传输

    千次阅读 2020-11-04 23:26:30
    文章目录5.1 传输提供的服务5.1.1 传输功能5.1.2 传输的寻址与端口5.1.3 无连接服务与面向连接服务5.2 UDP协议5.2.1 UDP数据报5.2.2 UDP校验5.3 TCP协议5.3.1 TCP协议的特点5.3.2 TCP报文段5.3.3 TCP连接管理...
  • TCP/IP协议的分层有2个模型,分别是TCP/IP参考模型与OSI...在OSI参考模型中分为物理、数据链路、网络、传输、会话、表示、应用共7。 TCP协议是目前使用最为广泛的协议,OSI是一个理想模型(硬件跟不上)
  • 传输:UDP 协议一、传输协议从之前介绍的网络协议来看,通信的两端是两台主机,IP 数据报首部就标明了这两台主机的 IP 地址。但是从传输来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据...
  • 计算机网络之运输

    千次阅读 2019-04-01 19:48:09
    本章讨论TCP/IP体系中运输最重要的两种协议:UDP和TCP。必须弄清TCP的各种机制(如面向连接的可靠服务、流量控制、拥塞控制等),以及TCP连接管理和状态图的概念。 一、运输协议概述 从TCP开始往后看思维...
  • 协议

    千次阅读 2004-11-04 19:34:00
    协议 作者:未知 请作者速与本人联系《 OSI.Open Systems Interconnection ------开放系统互连 》OSI由重要计算机和远程通讯公司在1983年开始开发,最初的设想是成为一个接口规范。委员会决定建立一个通用参考...
  • 5.2 计算机网络之传输UDP协议

    千次阅读 2020-04-11 17:12:40
    当传输从IP收到UDP数据报时4.UDP校验 1.用户数据报协议UDP概述及特点优势 为什么应用开发人员宁愿在UDP之上构建应用,也不选择TCP?既然TCP提供可靠的服务,而UDP不提供,那么TCP总是首选吗?答案是否定的,因为...
  • 网络中的iso七模型

    千次阅读 2018-08-10 08:51:38
    其中,PPTP和L2TP工作在数据链路,IPSec工作在网络,SOCK v5工作在会话。   OSI参考模型各个层次的基本功能如下:  应用:应用也称为应用实体,一般是指应用程序,该主要负...
  •  运输负责端到端的通信,既是七模型中负责数据通信的最高层,又是面向网络通信的低三和面向信息处理的最高三之间的中间。运输位于网络之上、会话之下,它利用网络层子系统提供给它的服务去开发本...
  • 网络协议

    千次阅读 2018-03-26 10:59:41
    一、OSI七网络协议OSI是Open System Interconnect的缩写,意为开放式系统互联。OSI参考模型各个层次的划分遵循...5)数应足够多,以避免不同的功能混杂在同一中,但也不太多,否则体系结构会过于庞大6)同一...
  • 史上最全的数据链路基础知识详解

    千次阅读 多人点赞 2020-03-14 16:45:53
    三个基本问题2.1封装成帧2.1.1基本概念2.1.2常用成帧方法2.2透明传输2.2.1解决透明传输问题2.2.2用字节/字符填充法解决透明传输问题2.2.3字节填充的标志字节法的特点.2.2.4字节填充的首尾定界法2.2.5零比特填充法2.3...
  • TCP/IP协议族 详解(TCP/IP四模型、OSI七模型)

    千次阅读 多人点赞 2018-04-12 21:53:09
    VPN和信道通常预先建好,并且它们有一些直接发送到实体接口所没有的特殊特点(例如,它可以加密经过它的数据)。由于现在链路“”是一个完整的网络,这种协议组的递归使用可能引起混淆。但是它是一个实现常见复杂...
  • 物理 物理(或称物理,Physical Layer)是计算机网络OSI模型中最低的一。物理规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。简单的说,物理确保...
  • OSI七模型

    千次阅读 2019-05-16 14:25:00
    文章目录OSI七模型详解:OSI七模型简介:OSI-物理详解:OSI-数据链路详解:OSI-网络详解:IP地址的定义:路由表的工作原理:路由环路IP报文格式报文分片的原因:报文分片的过程:报文重组的过程:ARP协议+...
  • 计算机网络第三章 数据链路

    千次阅读 2020-06-17 12:34:37
    3.1 概述 (都是重点) 数据链路的功能 电路的两种信道 局域网、广域网 链路的设备 数据链路的基本概念 结点:主机、路由器 链路:网络中两个结点之间的**物理通道。...数据链路在物理提供
  • 数据链路的差错控制ARQ

    千次阅读 2018-01-09 15:27:13
     差错控制时链路一个非常重要的功能,链路需要在不太可靠的物理来尽量实现可靠的链路传输,靠的就是差错控制。所谓差错控制,就是对传输的数据信息进行错误检测,并加以恰当的处理。这其中就包含了多个方面...
  • 多层PCB LAYOUT

    千次阅读 2010-05-12 22:46:00
    多层PCB电路板设计方法2009-08-30 22:57在设计多层PCB电路板之前,设计者需要首先根据电路的规模、电路板的尺寸和电磁兼容(EMC)的要求来确定所采用的电路板结构,也就是决定采用4,6,还是更多数的电路板。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,785
精华内容 32,314
关键字:

层错能特点