# 教程总述
**对于高速电路设计一直比较感兴趣,想自己做一个XX派,但苦于资料太少了。** 过去6个月在摸索中完成了全志H6开发板。相信肯定也会有其他小伙伴有类似的想法,因此就有了这样一个《从零入门ARM高速电路设计》教程。
项目主页:[https://oshwhub.com/logicworld/h6_board](https://oshwhub.com/logicworld/h6_board)
# PCB设计
## 一个谜
上一章说到高速电路原理图设计的资料(包括书籍和视频)都比较少,**但是高速电路PCB设计却非常多,不管是视频,还是书籍,而且还有很多培训班。** 当你搜索高速电路设计时,大部分搜出来的都是在讲PCB设计的,包括高速PCB设计(主要是培训班的老师放出来的免费视频),信号完整性/电源完整性及仿真(SI/PI)。具体的原因,我也没有想明白,可能PCB设计更为复杂,**更玄学**?
![高速电路设计-B站搜索.png](//image.lceda.cn/pullimage/gLsDTmBhDA8k3np5u4m0cPKyZXct6fg5g60zhZr3.png)
如果,你对高速电路设计感兴趣的话,想必也搜过类似的东西。**但是这些视频可以作为高速电路设计的入门教程吗?** 在做这个开发板之前,我就看过好些这种高速PCB设计的培训班的免费课程,开局一张原理图(来自原厂标案或者硬件工程师),然后,一套标准流程(模块框图分析,信号流向分析,电源树分析,模块化布局,布线等),最后产生一个PCB设计图,结束。**这PCB能打样出来,能跑吗?好像从来没有老师关心过。** 甚至讲的过程中感觉老师并不太懂硬件原理。可能他们是PCB工程师,而不是硬件工程师?**因此仅凭这些视频,对于怎么做出一个自己的高速ARM开发板,还是会觉得很懵?** 因为缺了前面的原理图设计部分,以及后面的打样焊接调试过程。
但是,不管怎么样,因为,这么多外部资料的存在,我将减少我自己讲的部分,更推荐去阅读外部的资料。**以下我推荐一些我自己读过的资料,并且按照学习顺序组织好。**
## 初遇高速PCB设计
高速PCB设计里面的概念是相当的多,概念和理论看多了容易迷,不知道实际在PCB设计软件中到底是怎么操作的,比如:包地,这个词在高速PCB里面很常见,但是,很多时候都是一句话带过,我好长时间都不知道到底怎么包的。**初学入门最适合看那种一根线一根线拉的,知道怎么操作之后,我们再把理论知识给补充上来。**
我目前找到最合适的视频是 [【Allegro教程】零基础小白快速入门4层板PCB设计高清视频教程 凡亿(34集全)](https://www.bilibili.com/video/BV1d4411R74r)。主要推荐意见如下:
1. 视频中的板子没有包含DDR等复杂的元素,整体复杂性相对可控,但是,它已经包含了高速电路中的一些常见元素,比如:**包地,差分线,间距规则,4层板(电源层,地层),阻抗和层叠,电源覆铜,电源层地层分割/负片。** 适合作为从MCU板子到ARM高速板的中间台阶。
2. **视频中是一根线一根线拉的,教授一些基本的概念和操作。** 后面推荐的视频和资料基本上都不会再教授这么基础的操作了。(PS:主要是高速ARM板级别的一根线一根线拉,往往是收费课程,价格从小几十到几千不等。)
3. 可以熟悉一下Allegro是怎么使用的,都有哪些功能:
* 插播一个小知识,主流PCB设计软件包括AD,Mentor Pads,Cadence Allegro。其中,Allegro在高速电路设计领域应用非常广泛,我手里拿到的ARM板子原厂标案大部分都是Allegro的设计文件,少部分是AD和Pads。
* 虽然,我们最终是用LCEDA来画板子的,但是,**一方面,我们需要看一下原厂标案的设计**,它很有可能是Allegro的设计文件(Allegro的设计特别反人类,不学一下根本不知道怎么用,就和初次使用Linux下的Vim一样,进去了半天退不出来),**另一方面,作为高速电路设计里面最专业的软件**,看看它都有什么样的功能,学习一下它的先进之处,后面看看怎么映射到LCEDA里面。
4. **重新熟悉一下PCB设计的流程和操作,相信温故知新。**
PS:视频比较长,你可以视情况2倍速或者跳着看,后面推荐的视频也可以类似操作。
![fanyi_hdmi.png](//image.lceda.cn/pullimage/1f0w7uFLAagcKWh8ImUrigrB2gLalusrlyXP59xh.png)
## 密密麻麻的PCB
**看完上面的入门视频之后,我们就来见见真正的高速PCB设计,看看它那密密麻麻的元器件和层层叠叠的走线。**
目前我找到的比较全面的视频来自于[AD中国官方\(B站\)](https://space.bilibili.com/316956655),它为了推广AD软件,邀请了各路PCB培训班的老师录制的视频。你可以挑选一些你自己感兴趣的视频看看,看个2-3个系列,你就会发现他们高度重复。
![ad_pcb_design.png](//image.lceda.cn/pullimage/4PnaTviwwZUdNWit3Dsoies3lMP8UYralH79AnCR.png)
我自己选看的是以下两个系列,其他系列也大差不差:
* [液晶驱动板设计教程](https://www.bilibili.com/video/BV1264y1c7DF?p=1)
![液晶驱动板2.png](//image.lceda.cn/pullimage/qEZPm4RxsGESvxvMSimTMg21bQlVkO9AJsr5Ljh4.png)
* [六层板RK3288广告机主板](https://www.bilibili.com/video/BV11f4y157bJ?p=1)
![RK3288.png](//image.lceda.cn/pullimage/VXcVTADU8zM5cAXTCHLrH0DTlMZQtCyixpd6Bv3l.png)
你看完了之后,就会发现内容好多,他讲的好粗略,有些不是太懂怎么实操的。这是正常的,他们是培训班的老师,更详细的内容在他们的收费课程里面。**这里最主要的是能够熟悉高速PCB整体设计的流程,能够知道高速PCB里面都有哪些概念和方法,接受满板子密密麻麻的飞线。** 后面我会给出其他资料,把这其中的概念和实操细节给补充上。
## 原来PCB设计软件中有这么多概念,之前都走马观花了
相信看到这里的小伙伴们应该自己都已经画过多款板子了,**不知道大家有没有打开设计规则管理器,去添加和修改过规则呢?**
![LCEDA_设计规则.png](//image.lceda.cn/pullimage/Jew5JWoZmD9JXfOwoe6bnX2EqU0JwvQszpR3KuSx.png)
又或是对于下面这些层是否都知道是什么意思呢?我们导出的Gerber文件里面到底包含了哪些东西?
![LCEDA_层.png](//image.lceda.cn/pullimage/vggbpwHLs4biE3qWMAThypWIJBXOr2UnQLk4DidP.png)
BGA扇出,蛇形等长,差分布线,层叠阻抗配置等等的操作。
[【凡亿】Cadence Allegro 17.4零基础入门66讲PCB Layout设计实战视频](https://www.bilibili.com/video/BV1NG4y1T78z) 可以推荐给大家。除了学习Allegro的操作以外,还可以学习通用的PCB设计的概念,**可以看看一个更专业的PCB软件到底专业在哪里。** Allegro软件本身看[吴川斌的博客](https://www.mr-wu.cn/downloads/)。
PS:可以跳着看,自己对啥感兴趣,看啥,毕竟我们也不用Allegro画,没有必要那么精通Allegro的操作。
**看的过程中,我们可以在LCEDA中找找对应关系,具体可以看看[LCEDA帮助文档](https://prodocs.lceda.cn/),看看它有啥缺啥。**
## 高速电路基础知识-阻抗和层叠
### 基础知识
相信各位小伙伴都应该多多少少听过**阻抗,阻抗匹配,50Ω标准阻抗,特性阻抗,阻抗不连续,反射,传输线理论,信号完整性(SI)等等**。这些都是高速电路相较于低速电路引入的新的概念,这些概念都有比较深的理论背景,我确实三言两语也解释不清。
我看了一个B站工科男孙老师做的[《新手入门高速PCB?先搞清楚什么是阻抗匹配。》](https://www.bilibili.com/video/BV1rP411n7xE),还不错,可以推荐大家看看,能够对这个问题有一个感性的认识。
### 简单版本
**阻抗和层叠可以很简单,也可以很复杂。** 如果,你并不想搞清楚它的理论背景知识,直接想画板子的时候,能够保证阻抗匹配的话,这个是相对容易的,上面视频中有提及这个问题,此处我再详细说明一下。
1. 确认层叠结构:**所谓层叠结构简单说就是,板子有几层,层和层之间相距多远;**
* 下图是我的H6开发板中用的层叠结构,来自JLC06161H-3313。
![LCEDA_层叠管理器.png](//image.lceda.cn/pullimage/hFURzcElLr2GpqcthBAC6UEpBMR4LyrBktSEB83w.png)
* **如果,你想要用JLC的免费打样的话,基本上不用选了,4层板用JLC04161H-3313,6层板用JLC06161H-3313**,JLC官方给的层叠结构见[这里](https://tools.jlc.com/jlcTools/#/impedanceDefaultTemplate)。其他层叠结构要额外收费,总体下来要几百元打板一次吧。(JLC04161H-7628和JLC06161H-7628也是免费的层叠结构,但是板子太厚了,导致常见的50Ω阻抗线太宽了,要13.75mil,DDR之类的线根本画不了。)
* 目前(今天是2023.03.30)的规则是这个样子的,但是,**JLC是会调整免费规则的,** 等你做的时候,你需要去[下单页面](https://www.jlc.com/newOrder/#/pcb/pcbPlaceOrder),再确认一下最新规则是什么。说不定什么时候,它将更多层叠结构也免费了呢。
2. **确认每层的用途:是准备走信号线,电源平面,还是地平面;**
1. 当层叠结构确定了,每层的用途就大致确定了,有少量微调的空间;
1. 4层板:顶层(信号层),第二层(地平面),第三层(电源平面),底层(信号层);
2. 6层板:顶层(信号层),第二层(地平面),第三层(信号层),第四层(电源平面),第五层(地平面),底层(信号层);
3. 每层的用途中,我们看到信号层和电源/地平面是交替放置的,每一个信号层相邻都是电源或地平面,这些电源或地平面就是信号层的参考平面(需要全部铺铜);**只有信号线+参考平面才能构成阻抗,单单信号线自身是无法构成阻抗的概念的。**
2. 我们布线时,**一般会按照这些用途来确定走线的层**,除非走不下了,才会走到别的用途的层上面。 另外,电源优先走电源层,但是一些小电流电源可能会走到信号层,地可能各层都有;
3. 如下是H6开发板在LCEDA内的定义,
1. 其中类型里面的**内电层是按负片逻辑布线的**(走线位置表示无铜区域),**信号层是按正片逻辑布线的**(走线位置表示有铜区域)。我这里的电源层(04_PWR)是按照正片逻辑布线的。
![图层管理器_每层定义.png](//image.lceda.cn/pullimage/MAcBFJP0DJF2FA1ohftLzI0akptyFriHlfUBScBK.png)
3. 确认完层叠结构之后,就用JLC的阻抗计算工具计算阻抗线的线宽,阻抗计算工具见[这里](https://tools.jlc.com/jlcTools/#/impedanceCalculateNew)。
* **阻抗大致的规律是**:阻抗线越宽,阻抗越低;阻抗线到参考平面越近,阻抗越低;差分线之间越近,阻抗越低;一般情况下内层走线(学名叫做带状线)比外层走线(学名叫微带线)阻抗要低;
* 下面是我用JLC阻抗计算工具算出来的结果,你可以算算看是否和我算的一样。
```
JLC04161H-3313/JLC06161H-3313(嘉立创阻抗计算神器(新))
----------
[外层] 50ohm单端阻抗线宽设计6.16mil;
[外层] 90ohm差分阻抗线宽设计5.10mil,线距5mil;
[外层] 100ohm差分阻抗线宽设计3.82mil,线距5mil;
[内层] 50ohm单端阻抗线宽设计5.41mil;
[内层] 90ohm差分阻抗线宽设计4.67mil,线距5.5mil;
[内层] 100ohm差分阻抗线宽设计4.20mil,线距8mil;
[跨层参考+共面参考] 50ohm单端阻抗线宽设计20.71mil,阻抗线到铜距离5mil;
```
4. **画PCB时,设置阻抗线的线宽,保证阻抗线有对应的参考平面;打板时选择对应的层叠结构,就可以了**(一般下单助手上面会让你选择对应的层叠结构)。
1. 阻抗要求:
* **大部分元器件的单端信号都是要求50Ω阻抗**,比如:DDR,eMMC,SDIO等等,画图时,我是走线默认50Ω阻抗的线宽,除非它有特别要求。剩下特殊的阻抗要求,原理图上面都会标注出来。
* **大部分元器件的差分信号都是要求100Ω阻抗**,比如:HDMI,DDR时钟等;
* USB是差分90Ω;
2. 参考平面:**一定一定一定要有参考平面,且参考平面完整,阻抗线尽量不要跨越不同的参考平面;**
* 所谓参考平面:阻抗线相邻的平面是电源平面或地平面,且该平面是铺铜的;
* 缺乏参考平面会导致DDR的频率只能跑到100-200MHZ;
* 参考平面完整:
* 地平面:地平面一般情况下,整个层都是完整的地,因此,参考平面自然完整;
* 电源平面:电源层是会分割成若干个电源,因此,是可能存在一根信号线横跨了若干个电源;**下图是一个跨分割的例子,这个是需要避免出现的;**
![跨分割.png](//image.lceda.cn/pullimage/6XjrtA6U2LmueTMEYeCtXbAgegpJgkUK1AZugVtT.png)
3. H6原厂标案的例子(4层板,2片DDR3设计):
* **L3的DDR走线参考L4层的VCC-DRAM电源平面,且VCC-DRAM铺铜恰好可以包围L3的DDR走线**,即L3层的DDR走线的参考平面是完整的,且无跨分割问题。
* L3层(内层):2片DDR3走线;
![参考平面1.png](//image.lceda.cn/pullimage/jjgiizXTK7pSrmk7Y0Q7kZaAyakogVYBeh9XpV2L.png)
* L4层(底层):VCC-DRAM电源平面做参考层;
![参考平面2.png](//image.lceda.cn/pullimage/Cihh1fMNie3B4skcBWAT1L1UkNA5alc6DcXJD3os.png)
5. 如果,你按上面的线宽去画PCB,**就会发现一个大坑,50Ω阻抗线(6.16mil)太宽了**,DDR部分根本没有办法走线。细看H6原厂的标案,DDR部分的走线只有4mil。看一下它的层叠结构,第一层到第二层的厚度是2.9mill(对应JLC04161H-1080),而JLC04161H-3313/JLC06161H-3313的第一层到第二层的厚度是3.91mil。**但是,但是,JLC04161H-1080并不支持JLC免费打样。**(今天是2023.03.30,目前规则如此,希望JLC未来可以把它也免费了)
![标案的层叠结构.png](//image.lceda.cn/pullimage/6XG1RZ0kF2lFE6df0tWqDRFxw6PFkR2rxAc5pT2h.png)
6. **为了免费,为了白嫖,只能在JLC04161H-3313/JLC06161H-3313继续走下去。** JLC官方也知道6.16mil太宽了,因此,他给了一个妥协的版本,如下方。这个版本就是我实际画板是用的阻抗线宽,5mil画起来是有些难受的,但是,至少是能画了。(JLC2313就是JLC3313的前身,层叠结构是一样的)
```
JLC2313(JLC官方在阿莫BBS发布)
https://www.amobbs.com/thread-5685445-1-1.html
----------
[外层] 50ohm单端阻抗线宽设计6mil;
[外层] 50ohm单端阻抗线宽设计5mil,实际理论计算阻抗值是53ohm;(常用)
[外层] 90ohm差分阻抗线宽设计5mil,线距5mil;
[外层] 100ohm差分阻抗线宽设计4mil,线距5mil;
[内层] 50ohm单端阻抗线宽设计5mil;
[内层] 90ohm差分阻抗线宽设计4.5mil,线距5.5mil;
[内层] 100ohm差分阻抗线宽设计4mil,线距8mil;
```
以上就是层叠和阻抗在实操层面的需要的步骤,**此处讲的比较抽象,你可以找一个具体的原厂标案PCB看一下它的层叠,走线宽度,走线的参考平面会更加清楚一些。** 比如:[H6的原厂标案PCB](https://www.mr-wu.cn/allwinner-h6-soc-reference-design/);
### 复杂版本
**如果,你不想只知道怎么操作,还想要了解一下背后的原理到底是什么。** 那么推荐一下这个课程[《中国科学技术大学 微波技术基础》](https://www.bilibili.com/video/BV19i4y1Q7gt),看一下其中的传输线理论和微波集成传输线,讲的还是比较清晰的,但也非常理论。(如果,你不是做微波电路的话,这部分对于实际画板子是没有什么用处的。)在SI/PI的书籍中,也会有原理性的介绍,这个在本章结尾的<更进一步>小节中会再展开。
**如果,你想要知道那些层叠结构到底是怎么设计出来的?** 那些10+层的板子到底是怎么叠的?PP和Core是什么东西?这个视频[《高速多层板的层叠阻抗设计》](https://www.bilibili.com/video/BV11x411f7hY)非常适合你。有人评价说,比他花钱买的视频讲得还要清晰。还有一份[《PCB叠层设计及阻抗计算的板厂心水总结》](https://www.mr-wu.cn/pcb-die-ceng-she-ji-ji-zu-kang-ji-suan/),总结了各种常用的层叠结构,可以一并对照着看。
## 触碰工艺边界
当我们随意在板子上面,走些线,打些过孔的时候,我们很快就会意识到主控芯片上面很拥挤。**拥挤到一个过孔都打不下,一放下就打破了规则约束。** H6的两个相邻的焊盘中心的间距为0.65mm(即pitch为0.65mm),如果,此时在斜对角放下一个18mil/8mil(外径/内径)的过孔,是放不下的,得做一些特殊操作,具体见[阿莫论坛的讨论](https://www.amobbs.com/thread-5744669-1-1.html)。
![0.65_pitch.png](//image.lceda.cn/pullimage/4b4eYh6NXGs4AMwnPqUNDJcoO1NK5oiV6R4Ragmo.png)
一些辅助信息:
1. 1mm≈40mil,记住这个换算,会让你看起来比较容易。
2. [JLC的工艺边界](https://www.jlc.com/portal/vtechnology.html):相关参数抄录如下:(今天是2023.03.30,JLC工艺参数是会随时间更新的)
1. 焊盘边到线边间距:≧0.1mm(尽量大于此参数),BGA焊盘到线最小0.09mm;
2. 最小线宽/线隙(1OZ)多层板:0.09/0.09mm(3.5mil/3.5mil),BGA处局部线宽可做3mil;
3. 最小过孔/焊盘:多层板:0.15mm(内径)/0.25mm(外径);当时22年12月我画板子时,免费0.2mm(内径)/0.45mm(外径);**PS:我今天2023.03.30看,免费0.3mm(内径)/0.4mm(外径)了,那么,刚刚好是可以在斜对角放下的;给JLC手工点赞;**
4. BGA:① BGA焊盘直径:≧0.25mm,② BGA焊盘边到线边:>=0.1mm(多层板最小0.09mm)
3. JLC自己对于BGA布线的[一些建议](https://www.jlc.com/portal/server_guide_10221.html),主要卖了一下他家的盘中孔工艺;
4. JLC自己出的[嘉立创PCB工艺课堂,教你看懂PCB制作工艺!](https://www.bilibili.com/video/BV1u64y1Y7sW)
5. [JLC的打样参数](https://www.jlc.com/newOrder/#/pcb/pcbPlaceOrder):看起来免费的标准在变化,注意查看;
**为了解决过孔放不下的问题,同时满足JLC免费6层打板要求,我开始使用使用盘中孔工艺**,[关于盘中孔有很多宣传视频。](https://www.bilibili.com/video/BV1CW4y1u7Fx)
PS:最近过孔0.3mm(内径)/0.4mm(外径)免费了,那么,4层板其实就可以满足H6开发板的设计了。只是几个月前还没有这个工艺条款。H6原厂标案使用的是0.2mm(内径)/0.4mm(外径)的过孔,这个是一个典型的高速板里面的过孔大小。
**当你读完这些工艺边界之后,你就需要把这些参数填到设计规则之中,约束布局走线,确保设计出来的PCB是符合工厂工艺要求的。** 因为,目前的规则没有和层相关,而类似于阻抗线在不同层有不同的线宽约束,暂时是无法设置的。
![LCEDA_设计规则.png](//image.lceda.cn/pullimage/Jew5JWoZmD9JXfOwoe6bnX2EqU0JwvQszpR3KuSx.png)
![规则管理器_过孔大小.png](//image.lceda.cn/pullimage/ExsNEezlfW0f0pRdCohJVlrTup7EQ7aJnDl9qcjB.png)
另外,你会发现工艺参数和PCB制造流程强相关,且细节非常多,比如:我之前就在找内层走线到过孔的距离,后来在[另外一个地方](https://www.jlc.com/portal/q7i38752.html)找到了。
* 底层及顶层线离过孔外径最边缘最小距离:多层≧3.5mil,双面4mil
* 多层板内层线离过孔内径边缘最小距离:≧6.7mil
## 本章上部分-小节
**至此,你应该对于高速板的PCB设计流程和设计工具有一个基本的了解,同时可以随意走线,打过孔,同时满足层用途,阻抗和工艺的要求了。**
PS:因为开源平台的文章长度被限制在5K-6K字以内,本章将会被拆成3个部分。接下来的部分将会具体讲PCB布局和布线的部分。