PCell设计指南—rodCreateRect实例

实例1、创建一个矩形

        注意:当你想创建一个常规的、未命名的数据库形状矩形时,应该使用dbCreateRect函数而不是rodCreateRect函数;使用dbCreateRect会产生更少的开销,从而提高性能。

你可以按照如下方式创建一个具有ROD属性的单个命名矩形:

        你可以使用类似如下的代码来创建一个矩形,并返回一个单一的ROD对象ID: 

rodCreateRect(
    ?layer    "metal2"
    ?width    4
    ?length   2
)

实例2、创建具有ROD属性的命名矩形的行和列

        想要创建常规的、未命名的数据库形状矩形的行和列,请参见"Filling a Bounding Box with Rectangles"。

        你可以使用类似如下的代码创建具有ROD属性的命名矩形的行和列:

rodCreateRect(
    ?layer        "metal1"
    ?width        1
    ?length       1
    ?origin       list( 0 0 )
    ?elementsX    4
    ?elementsY    2
    ?spaceX       1
    ?spaceY       2
)

         返回值是一个包含8个ROD对象ID的列表。


 

实例3、使用命名矩形填充边界框

        想要用常规的、未命名的数据库形状矩形填充边界框,请参见"Filling a Bounding Box with Rectangles"。

         你可以使用具有ROD属性的命名矩形填充边界框,如下图所示:

        代码如下: 

rodCreateRect(
    ?layer          "metal1"
    ?fillBBox       list( 1:1.5 10:5 )
    ?spaceX         0.5
    ?returnBoolean  t
)

        第一个矩形总是位于边界框的左下角。返回值是 t


实例4、创建一个多部分的矩形

        你可以创建一个由单个主矩形组成的多部分矩形,并填充未命名的子矩形,如下图所示:

        代码示例如下。在这个例子中,未指定 S_gap;默认情况下,它会默认distribute,从而使多余的空间放置在子矩形之间。

cvId = deGetCellView()

rodCreateRect( 
    ?layer         "metal1"
    ?width         24
    ?length        17
    ?origin        list( 0 0 )
    ?elementsX     1
    ?elementsY     1
    ?cvId          cvId
    ?subRectArray  list(
        list(
            ?layer              "metal2"
            ?width              3
            ?length             3
            ?lowerLeftOffsetX   3.3
            ?lowerLeftOffsetY   3
            ?upperRightOffsetX  -6
            ?spaceX             3.3
            ?spaceY             3             
        ) ;end first subrectangle list        
    ) ;end all subrectangle lists
) ;end rodCreateRect

 

  • 指定最小间距                

        要将多余的空间放置在子矩形的右侧或上方,可以将S_gap参数指定为minimum,如下图所示:

 

        

cvId = deGetCellView()

rodCreateRect( 
        ?layer         "metal1"
        ?width    24
        ?length   17
        ?origin list( 0 0 )
        ?elementsX 1
        ?elementsY 1
        ?cvId cvId
     ?subRectArray
        list(
     list(
         ?layer "metal2"
         ?width 3
         ?length 3
                      ?gap "minimum"
         ?lowerLeftOffsetX  3.3
         ?lowerLeftOffsetY  3
         ?upperRightOffsetX -6
         ?spaceX            3.3
         ?spaceY            3
         ) ;End first subrectangle list        
     ) ;end all subrectangle lists
     ) ; end rodCreateRect

 


实例5、创建具有重叠子矩阵的多部分矩形

        你可以创建具有重叠未命名矩形的多部分矩形,如下所示:

                你可以使用类似于以下代码的方式创建具有重叠未命名子矩形的多部分矩形,其中左下偏移参数小于0、右上偏移参数大于0。

cvId = deGetCellView()

rodCreateRect( 
    ?layer         "metal1"
    ?width    12
    ?length   12
    ?origin list( 2 2 )
    ?elementsX 1
    ?elementsY 1
    ?cvId cvId
?subRectArray
list(
  list(
     ?layer "metal2"
     ?width 1
     ?length 1
     ?lowerLeftOffsetX -2
     ?lowerLeftOffsetY -2
     ?upperRightOffsetX 2
                  ?upperRightOffsetY 2
     ?spaceX 1
     ?spaceY 1
     ) ;end first subrectangle list        
);end all subrectangle lists
);end rodCreateRect

