More Website Templates @ Templates.com!
技术优势
Latch up rule 难点:
- 在 IC设计规则中,我们经常遇到有关Latch up rule的描述,这些规则由于不太容易在DRC Code中实现,因此,大部分Foundry给设计工程师的建议是:通过“目视”的手段来手工检查这些规则,这给设计留下了一些隐患。
- Latch up Rule最常见的规则是“隔离”或者“挡住”问题,如下:
- 该规则要求在IO区域到内部区域必须有一个完整的Guard Ring隔离开,上图中左边图形是符合设计规则的,而右边图形是不符合设计规则的。看起来似乎很简单,但是,由于通用的DRC工具只支持2个layer的相互关系检查,不支持3个layer的几何操作,而隔离问题一般都是要求layer A与layer B之间必须有layer C的隔离,它是一个典型的3 layer操作,该如何解决呢?除了正对方向的隔离问题,斜线方向的隔离也是常见的规则,如下:
- 上图中,从IO区域到内部区域不是正对的方向,而是斜线的方向,规则要求二者之间也要有Guard Ring隔离。可以看到,竖向的隔离层把虚线斜线区域全部隔离开了,符合规则。而横向的隔离层图形长度不够长,没有完全把IO到内部区域隔离,需要报错。那么,斜线的隔离检查又该如何做呢?除了IO区域与内部区域是否有Guard Ring隔离的问题,同时隔离的Guard Ring还有顺序的问题,如下:
- 左边图示从IO区域到内部区域是先P Guard Ring,后N Guard Ring,其顺序是正确的,而右边图形顺序反了,是不符合规则的。顺序问题该如何检查呢?不仅是IO区域到内部区域需要有隔离规则,内部区域的mos管如果total width比较大,同样也需要有隔离规则,如下:
- 左图是一个total width超过了一定范围的NMOS管,它右侧首先保证有一个Guard Ring把它与pmos管隔开,同时规则还要求pmos左边还要有一个VDD contact的pickup把其与Guard Ring隔离。右侧图形,VDD contact的位置不对,没有位于pmos管与Nch之间,因此不符合设计规则。总结这些规则的共同点,“隔离”或者“挡住”问题是Latch up最基本的检查,所谓挡住就是指在layerA, LayerB之间检查是否有layer C的图形挡住。
- 需求:提供一个三layer输入的基本命令。
- 常用的DRC工具只提供1个layer或者2个layer的检查命令,不提供三layer输入的检查命令。 如果利用DRC的多个命令组合来生成上述命令,由于普通的DRC命令会将不同图形的结果连成一片,会导致报错结果无法区分具体的区域,失去了检查的意义。如下图所示:
- 上图中,黄色图形是IO区域,红色图形是内部区域的mos管,要检查在黄色图形与绿色图形之间在200um范围内是否有一个绿色的图形被隔离开。
- 普通的DRC命令方法是:首先把红色图形和黄色图形做一个间距为200um的检查,把左右的报错结果组合成一个或多个多边形图形,然后判断这个多边形图形是否被绿色图形隔断了。
- 上述方法的问题是: 当绿色图形只要位于200um的范围内隔离了某几个mos管,就会被判定为把所有的mos管都隔离开了。上图中的绿色图形与黄色图形之间还有几个红色mos管没有被实际隔离,但是DRC Code的间距检查由于把结果连接成了一个大片的图形,它无法判断方位,只能判断这个大片的图形是否有被绿色图形切开,因此出现了误判。
- 有些DRC工具的间距检查提供了Shield的选项,试图只把最近的间距图形报错,不去把所有符合间距错误的图形都报错出来,试图避免这个问题。但是,Shield的选项是专门为了2层图形的检查设计的,它不是为了3层图形检查设计的。因此2层图形检查的结果输出是“边”,而不是图形。作为“边”是无法参与后续的3层图形操作的。如果把“边”再转换为很细的小图形去做后续的运算,则又陷入了“边”形成图形后连接成一片大的图形,无法区分方位和具体位置的问题,从而出现误判。
- 因此,必须寻找一种方法:它可以把2个layer之间被隔离的图形准确找到。这个方法实现困难吗?为什么大部分Foundry没有提供这样的检查?国内只有个别Foundry给用户提供了该问题的解决方案,他们的方案为什么采用了helmet的设计思路?该思路可以推广到其它Foundry吗?如果某些Foundry不提供该方案,IC设计公司可以自行写DRC Code实现吗?如何实现?
- 上面我们提到:为了解决Latch up rule中的隔离或者挡住问题,必须寻找一种方法:它可以把2个layer之间被隔离的图形准确找到。
- 如上图所示,在左上的Nch Transistor W > 200um的大管子与坐下的Pch小管子之间必须有一个N+ Guard Ring将二者隔离。
- 前文还曾经提到,目前通用的DRC工具暂时不提供类似的检查命令,为了解决该问题,我们自定义了一套与Latch up rule检查相关的命令,该命令就是helmet系统的主要功能。Helmet系统可以嵌于主流的DRC工具中运行,结果报错形式也与主流DRC工具兼容。
- 上图中黄色图形是total width大于200微米的N型大管子,红色图形是p型小管子,要检查它们之间是否被绿色的N+ Guard Ring阻挡。
- 系统首先定义了一个关键字:
- a. 隔离命令检查关键字: FindClosestRegion
- – 格式:FindClosestRegion LayerA LayerB Distance
- 1. LayerA, LayerB: 图形层
- 2. Distance: 两层图形间的最小检查距离
- b. 功能: 寻找LayerA与LayerB的最近的图形之间的垂直投影区域,如果LayerA与LayerB之间有多个图形,只寻找最近的图形。输出他们之间的区域。
- 如上图所示,FindClosestRegion的结果就是图中的黑色虚线,它的特点是:任意2个虚线都没有交叉,虚线仅仅是layerA与layerB的最近的投影区域,即使在Distance范围内有多个图形,也仅仅找到相邻图形区域即可。
- 一旦得到了FindClosestRegion的结果,下一步的操作就比较简单了:为了判断FindClosesestRegion的区域是否被挡住,用这个区域的结果减去挡住图形,如果挡住图形被割断成2个图形,表明被挡住了,如果仍旧为一个图形,就说明没有被完全挡住。
- 第一步: 找到最近的FindClosestRegion
- WideClosestPGateRegion {
- FindClosestRegion pGate WideNGateExtent < EsdDistance
- }
- 第二步: 用第一步的结果减去阻挡层
- rule4_first {
- RemainRegion = WideGateClosestNGateRegion NOT nwell_contact_sz
- WideGateClosestNGateRegion Enclose RemainRegion < 2
- }
- 下面是一个典型的报错实例:
- 其中中间的是一个N型的大管子,上下各有几个P型的小管子,要检查它们是否被nwell contact的ring阻挡。 放大上方的报错图形,可以看到:
- 其中紫红色报错区域显示,上方的pmos没有被一个N+ Guard Ring隔离,因此报错。 另外一个报错是:
- 上图中的灰色高亮报错原因是:pmos管虽然被N+ Guard Ring隔离,但是由于N+ Guard Ring的nwell图形没有与pmos公用一个nwell,因此不符合要求,也要报错。 上边还有2个pmos,它们没有报错,原因是:它们的N+ Guard Ring都与pmos共用了一个nwell,符合要求。 除了正对的隔离要求外,Latch up Rule还要求在斜线方向也要有隔离阻挡。
- 如上图所示,需要判断绿色与红色图形之间是否被蓝色图形在斜线方向隔离。 为了实现斜线隔离阻挡检查命令,Helmet系统通过2条组合命令来实现:
- 步骤1 : SeparateRing nwell_contact > 0 记录阻挡用图形的坐标,供下一条命令使用
- 步骤2: SlantSeparate pGate WideNGateExtent < EsdDistance 检查在两个Layer之间是否有斜线阻挡图形存在
- 这2个关键字的核心思想是:每个斜线图形是独立的“边”,不要让斜线图形生成图形,否则图形连接成一片大的区域后,就无法判断到底哪个斜线没有被阻挡了。
- 上图是一个典型的斜线隔离报错,白色线段是报错图形,它显示N+ Guard Ring没有完全把pmos包围起来,留出了一个小缺口,因此报错。 下面是另外一个报错图示:
- 它显示:N+ Guard Ring只有横向的隔离,没有加纵向的隔离,导致在斜线方向上没有完全被隔离,因此报错。 通过以上分析,可以看到,helmet系统通过添加新的关键字,实现了主流DRC工具没有解决的正对阻挡和斜线阻挡的问题。 再看几个典型的报错图示:
- 上图是ESD器件都内部器件之间本来需要2个Guard Ring,结果只出现了一个Guard Ring,因此报错。
- 上图是:由于Guard Ring中间有好多小缺口,导致在斜线方向的阻挡不满足要求,报错。
- 上图是: 要求从ESD器件到内部器件的 Guard Ring 应该是先P型Ring,后N型Ring,但是目前的图形画反了,因此报错。 除了上述常见的Latch up Rule以外,我们在ESD/Latch up检查中还经常遇到以下几类约束,该如何实现呢?
- 下面我们再具体谈谈DRC中的隔离(阻挡)检查
- 所谓隔离(阻挡)检查就是检查在 layer1和layer2之间必须有layer3将其隔离(或阻挡)。如下图所示:
- 中间的图形是一个layer,上下的图形是另外一个layer,这2个layer必须被某个layer隔离或者阻挡才符合DRC规则。
- 当时,我们建议观众用最简单的实现方法:
- 第一步: 找到layer1, layer2距离最近的区域:FindClosestRegion
- region1 {
- FindClosestRegion layer1 layer2 < Dis
- }
- 第二步: 用第一步的结果减去layer3,看是否被切割成2个区域
- check {
- RemainRegion = region1 NOT layer3
- region1 Enclose RemainRegion < 2
- }
- 不过,也有观众提出:我没有helmet工具,因此无法用你提到的关键字:FindCloestRegion,是否可以直接用主流工具的命令呢?
- 回答是:可以通过比较复杂的Drc Code操作间接地近似实现。
- 我们首先先了解Drc Code一个命令: DFM Space。其用法是:
- DFM Space layer1 layer2 < dis COUNT ==4
- 它的含义是:检查layer1和layer2的距离是否小于dis,其中COUNT == 4的含义是:如果layer1 , layer2图形在dis距离范围内出现了Shield的特点,则把Shield以外的图形忽略。
- 上图中,layer1是A边,layer2是B边,蓝色的S是layer1的另外一个边,S边就是Shield图形,它把间距检查的某些区域挡住了,报错时,被Shield的区域不被输出,从而大大减少了报错个数,并且为后续的进一步操作留下了空间。
- 利用上述概念,我们可以如下实现layer1, layer2被layer3阻挡的操作:
- 第一步:
- edge1 {
- X = DFM Space [layer1] layer2 < dis COUNT ==4
- Y = DFM Space layer1 [layer2] < dis COUNT ==4
- }
- 第一步的结果是把layer1, layer2的最近距离图形找到,与helmet工具的findCloesestRregion类似,唯一的区别是:该命令输出的结果是边,而不是图形。由于结果是边,就需要做额外的操作把它变成图形。
- 第二步:
- region1 {
- regionx = EXPAND EDGE X outside by 0.001
- regiony = EXPAND EDGE Y outside by 0.001
- }
- 第二步的结果是把边扩展为一个很细的矩形。准备检查在x与y的矩形之间是否有layer3被隔离开。
- 第三步:
- no_layer2 = BULK not layer2
- no_laeyr1 = BULK not layer1
- region2 {
- region2 = SIZE regionx by dis INSIDE OF LAYER no_layer2 step 0.03
- }
- 第3步的含义是: 把layer1的边向外扩充dis的距离,但是在扩充过程中如果遇到layer2的边阻挡,就停下来不要再扩了。step 0.03的值是layer2图形宽度的一半。这个size step的操作就是我们在前面文章中多次提到的“孙悟空跳不出如来佛手心”的操作。
- 第四步: 用第三步的结果减去layer3,看是否被切割成2个区域
- check {
- RemainRegion = region2 NOT layer3
- region2 Enclose RemainRegion < 2
- }
- 看起来,通过上述四个步骤实现了helmet工具的FindCloesestRegion的命令,不过,这个操作隐含着一些问题:如下:
- 上图中绿色图形是layer1,黄色图形是layer2,红色图形是layer3。直观地看,layer1, layer2确实被layer3隔离开了。
- 但是,在第三步做size操作时,由于绿色图形的2条边对外做size扩充后上下2个图形连接成了一个图形,导致最后做第四步减去layer3时,其结果还是连接场一片的一个图形,不是被分割成2个图形,从而报错,出现了伪错。 遇到上述问题,该如何解决呢?
- 一种解决办法是:毕竟通过上述检查已经能够查出绝大多数问题了,剩余的问题由人工来分析,工作量也不是很大。
- 另外一种办法就是:把上图中layer1的竖向的边分解成很多短边,每个短边中间被一个0.001的很细的距离隔断,即纵向边的短边都是没有相邻的边,这样第三步做size操作时,就不会把多个区域连在一起了。这种方法实现起来比较麻烦,有兴趣的读者可以自己分析来写出具体代码。
- 总结:隔离检查是DRC检查中经常遇到的问题,由于普通的DRC命令不支持该检查,用户需要写复杂的组合命令来实现该功能。用户经常的问题是:为什么几大EDA公司的工具明明知道有该需求,就是不通过一条简洁的命令来实现呢?
- 答案是:任何自动化的功能都是需要权衡实现代价和带来的收益的。EDA公司经过仔细分析发现:实现该命令的工作量和难度远远大于预期获得的收益,因此留给用户自己通过命令组合来实现。
- 难道用户就没有办法使用简单命令实现上述需求吗?幸运的是,有一个EDA公司提供了该命令的简单实现,这就是天津蓝海微公司提供的helmet工具。更加幸运的是,针对国内的Fabless设计公司,helmet工具提供了为期3个月的免费使用期,具体日期为:2018年10月1日至2018年12月31日。
DRC中的隔离(阻挡)检查: