.. _topics-DRC函数说明: ================ DRC函数说明 ================ 函数基本语法格式为drc.function_name(arg_1, arg_2, arg_3)。其中drc为函数类型,function_name为函数名,括号()内为函数参数,每个参数字段用逗号间隔。 参数语法格式为arg_1=value,其中arg_1为参数名,value为参数值。函数的基础语法说明中中括号[]内的参数字段为可选参数,其余为必填参数,函数关键字都为可选参数。 external ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.external(layer1=layer1,[layer2=layer2],value="constraint",out="edge_pairs") 例:共面波导外部间距检测 .. code-block:: python # 共面波导外部间距检测 CPW_ExternalCheck = drc.external(layer1=CPW, value_limits="x<50", out="polygons") CPW_ExternalCheck.output("共面波导外部间距检测","共面波导管道外部之间的间距小于50um,输出结果为多边形") ---------------- 使用说明 ---------------- 图层1边外部到图层2边 ``外部间距`` 检查,对于版图上所有的多边形的边,可以将每条边的两侧分为内侧和外侧。external检查从一条边的外侧到另一条边的外侧的间距是否符合约束值。 如图所示,如果蓝色图形为图层layer2,黑色框为图层layer1,当constraint为小于1时,检查范围为红色虚线范围。value必须有 ``最大值`` ,因此constraint的写法中x>a、x>=a、x!=a是不可用的。 .. image:: ../_static/images/图片1.png 输出结果即报错图形为红色边,输出的结果为layer2边上的点layer1上的点之间距离小于1um的点的集合。 .. image:: ../_static/images/图片2.png 默认情况下,external会检查所有输入图层的所有多边形的所有边,不会检测存在重合的多边形的边的重合部分。如图所示,黑色部分不再检查。 .. image:: ../_static/images/图片3.png 默认情况下,检查不会穿透输入图层的边。如图所示,左侧图形相对于右侧和中间矩形的间距均小于10um,但是对左侧矩形检查时,输出结果只有左侧矩形的右边和中间矩形的左边,而不会穿透中间矩形检查左侧矩形和右侧矩形的间距。 .. image:: ../_static/images/图片4.png 默认情况下,只检查平行和角度为锐角的边,不检查垂直和角度为钝角的边。如图所示,检查1为平行边,2为锐角边,3为垂直边,4为钝角边。 .. image:: ../_static/images/图片5.png ---------------- 关键字 ---------------- * abut_limits="constraint" 设置检测夹角内的相邻边间的间距。默认情况下,layer1与layer2存在重合,因此不会进行检查。constraint值设置小于90,如图所示,输出结果为黑色部分。constraint值范围必须在0-180之间。 .. image:: ../_static/images/图片6.png * space=True/False 设置是否只测量不同多边形的边之间的间距。如图所示,添加space=Tru关键字后,不再检查灰色间距,只检查红色间距 .. image:: ../_static/images/图片7.png * angle_limits="constraint" 设置角度约束,如果不指定约束值,则只检查非平行边之间的间距,如果指定了角度约束值,则只检查符合角度约束值的边之间的间距。constraint范围为0-180。 如图所示,对于左侧矩形右边沿,只检测角度等于0的两条边,角度不为0的边不进行检查。 .. image:: ../_static/images/图片8.png * opposite=True/False 设置是否改变测量范围。如图所示,默认测量范围为所有满足约束值的点的集合,添加opposite关键字后,测量范围的长为测量边长,宽为约束值的矩形。 .. image:: ../_static/images/图片9.png * out="edge_pairs/polygons/edges" 此关键字设置输出的图形类型,分别为边对、多边形、边。当未添加该关键字时,或值为polygons时,输出结果为多边形;值为edge_pairs时,输出结果为边对;值为edge时,输出结果为边。 .. image:: ../_static/images/图片10.png internal ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.internal(layer1=layer1,[layer2=layer2],value="constraint",out="edge_pairs") 例:共面波导管道宽度检测 .. code-block:: python CPW_pipe_width_check = drc.internal(layer1=CPW_pipe, value_limits="x<2", abut_limits="x<90", out="polygons") CPW_pipe_width_check.output("共面波导管道宽度检测","共面波导管道宽度间距小于2um,输出结果为多边形") ---------------- 使用说明 ---------------- internal检查从一条边的 ``内侧`` 到另一条边的 ``内侧`` 之间的间距是否符合约束值,internal的layer2参数为可选项,如未添加layer2参数,则对layer1图形内部进行检查,如果添加了layer2参数,则对layer1图形与layer2图形之间进行检查。 value的值必须有最大值,因此constraint的写法中x>a、x>=a、x!=a是不可用的。 下图为internal函数的基础检查,左图为单图层间距检查,右图为双图层间距检查。由于重合部分不会进行检查,因此图形A与其他图形之间,图形B与图形C之间均不会进行检查。 .. image:: ../_static/images/图片11.png ---------------- 关键字 ---------------- * abut_limits="constraint" 设置是否增加相邻边夹角检查,输出满足条件的夹角边。constraint值范围必须在0-180之间。下图为两个图层边内部夹角小于90°的检测,输出结果为边对。 .. image:: ../_static/images/图片12.png :scale: 60% * out="edge_pairs/polygons/edges" 此关键字用于控制输出结果对象类型,可选值分别为边对、多边形、边。默认情况下,当未添加该关键字时,或值为polygons时,输出结果为多边形;值为edge_pairs时,输出结果为边对;值为edge时,输出结果为边。 .. image:: ../_static/images/图片13.png * angle_limits="constraint" 设置只测量夹角满足角度约束的边之间的间距。constraint值范围必须在0-180之间。 .. image:: ../_static/images/图片14.png * opposite=True/False 此关键字设置是否改变测量范围。如图所示,默认测量范围为所有满足约束值的点的集合,添加opposite关键字后,测量范围为长为测量边长,宽为约束值的矩形。 .. image:: ../_static/images/图片15.png .. image:: ../_static/images/图片16.png enclosure ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.enclosure(layer1=layer1,layer2=layer2,value="constraint",out="edge_pairs") 例:空气桥的桥墩与桥面间距检测 .. code-block:: python AirBridge_pier_deck_check = drc.enclosure(layer1=AirBridge_L1,layer2=AirBridge_L2, value_limits="x<2", out="polygons") AirBridge_pier_deck_check.output('空气桥桥墩与桥面间距检测', '空气桥桥墩与桥面间距小于2um', '输出结果为多边形') ---------------- 使用说明 ---------------- enclosure检查从一条边的 ``外侧`` 到另一条边的 ``内侧`` 之间的间距是否符合约束值。检查顺序固定为layer1的外侧至layer2内侧,如果需要执行layer2外侧至layer1内侧的检查,则需要交换输入图层顺序。 value的值必须有 ``最大值`` ,因此constraint的写法中x>a、x>=a、x!=a是不可用的。 下图为enclosure函数的基础检查,左右图分别为交换图层参数顺序后分别执行的检查。 .. image:: ../_static/images/图片17.png ---------------- 关键字 ---------------- * abut_limits="constraint" 设置是否增加相邻边夹角检查,输出满足条件的夹角边。constraint值范围必须在0-180之间。 .. image:: ../_static/images/图片18.png * out="edge_pairs/polygons/edges" 此关键字用于控制输出结果对象类型,可选值分别为边对、多边形、边。 默认情况下,当未添加该关键字时,或值为polygons时,输出结果为多边形;值为edge_pairs时,输出结果为边对;值为edge时,输出结果为边。 .. image:: ../_static/images/图片19.png * angle_limits="constraint" 设置只测量夹角满足角度约束的边之间的间距。constraint值范围必须在0-180之间。 如下图,只测量layer1图层外侧与layer2图层内侧非平行夹角。 .. image:: ../_static/images/图片20.png * opposite=True/False 此关键字设置是否改变测量范围。如图所示,默认测量范围为所有满足约束值的点的集合,添加opposite关键字后,测量范围为长为测量边长,宽为约束值的矩形。 .. image:: ../_static/images/图片21.png .. image:: ../_static/images/图片22.png boolean ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.boolean(layer1=layer1,layer2=layer2,operation='operation') 例:将图层Base_L1与图层CPW做“and”运算,运算结果作为CPW_pipe输出 .. code-block:: python CPW_pipe = drc.boolean(layer1=Base_L1, layer2=CPW, operation="and") ---------------- 使用说明 ---------------- 对输入图层图形执行 ``布尔运算`` 操作,并输出结果。 当layer2参数值与layer1参数值相同时,可以执行对同一个图层对象之间的布尔运算。当operation为not时,layer2参数值不能与layer1相同,相同则报语法错误。 以下图例中,红色区域为图层1与图层2的运算结果,虚线框无效 .. image:: ../_static/images/图片23.png ---------------- 关键字 ---------------- * operation='and' 输出输入图层图形的交集 .. image:: ../_static/images/图片24.png * operation='or' 输出输入图层图形的并集 .. image:: ../_static/images/图片25.png * operation='not' 输出第一个输入图层图形减去第二个输入图层图形的结果。 .. image:: ../_static/images/图片26.png * operation='xor' 输出输入图层图形不重合的图形区域。 .. image:: ../_static/images/图片27.png not_inside ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.not_inside(layer1=layer1,layer2=layer2) 例:检查indium是否在TiNpad中 .. code-block:: python Flip_Inpillar_TiNPad_check = drc.not_inside(layer1=Inpillar_Flip, layer2=Tinpad_Flip) ---------------- 使用说明 ---------------- 将所有不包含于layer2图形的layer1图形作为结果输出。如图所示,输出结果为红色边框图形。 .. image:: ../_static/images/图片28.png .. image:: ../_static/images/图片29.png not_enclose ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.not_enclose(layer1=layer1,layer2=layer2,[count='constraint']) ---------------- 使用说明 ---------------- 将所有不包含任意一个layer2图形的layer1图形作为结果输出。 .. image:: ../_static/images/图片30.png .. image:: ../_static/images/图片31.png 如果加入约束值constraint,则将所有包含layer2图形数量不满足约束值的layer1图形作为结果输出。加入约束值为>2时的输出结果如图所示。(简单来说,若layer1图形中包含了layer2图形,但是layer2图形不超过两个,输出此layer1图形) .. image:: ../_static/images/图片32.png extents ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.extents(layer=layer) ---------------- 使用说明 ---------------- 构建输入图层每个图形的包围矩形,如图所示,输出结果为虚线矩形。 .. image:: ../_static/images/图片33.png ---------------- 关键字 ---------------- * square=True/False 设置是否使extents操作不再构建包围矩形,而是以包围矩形中心为中心,构建边长为包围矩形最长边边长的正方形,如图所示。 .. image:: ../_static/images/图片34.png extent_draw ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.extent_drawn([original]) 例:包围盒子的宽度检测 .. code-block:: python #"internal"函数检测步骤1中版图包围盒子的宽度小于50um library_step_1 = drc.extent_drawn(original=True) ---------------- 使用说明 ---------------- 构建所有非数据库(规则检查中不会用到,无连接性,不用于图层定义)图层图形的包围矩形,不包含标签。 ---------------- 关键字 ---------------- * Original=Ture/false 使用extent drawn构建版图中所有图层图形的包围矩形,而不再只针对数据库图层,不包含标签。 interact_polygon ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.interact_polygons(layer1=layer1,layer2=layer2) ---------------- 使用说明 ---------------- 选择所有与layer2图形存在相交的layer1多边形,默认情况下,会选择“边和边相交”,不选择“点和点相交”及“点和边相交”两种情况。如图所示,黑色矩形为输出结果。输入必须为多边形,不是多边形则报输入对象类型错误。 .. image:: ../_static/images/图片35.png .. image:: ../_static/images/图片36.png interact_not_polygons ======================= ---------------- 基础语法 ---------------- .. code-block:: python drc.interact_not_polygons(layer1=layer1,layer2=layer2) ---------------- 使用说明 ---------------- 选择所有与layer2非多边形的图形存在相交的layer1的非多边形图形,可用对象包括点、边、边对。输入不能为多边形,是多边形则报输入对象类型错误。 .. image:: ../_static/images/图片37.png center_point ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.center_point(layer=layer1) ---------------- 使用说明 ---------------- 输出输入图层图形包围盒子的中心点。点对象仅在规则文件内使用,当作为规则检查结果输出时,在画板上显示为一个微小的正方形(边长为1)。 .. image:: ../_static/images/图片38.png center_line ================ ---------------- 基础语法 ---------------- .. code-block:: python drc.center_line(layer=layer_edge_pairs) ---------------- 使用说明 ---------------- 输出输入图层的中线。该函数的输入必须为边对。不是边对则报输入对象类型错误。 .. image:: ../_static/images/图片39.png intersection_angle ==================== ---------------- 基础语法 ---------------- .. code-block:: python drc.Intersection_angle_edges(layer=layer_edges,value="constraint") ---------------- 使用说明 ---------------- 检查输入图层相交边之间的角度是否符合约束值,输出满足条件的边。该函数的输入必须为边,不是边则报输入对象类型错误。constraint值必须在0-180之间。角度为0°与180°时是等效的,因此当constraint值为x==0与x==180时会输出相同结果。 对于任意一条边,都存在与x轴方向的两个夹角:正方向夹角和负方向夹角。Intersection_angle函数将始终使用正方向夹角用于边的夹角计算。 .. image:: ../_static/images/图片40.png