实例6、创建地线和接触点

         你可以创建带有接触点的地线,如下图所示:

 

        在以下代码示例中,你为金属层指定了一个命名矩形,为p扩散层指定了一组未命名的子矩形,并为接触层指定了第二组未命名的子矩形:

rodCreateRect(
    ?layer         "metal1"
    ?width    10
    ?length   2
    ?origin list( 0 0 )
    ?elementsX 1
    ?elementsY 1
    ?cvId cvId
    ?subRectArray
        list(
            list(
                ?layer "pdiff"
                ?width 1
                ?length 1
                ?gap "minimum"
                ?lowerLeftOffsetX 0.5
                ?lowerLeftOffsetY 0.5
            ) ;第一组子矩形列表结束    
            list(
                ?layer "cont"
                ?width 0.5
                ?length 0.5
                ?gap "minimum"
                ?lowerLeftOffsetX 0.75
                ?lowerLeftOffsetY 0.75
                ?spaceX 1.5
                ?spaceY 1.5
            ) ;第二组子矩形列表结束    
        ) ;所有子矩形列表结束
    ) ; rodCreateRect结束

        在此示例中,为子矩形指定间距参数并不是必须的;软件会使用n_spaceX和n_spaceY参数的默认值来创建适合的接触点的数量。然而,如果你希望在电源导轨被拉伸时接触之间的间距不同于默认值,则需要指定间距参数。


实例7、拉伸多部分矩形

        以下示例包括沿Y轴方向拉伸多部分矩形的主矩形。为了使子矩形正确再生成,必须指定n_spaceY。空间参数默认为技术文件中为子矩形层定义的最小间距(minSpacing),但在这种情况下,这不会产生所需的结果。

        当你使用Virtuoso® Layout Editor的Edit - Stretch命令来拉伸主矩形时,系统会再生成所有未命名子矩形集。例如,拉伸上一示例中的主矩形向右,如下所示:

        使电源线变长,水平增加更多的接触点,如下图所示: 

         将主举行向上拉伸,如下图所示:

        

        使得电源线更宽,垂直添加更多行的接触点,如下图所示: 


实例8、 创建多个填充有子矩形的主矩形

        对于一个多部分矩形,您可以创建行和列的主矩形,并用未命名的子矩形填充它们,如下图所示:

 类似的代码如下:

cvId = deGetCellView()

rodCreateRect(
    ?layer         "metal1"
    ?width    3.5
    ?length   3
    ?origin list( 0.75 0.75 )
    ?elementsX 3
    ?elementsY 2
    ?spaceX 0.75
    ?spaceY 0.75
    ?cvId cvId
    ?subRectArray
    list(
list(
     ?layer "metal2"
     ?width 1
     ?length 0.75
     ?lowerLeftOffsetX 0.5
     ?lowerLeftOffsetY 0.5
     ?upperRightOffsetX -0.5
                  ?upperRightOffsetY -0.5
     ?spaceX 0.5
     ?spaceY 0.5
);end first subrectangle list        
) ;end all subrectangle lists
) ;end rodCreateRect


实例9、 创建由其他对象构成的矩形

        当您使用 n_widthn_lengthl_origin 参数或 l_bBox 参数来指定一个命名矩形的坐标时,也可以选择使用 Rl_fromObj 参数来指定一个或多个命名对象,从而生成一个命名矩形。当您指定两个或更多命名对象作为创建矩形的来源时,可以参考下面的示例:

 

         

        系统根据对象周围的边界框创建矩形。新矩形的大小取决于所指定的尺寸是正数还是负数,从而决定其比边界框更大或更小。

注意:在生成新矩形之后,生成的矩形与其源对象之间不存在任何关系。

想要详细了解如何从其他对象创建矩形,请参阅“Creating a Rectangle from Another Object” 

关注我,后续会持续更新。

 

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值