我们设计的核心板采纳DDR4封装(这里说封装不太贴切,便是用DDR4的金手指跟载板连接),核心板紧张由3大件构成:
CPU内存eMMC一些取舍问题
先分享一些总体设计过程中的取舍问题。这些问题没有对错。

是否须要包含eMMC?
可以不包含,其实在后续软件,包括uboot+linux移植,用TF卡比eMMC方便。但做都做了,加个eMMC不影响。
为什么不包括电源?
i.MX6ULL须要6路电源,整体占地面积较大,硬要塞到核心板也不是不可以,nVIDIA的Jetson核心板也带电源,它更繁芜。一方面我们考虑核心板制板本钱高,电源有两种方案(分立电源和PMIC),放在载板上占地不成问题,要修正重版本钱也低。另一方面便是颜值,塞入电源会导致板子比例不折衷。
为什么利用DDR4金手指的连接办法?
一样平常核心板有这么几个引出办法:
邮票孔:少了引出脚的接插件,载板也省了,以是省了高下接插件这部分本钱,但是核心板肚子下面贴着载板,载板相应位置就不能布元件了。B2B:高下板子都须要接插件。邮票孔和B2B都有个好处,便是多边出线,这点在元件布局和布线时占尽上风。DDR办法的金手指,这个只能是单边出线到载板,i.MX6ULL的ball可是4边都出的,这些线要汇聚到一边出到载板,有点累人,好处是颜值高!实在最初用DDR3金手指,后来创造DDR3过期了,DDR3槽好难买,价格非常高。而目前而言,DDR4的槽也是处于盛行阶段,量大便宜。以是吐血重画了板子。
核心板电源核心板的电源设计只是将i.MX6ULL运行所需的6路电源按哀求精确地接到芯片,至于全体开拓板的电源入口如何分出这6路电源,我们是放在载板的。
电源是CPU设计的重点,i.MX6ULL须要6路:
符号
电压
用场
PWR_VDD_HIGH_IN
3.3V
VDD_HIGH_IN,eMMC芯片,各种电源芯片。
PWR_VDD_SOC_IN
1.35V
VDD_SOC_IN。
PWR_VDD_SNVS_IN
3.3V
VDD_SNVS_IN。
PWR_NVCC_DRAM
1.35V
NVCC_DRAM和DDR3L芯片。
PWR_NVCC_CSI
2.8V
NVCC_CSI。
PWR_NVCC_SD1
1.8V/3.3V
NVCC_SD1,可切换。
这里有一个问题,为什么SD1须要2种电压,由于NXP的uboot和linux须要。本身SD卡的规范里,SD可以事情在单电压模式,无非便是不能高速而已。但如果你用单电压(即只有3.3V),则须要修正uboot和linux,工程量较大,以是硬件设计上向软件移植妥协了。
别的履历:
上电时序为:VDD_SNVS_IN → VDD_HIGH_IN → VDD_SOC_IN,掉电时序为:VDD_SOC_IN → VDD_HIGH_IN → VDD_SNVS_IN,上电的时序哀求由i.MXi6ULL的PMIC_ON_REQ给出。VDD_SNVS_IN除了供CPU,不挂任何其他负载。POR_B引脚掌握POR过程,接MAX809R,由它卖力复位。ON/OFF引脚引出到载板,通过按钮接地。i.MXi6ULL的LCD掌握了启动流程,硬件参考手册建议1k/10k,但实际可以用4.7k/47k,以降落整体功耗。I2C的上拉电阻放在载板,核心板由于空间和布线的繁芜,不放在核心板上。电源、晶振、BOOT等其他哀求照搬硬件参考手册即可。电源部分事情紧张在于:
确定CPU须要几路电源,也称电源域,手册中称为power domain,分别多少伏确定CPU各个电源域的上电顺序引脚归在哪个电源域,去耦电容怎么用CPU的各个功能模块如果开起来的话,须要哪个power domain接电总之,电源设计是体力活,详细阅读NXP文档《Hardware Development Guide for the i.MX 6ULL Applications Processor Rev. 1》就行,没什么太多可以选择的。
电源布线采取敷铜办法,在In3.Cu层。
打算好电流和最小宽度的量,配置好各个敷铜区域的优先级,设置好间距就行,其他没啥特殊把稳的地方。
核心板的板层由于内存布线的哀求,以是核心板的板层须要和制板厂确认工艺,我们的板子在嘉立创打,他们官网有板层设计,核心板利用6层,层压设置采取嘉立创编号JLC06121H-3313(无它,比较其他6层板的层压,没有额外用度而已),这个层压设置须要导入到KiCad,为了阻抗打算。6层板方案如下:
层数
名称
用场
1
F.Cu
旗子暗记,终极敷铜接地。
2
In1.Cu
极少旗子暗记,GND,直接敷铜接地。
3
In2.Cu
旗子暗记,敷铜接地。
4
In3.Cu
各种电源,敷铜接地。
5
In4.Cu
GND,直接敷铜接地。
6
B.Cu
旗子暗记,终极敷铜接地。
Edge.Cuts
形状,SO-DIMM封装已绘制部分,只须要闭合区域即可。
User.Comments
笔墨注释。
User.2
i.MX6ULL的DRAM区域,用多边形注释。
User.3
i.MX6ULL的别的功能区域引脚,用多边形注释。
User.4
i.MX6ULL的CAP电源区域,用多边形注释。
DDR3布线这个是PCB布线过程中,第一批布的,也是最繁芜,事情量最大的。DDR布线的规则网上有很多可以参考,我们以为最主要的有3点:
i.MX6ULL和DDR的位置没啥好选的,看i.MX6ULL的DDR pad就知道了,两个芯片挨着,之间的间隔能布线就行,越近越好,这里须要反复布线,比较累人。线宽和差分线的间距不是重点考虑的,线宽以能通过BGA间隔为准即可。虽然说旗子暗记线单端阻抗掌握在50Ω,差分掌握在100Ω,但实际打算出来的阻抗大了20%旁边,后期DDR压力测试能超频144%,以是不是重点。我们用的全部等长方案,觉得实现起来反倒大略。这里特殊须要把稳CLK+/-比别的长100mil,CLK+/-为990mil,别的为890mil。这点很主要,确保了CLK+/-旗子暗记达到内存之前ADD、DATA及其他数据均已建立,也正是这一点,DDR压力测试能够超频到576MHz,如果全部严格等长,最高频率只能到528MHz,虽然528这个速率也是可以的。通过这100mil的差距,我们可以非常直不雅观地觉得出CLK+/-长一些的主要性。如下图,CPU和DDR位置。CPU的ball(绿框)决定了它们的相对位置关系,DDR芯片实在可以再往上放一些,更好布线,但看上去就丑了。
末了,数据线交流问题。DDR的数据线是能交流的,这可以方便走线。数据线交流仅在高8位和低8位组内进行,如果要进行高8位和低8位整体组交流,则DOS和DM也要随着交流,还有便是NXP的硬件手册上说D0和D8不能交流,我们之前有个项目,交流过,ms也没出啥问题。这次的开拓板还是严格按照NXP硬件设计手册的哀求,D0和D8不进行任何交流。
为方便布线,我们对DDR连线分组,如下:
net name
i.MX6ULL引脚名
DDR3L引脚名
布线批次
地址
第一批布线
DRAM_ADDR[14:0]
DRAM_ADDR[14:00]
A[14:13],A12/BC#,A11,A10/AP,A[9:0]
DRAM_BA[2:0]
DRAM_SDBA[2:0]
BA[2:0]
掌握,命令
DRAM_RESET
DRAM_RESET
RESET#
DRAM_CS
DRAM_CS0
CS#
DRAM_CKE
DRAM_SDCKE0
CKE
DRAM_ODT
DRAM_ODT0
ODT
DRAM_RAS
DRAM_RAS
RAS#
DRAM_CAS
DRAM_CAS
CAS#
DRAM_WE
DRAM_SDWE
WE#
数据
第二批布线
DRAM_DATA[15:0]
DRAM_DATA[15:00]
DQ[15:0]
DRAM_LDM
DRAM_UDM
DRAM_DQM0
DRAM_DQM1
LDM
UDM
差分对
DRAM_LDQS_P/N
DRAM_UDQS_P/N
DRAM_SDQS0+/-
DRAM_SDQS1+/-
LDQS,LDQS#
UDQS,UDQS#
DRAM_CLK_P/N
DRAM_SDCLK0+/-
CK,CK#
其他
第三批布线
ZQ
DRAM_ZQPAD
关于等长须要等长的有:
DDR:没啥说的,几百兆的频率,必须。SD、eMMC:eMMC最好也是等长,SD速率实在并不高,这两个拉个等长也是顺手的事。ENET:拉个等长也是顺手的事,但载板上我们故意ENET1等长,ENET2不等长,实际测试下来,差异不大。USB:拉个等长也是顺手的事,网上建议说90Ω阻抗、不能跨层、用GND布线包裹,GND每隔2mm打过孔,我是全单照做,不做有什么影响?不知道。总之,等长这个事情,布完线拉个等长,是体力活,缘故原由便是核心板空间我要只管即便压得小,以是全体事情便是反复地 布线-拉等长-调度原件间隔-再布线-再拉等长-再调度原件间隔。
LCD和CSI要不要等长?我们们没有拉,实际不影响。为什么不拉?空间太局促了,体力也跟不上了。特殊是LCD!
如下绿框,便是CPU的LCD到高下拉电阻后引出到DDR金手指,这些排线我们是贴着排的,也便是CPU那一排3颗芯片和核心板下边沿的金手指已经是最近的了。
eMMC连线
这货BGA特殊小,间距特殊紧,非要从ball之间拉线的话,对制板工艺哀求就特殊高,以是按照eMMC的手册和网上的建议,直接删掉几个ball后出线,实践证明这招挺好用。
eMMC还有一些其他的封装,不符合eMMC封装规范的,ball比较大,间距也比较大,用这样的封装对布线有一定帮助。还有一些芯片,eMMC封装尺寸较小,也能缩小eMMC和CPU的间隔。但是考虑到用这样的eMMC,物料选择余地就非常小了,以是还是考虑用正常尺寸的eMMC,反正就如上面说的,直接删掉几个ball后出线,如下图,绿框的地方就去掉了好些个ball
芯片去耦电容的放置
任何手册上,关于去耦电容,都会哀求挨着引脚,我们只对CPU这么处理。i.MX6ULL这款芯片的电源引脚集中性布局在中心,这么处理的话电容只能放在电路板背面,也就意味着电路板须要双面贴片,本钱double不说,只能用0402封装。
DDR和eMMC么,qtmd!
你们就不奉养了,如下图红框便是DDR和eMMC的电源引脚对应的去耦电容。
启动配置
i.MX6ULL有BOOT1、2和LCD用于配置启动,我们选择了eMMC,不用NAND,以是芯片启动仔细方案起来只有3种:
核心板的eMMC启动载板的SD卡启动USB烧录模式这对引脚高下拉简化了很多。剩下的问题便是LCD那一排高下拉电阻放在核心板还是载板?我们考虑核心板已经将电源部分放到载板了,再将电阻也放到载板就太横暴了。总得干点活,要不然核心板就真只剩下CPU、DDR、eMMC,这不好。
总结核心板省去了电源部分,事情量就简化了很多。最难的问题便是搞懂i.MX6ULL所须要的电源,也即手册说的power domain。最耗体力的是DDR部分的布线,余下的都不是什么难事。
下一篇分享载板的设计履历。载板的问题不在于高速,而在于方案太多。







