这次选用的是Cadence家族,Capture CIS & Allegro PCB,这是第一次使用,做的也是6层PCB,所以花费了将近一个月时间来边学边做(也不是整天在弄)。根据Allegro的Status,PCB的绘制时间花了15个小时。

Layout

线路主要在Top和Bottom层,Layout的也不怎么好,勉强能用的水平。

PCB

焊接

很难受的是BGA焊盘因为焊接别的元器件的时候有点氧化了不太沾锡,然后找了一根导线当吸锡线拖焊盘,结果这个导线太硬了直接把阻焊干掉了,心态爆炸。还好有绿油补了一下。

成品

调试

虽然一再检查原理图和PCB有没有问题,但是该来的还是来了。

1)NGFF座子下面有两个定位孔,其中一个定位孔不小心画成了焊盘,把座子底下的定位脚割掉就行了。

2)电源的P-MOS缺少上拉电阻,导致无法关机,补了一个上去。

3)DAP Link的TGT_RST脚缺少上拉电阻,默认会进入升级模式,这个可以通过修改固件代码解决,不过方便还是接个上拉电阻。

4)USB_HUB的一个配置脚应该悬空,此处接了GND,割掉了一块铜。

5)头疼的Flash,D0和D1接反了,然后D2,D3缺少了上拉电阻,飞了不少线。

6)电源键接到了FPGA的引脚上面,但是关机后会把电流灌到FPGA里面去,会影响电路状态,但是线路在内层,刮开了PCB把线路切断。

7)晶振应该连接到MRCC_P,没注意连接到了MRCC_N引脚上面去了,这个可以修改约束忽略。
8)当FPGA断电之后,插上调试器,调试器的信号线会把电流灌到FPGA,但是似乎没什么影响,只是关机之后VCCIO_3V3会有2.8V的电压。

改进

1)增加RTC功能,因为有文件储存功能,如果没有RTC需要手动设置时间来设置文件的时间戳,没有时间戳的话那就只能默认1970年了,对文件储存和导到电脑上是个小问题。
2)目前这个TF卡座比较难拔,可以修改自弹式的方便使用。
3)BGA下面禁止铺铜,如果阻焊出现脱落很可能导致连锡。
4)背光目前是用3.3V供电,但是实测会影响电源的质量,可以修改到使用BAT供电。
5)按理说JTAG信号线应该加上上拉电阻,目前没加但是能用。
6)DAP的信号线没加上拉电阻无法对CM3识别,开启FPGA引脚内部上拉可以正常调试,但最好还是加上外部上拉电阻。
7)10个按键也没有上拉电阻,最好也是加上。
8)FPGA的INIT、DONE引脚官方手册是说了要上拉的,但是没有上拉也能用,后面也要加上。
9)在屏幕排线区域添加丝印。
10)在调试器电路部分添加丝印,以便于缺省。
11)有几个地方的器件与FPGA的供电不是同一个域,但是他们有信号线连在了FPGA上面,会导致电流灌进FPGA,虽然不怎么影响运行,但是需要解决。
12)目前板子上有两个USB-C口,充电方案也不太好,最好把两个USB-C整合成一个,使用CC来充电,使用DM DP来做数据传输。

电源

使用的设备示波器是DS1104Z,万用表Fluke 15B。测试各路电源电压都正常,测得电压、纹波或噪声数据如下:

VRM电压(V)纹波/噪声(mV)类型Frequency(MHz)Jitter(ns)
电池------9.4DC-DC1.4585.6
1.0V0.99928DC-DC------------
1.2V1.1959.5LDO------------
1.8V1.80635DC-DC------------
3.3V3.29656DC-DC2.4830
连接充电器,电池4.15V~4.19V,FPGA未加载比特流,未连接屏幕,未插入SD卡。

VRM电压(V)纹波/噪声(mV)类型Frequency(MHz)Jitter(ns)
电池------9.0DC-DC1.4585.6
1.0V1.00014.8DC-DC------------
1.2V1.19610.9LDO------------
1.8V1.80624.9DC-DC------------
3.3V3.29716.2DC-DC2.4817.2
连接充电器,电池4.18V~4.19V,FPGA加载CM3比特流,未连接屏幕,未插入SD卡。

VRM输入电流(mA)输入电压(V)输出电流(mA)输出电压(V)效率
1.0V54.14.19122.91.054.22%
1.8V42.24.1980.11.881.54%
3.3V16.064.1913.423.365.81%
3.3V(PS)12.474.1913.753.386.84%
各路VRM效率

其中1.0V和1.8V由两个MP2162提供,1.8V的效率还算比较高,但是1.0V的效率明显低了,可能是因为输入输出电压的关系。不过这个效率还是高于LDO的。3.3V有PS(Power Save)模式,当启用PS模式之后,效率有了很大提升。但是也就看个大概就行了,万用表存在误差,也还会受到其它方面的影响不是太准确。由于1.2V的输出电流仅1mA多一点,相比之下实在太小了,所以没有记录。

如果所有VRM换做是LDO,按照最理想的情况来计算可得:

VRM输入电流(mA)输入电压(V)输出电流(mA)输出电压(V)效率
1.0V122.94.19122.91.023.87%
1.8V80.14.1980.11.842.96%
3.3V13.424.1913.423.378.75%

使用LDO 1.0V和1.8V的效率差不多只有DC-DC的一半,稍微能打的就3.3V,但是当电池电压下降到3.3V+LDO压差的时候,LDO就无法输出3.3V了,而且这时的LDO的PSRR就是个摆设。并且LDO的总输入需要906.8mW,而DC-DC的总输入只需要523.04mW。这些功耗对于续航待机的影响也比较大。

目前负载比较小,当FPGA运行的电路多起来的时候,负载也会大很多,按照数据手册到时候DC-DC的效率还可以提升。


测试了一下4路供电的上电时间,和下电时间和过冲,其中3.3V上升似乎过快,并且有过冲,其它三路良好。

VRM上升时间(ms)上电时序(ms)过冲?
电池0.01030.0103
1.0V1.9802.520
1.2V2.700------
1.8V1.8104.400
3.3V0.0206------

测得某些工作条件下的整体功耗如下:

状态电流(mA)电压(V)功耗(mW)
关机0.093.8120.344
未加载83.23.798315.99
加载CM3128.43.789486.51
多种条件下的功耗。未连接充电器,未连接屏幕,未插入SD卡。

Vivado中预估功耗为382mW,若按照85%的效率计算输入功率应该在449.41mW,比实际小了47.1mW,算上误差,以及板子上的其它器件的待机功耗也应该差不多了。

Xilinx公司的Artix 7、Kintex7、Virtex 7等器件电源精度要求是在±30mV以内,暂且根据上面的测试结果来看,各路供电的负载调整性能还算不错。也满足精度要求。