PIN/PAD Design
PIN/PAD Design in SoC by ICSoC
Part 1:
估计会有一段时间不做SoC Integration方面的工作了,所以花时间总结了一下之前关于芯片的IO设计的一些经验,主要是方便自己将来重新拾起,同时也希望能和大家分享、讨论和学习。内容很简略,基本都是一句话。
先啰嗦一下这项工作的责任,曾经有个面试官还以为这个工作是自己设计IO cell的电路,误会无处不在。这项工作还是挺有意思的,有助于理解芯片的物理实现细节,对于非微电子专业出身的芯片设计者来说尤其是个加深理解芯片的机会。
这项工作不是从头去设计一个IO或者PAD的电路结构,做SoC的Design House一般都是在SoC芯片中例化现成的IO cell和PAD,这些cell一般是由foundry或者IP提供商提供的。
主要工作按内容可以分为:
1.修改PAD opening
2.例化IO cells
3.设计IO Controller
按技术要点可以分得更细:
1.确定PAD opening尺寸
2.IO类型选择
3.IO controller
4.IO floorplan
5.Bonding Map(封装)
6.设计自动化
Part 2:
1.确定pad opening的尺寸
一般前端工程师不需要关心这个,不过有时候由于总总原因,比如测试、封装、面积成本等原因也不得不考虑一下。
主要考虑两个方面来确定opening的尺寸,一是做wafer probe test时需要接触探针的部分,由于探针的撞击可能出现凹痕,有些封装厂认为这部分区域就不适合做bonding wire了。所以需要跟做wafer probe的厂商确认probe需要的面积,然后加上封装厂做bonding时需要的面积,总面积就是pad opening的大小了。有时候两者可以有一定的重合。
bonding所需面积的影响因素有几种,bonding wire的直径、数量和材质。这些封装厂都会提供一个数据给design house做为要求。这里不得不说的是,做IC的又少了一条生路了,以前失业了还可以收收废电路板,把上面的芯片拆下来炼炼金子,以后都改成铜线的bonding wire了,这个财路估计是不可能有了。
这部分工作由于需要各个厂商交互,所以一般由万能的前端工程师完成尺寸计算,然后交由悲催的后端工程师具体实现。有时候可能还需要foundry和IP提供商参与评估,因为现在CUP IO越来越被广泛使用了,要修改人家设计好的pad opening,可能对于其下的电路来说会有一定的影响。不知道大家都用什么尺寸的CUP?:)有时候需要考虑CUP IO的尺寸和pad opening的尺寸的配合问题,工艺越来越先进,gate越来越小,而IO却没有明显的减小。对于pad limited的设计来说,有时候pad opening做的太小也没有意义,因为下面的IO已经摩肩接踵了。有时候计算出的最小pad opening,也会制约IO cell的摆放密度。这也是一个需要折衷的地方。
2.IO类型选择
主要考虑四个方面,首先当然是继承上颗优秀芯片的选择,毕竟是经过量产保证的。由于人员流动,很多技术方面的考虑不一定能够完整继承下来。能弄清楚的错误当然可以改过来,很多貌似不合理的选择有时候隐藏着很偏僻的考虑,一不小心就在某种corner case下摔个跟头。好吧,大家哈哈一笑算了,谁让俺是个阴谋论者呢,哈哈!
如果是input IO的话,需要考虑一下是否是毛刺敏感的信号,是否需要用带有施密特功能的IO,例如芯片的外部复位。这种IO的其它功能可能会受限。
再有就是output IO的驱动能力的考虑。驱动能力小了当然有问题,可能无法正常驱动外设;大了可能会增大SSN,即所谓同时翻转噪声,也叫SSO效应,会增加IO电源的负担。驱动能力的评估要考虑IO上的负载大小,查查外设芯片的相关pin的负载可以计算出来。评估SSN,一是可以建立spice模型做个仿真(数字前端工程师真是万能啊,连spice都得会),二是简单计算一下sum of driving factor (SDF),具体计算过程就是些加减乘除,可以参考IO的app note,相比spice计算是简单多了。一般来说,除了SDR/DDR等高速数字接口外,其它不那么快的用excel做个表格把SDF计算计算也就行了。
最后一点就是IO内部的上拉、下拉选择。IO内部之所以有这些pull电阻,主要是防止PIN/PAD浮空时,从IO输出到芯片内的信号可以有个固定值,防止内部逻辑乱掉。有些库的IO的电阻是可以使能的,有些不可以。但一般都是只能选择有上拉电阻或者下拉电阻,在这两种之间选择时,需要考虑芯片将来安装到PCB上时,这个IO外部会有哪种pull,保持一致就好了。打住,一个IO的选择搞得跟找对象一样,太离谱了,其实合适最好。
写到最后忽然想起来个事情,就是在IO mux中,曾经有个同事把这些mux组合逻辑全部改写成了always block,看起来code清爽了许多,貌似比assign后面跟若干层嵌套的?():()好看?这就是仁者见仁智者见智了。
3.IO Controller
这部分不复杂,只是繁琐,实现的时候别漏了什么就好。
3.1 IO Multiplexing
IO复用主要含有正常功能复用和测试模式复用两大类。功能复用可以分为静态复用和动态复用。
静态复用顾名思义,是在一个相对大尺度的时间段内一个IO上的功能是不变的,一般通过软件配置寄存器、封装、strap pin实现。
动态复用的时间尺度相对小一点,一般需要做点硬件逻辑自动实现多种功能在一个IO上的切换。比如同一组IO既做存储器接口也做显示接口,当播放视频的时候,需要从存储器中输入数据,然后把这些数据再输出到显示设备上,这种应用场景下这组IO一会儿做输入给存储器,一会儿做输出给显示设备,为了防止打架,需要处理好切换过程。测试模式复用一般静态复用就够了。
3.2 GPIO Implementation
消费类芯片竞争激烈,如何用更小的成本实现更多的功能是个很大的挑战。具体到IO上,当然希望所有的数字IO都能在其正常功能之外,还能被软件自由的控制以扩充功能。我们称之为通用IO。GPIO的功能包括,IO方向的控制、输出值的控制、外部状态的输入、片外中断接收(沿触发、电平触发、抗毛刺等)、开漏模拟等等。
3.3 Strap Pin Implementation
strap pin是个非常有趣的功能。可以有两种实现方式,一种是用上电复位驱动一个latch来捕获strap pin上的设定值;另一种是用一个free running的clock来寄存strap pin上的值。strap pin的应用主要用于指示某种功能是否被激活,而不占用额外的pin。
3.4 IO Status Initialization
IO在上电时的状态非常重要。最大的原则就是不对外部世界产生干扰,通常我们会控制上电时IO处于输入状态。当然特殊情况例外。另外一个考虑就是上电时不要产生较大的电流。还要考虑IO内部的上下拉电阻是否需要默认使能。还有就是IO上电和core上电的顺序,以及断电的顺序。
3.5 Design for Flow
需要为时钟定义点创建buffer。提供case analysis的说明文档。为scan hookup点创建buffer。
可能每个design house的做法不同,有些不在IO这个模块里做。
3.6 Design for Test
前面提到了一些。还有就是内部IP的测试,通常需要把这些IP的所有pin都在某种测试模式下引出到芯片IO上。还需要考虑这些IP在测试模式下的供电方案,通常需要做个mux,以区分功能和测试。最大的原则考虑是节省测试成本,减少测试时间,可以考虑把多种测试模式合并为一个。
Part 3:
4. IO floorplan
也就是IO的摆放。
首先考虑的是有利于bonding,不可以让bonding线交叉、接触等等。当做的芯片需要pin2pin兼容一款旧芯片时,IO的摆放就相当的痛苦。跟玩积木类似的感觉。LQ封装时,注意有substrate或者flag可以共用,可以把所有的groud都先bond到这上面,然后再从substrate上bond到finger上。BGA的更复杂点,substrate有多层,需要专门的工程师完成布线。这部分工作的成果是一份bonding map,封装厂要根据此文档完成封装。
其次考虑模拟IP的要求。这些IP都有固定的出pin顺序,有些甚至带有自有的IO。需要遵循chip floorplan。还要考虑IO电源域的划分。模拟和数字、数字和数字、模拟和模拟之间可能需要用power cut cell隔离。这些隔离单元的选择,有时候需要考虑是否把ground都short在一起。需要在地弹噪声影响和ESD之间做个权衡。
最后是供电IO的布局。需要计算一下IO ring上的IR drop,前端一般只是根据方块电阻简单计算一下,准确的仿真可以交给悲催的后端工程师。有前同事@gaojun2340883757提到的ESD整体结构的问题,没有亲自设计过不太懂,只知道在有空闲的地方多放些dummy的电源IO。印象里我们的ESD结构是后端工程们负责处理的。SSO的计算和仿真前面提到过了。还有个EM的问题,电迁移导致的金属失效,一般估算一下芯片的整体功耗,看看现有的电源和地IO的总电流能不能承受。
5. Bonding Map
这个文档是design house和封装厂的接口。它描述了设计者对于芯片的封装要求。封装厂会根据这份文档完成封装设计,其结果需要design house的设计工程师确认。
Bonding Map中含有的信息包括,封装类型、die size、scribe line和seal ring宽度,还有PAD opening的尺寸和坐标。这些坐标通常是后端工程师从版图中提取的,前端工程师需要计算一下是否合理。最后还有最重要的,就是wire bonding的信息。它指定了每一个PAD opening需要bonding到哪一个finger,哪些PAD之间需要做bonding,哪些PAD需要bonding到substrate,哪些bonding是需要多根wire的。multi-wire bonding有助于减小电感,抑制SSN,当然其缺点是增加了成本。
这个文档一般是excel格式的,也有很多的技巧在里面,比较好玩。
6. 设计自动化
这部分很简略,因为其个人的色彩很浓厚。有些脚本自己觉得好用,换个人就不一定能看得懂、用得方便了。
基本上可以考虑从IO mux逻辑的自动生成、IO cell的自动例化、PAD opening坐标和尺寸的自动check几个方面琢磨一下。这些都是比较规律的东西,同时又是繁琐,容易出错的。我个人偏好用tcl写一些脚本,可读性比perl强,且受到众多EDA工具的支持,不用重复学习。
转载http://blog.sina.com.cn/s/blog_c28badc30101i8kb.html

浙公网安备 33010602011771号