纽扣虽小,搭配却至关重要——Pin Assignment

今天介绍一下Physical budget中Pin Assignment步骤。首先,关于pin的定义,器件的pin,一般指器件外部的引脚,与各种wire相连。而这里所讲的pin是指partition pin。一般来说,top层上的IO端口,我们称之为Port。而top下面,各个hierarchy module的端口,我们一般称之为Partition Pin。当这个partition被push down下去,成为block后,被单独load之后,这些pin又会变成IO pin。如下图所示:这些长条状的阴影小条就是pin了。从attribute editor中也可以看出他的type是partition pin.

纽扣虽小,搭配却至关重要——Pin Assignment

纽扣虽小,搭配却至关重要——Pin Assignment

别看这些pin小,但它在整个hierarchy flow中起着至关重要的作用。类似一件衣服上的纽扣一样,是各个block能顺利拼接合并的关键。那pin assignment的功能就是给纽扣排位置。位置排的不好,再好看的布料做出来的衣服都没人愿意穿。

我们知道,在chip中,定义好每个partition,并切割下去,每个block分别各自完成布局布线的操作,然后再在顶层top level中实现合并。你可能会奇怪,在block level中,我们看不到外面的情况,那拼接时,其中的net是如何顺利找到对应的顶层中的net?其实靠得就是这些小小的partition pin。它是physical上,guide各个block连接的关键。看下面的简单的示意图:

纽扣虽小,搭配却至关重要——Pin Assignment

上图中,绿色部分是各个partition。当做完pin assignment之后,在每个partition的各自边界上会长出不同layer的partition pin。有了这些pin,就定义好了每个block的input和output pin,图中蓝色部分。在block level中,我们不能改变pin的位置,否则就无法完成顶层收回的操作。

 

那pin的位置可以随便定义吗?答案显示然是不能的,合理的pin的位置,不仅能guide block的connection,而且会对时序的结果产生重要影响。看下面的对比示意图:

纽扣虽小,搭配却至关重要——Pin Assignment

上左图的两个pin的位置assign的相距较远,这样会在顶层得到一条走线很长的timing path,造成严重的detour,给工具绕线带来严重的阻碍。如果我们能把partition 1的pin assign的更加合理些,如上右图所示,这样两个partition之间的path走向会得到明显的改善。所以chip level的pin assignment很重要。很多时候,你在top level费了半天劲,始终修不好的path,其实可能原因就是pin的位置不合理。

讲到这,那我们怎么去做pin assignment呢?在Innovus中,其实只需要通过一个assignPtnPin命令就可以。这个命令可以自动帮你摆放好各个partition的pin。当然,通常你必须要手动的设置一些摆放的规则,因为默认的摆放规则一般都比较差。我们来看一下正常的一个pin assign的flow:

纽扣虽小,搭配却至关重要——Pin Assignment

第一步:在运行assignPtnPin之前,我们可以先设置一些pin constraint。主要包括Pin Group,Pin Guide,Pin Blockage,Spacing,Size,Layer等。下面我分别讲一下这一些constraint:

Pin Group:设置一个group,把需要的pin加在这个group中,assignPtnPin会尽量把这个group中的pin摆在一起。使用命令createPinGroup完成。

Pin Guide:通常和pin group一起使用,可以指定一个区域,guide这个pin group的放置位置。使用命令createPinGuide完成。图中白色部分就是pin guide

Pin Blockage:可以指定一个阻碍区域,assignPtnPin不会在这个区域摆放pin。使用命令createPinBlkg完成。图中红色部分就是pin blockage

Spacing,Size,Layer:可以指定pin之间的spacing,width,depth,Layer.采用命令setPinConstraint完成。

 

第二步:我们可以使用assignPtnPin去完成pin assignment了。可以看以下log:

<CMD> assignPtnPin
assignPtnPin_QOR_Start
Starting pin assignment...
The design is not routed. Using flight-line based methodfor pin assignment.
There are 155 ptnToPtn 2-pin nets in the design.
There are 155 aligned ptnToPtn 2-pin nets.
There are 5945 topToPtn 2-pin nets in the design.
There are 4012 unaligned topToPtn 2-pin nets.
There are 1933 non-neighbor topToPtn 2-pin nets.
There are 6100 total 2-pin nets in the design.
There are 4012 unaligned total 2-pin nets.
There are 1933 non-neighbor total 2-pin nets.
There are 155 aligned total 2-pin nets.
Completed pin assignment.
assignPtnPin : finished

 

第三步:摆放好pin以后,我们需要去检查下摆放的结果是否正确:

一般我们会通过以下两种方式检查pin assignment的结果。首先,我们可以使用checkPinAssignment检查pin assign的结果是否符合规则。它可以检查以下内容:

1. pin有没有遵循设置的pin constraint

2. pin有没有assign到route track上

3. master和clone partition的design上, pin的位置有没有一致。

我们可以看一下一个design的pin assign结果:

<CMD> checkPinAssignment
checkPinAssignment_QOR_Start
Checking pins of partition TC_4_B1 ... completed
Checking pins of partition TC_4_B2 ... completed
Checking pins of partition TC_4_B3 ... completed
Checking pins of partition TC_4_B4 ... completed
Checking pins of top cell TC_4 ... completed
 
===========================================================
                                               checkPinAssignmentSummary
===========================================================
Partition      | pads  |pins   | legal  | illegal | internal | internal illegal | FT    | FT illegal | constant | unplaced |
===========================================================
TC_4_B1   |     0 |   662 |    662 |       0 |       0 |                0 |     0 |          0 |       0 |        0 |
TC_4_B2   |     0 |   286 |    286 |       0 |       0 |                0 |     0 |          0 |       0 |        0 |
TC_4_B3   |     0 |  1248 |   1248 |       0 |       0 |                0 |     0 |          0 |       0 |        0 |
TC_4_B4   |     0 |   681 |    681 |       0 |       0 |                0 |     0 |          0 |       0 |        0 |
TC_4           |   668 |      0 |      0 |      0 |        0 |               0 |      0 |         0 |        0 |        0 |
===========================================================
TOTAL          |  668 |   8369 |   8369 |       0 |       0 |                0 |     0 |          0 |       0 |        0 |
===========================================================

对于pin assign的结果,我们当然希望越多的net能做到相互align。因为这样可以得到更好的route 结果。我们可以使用reportUnalignedNets来检查pin的align情况。这个会检测ptnToPtn,topToPtn,2-pin net的align情况。我们可以看以下log:

innovus 7> reportUnalignedNets
There are 155 ptnToPtn 2-pin nets in the design.
There are 155 aligned ptnToPtn 2-pin nets.
There are 3614 topToPtn 2-pin nets in the design.
There are 2835 unaligned topToPtn 2-pin nets.
There are 779 non-neighbor topToPtn 2-pin nets.
There are 2331 ignored topToPtn 2-pin nets.
There are 3769 total 2-pin nets in the design.
There are 2835 unaligned total 2-pin nets.
There are 779 non-neighbor total 2-pin nets.
There are 155 aligned total 2-pin nets.

第四步,Pin assign以后,我们可以先让工具快速地做一把trialRoute,记住是要在-honorPin的模式下,用trialRoute的结果可以检查实际full chip的congestion情况。

好啦,pin assign的介绍就这么多啦,还有具体一些命令的用法,大家可以去查阅doc. 

纽扣虽小,搭配却至关重要——Pin Assignment

往期回顾

简历请戳邮箱:taozhang326[email protected]163.com

觉得有用的话,给我点个好看吧纽扣虽小,搭配却至关重要——Pin Assignment

相关文章:

  • 2021-09-10
  • 2021-07-13
  • 2021-09-01
  • 2021-07-14
  • 2021-04-25
  • 2021-12-31
  • 2022-01-22
猜你喜欢
  • 2022-12-23
  • 2021-06-28
  • 2021-08-06
  • 2022-12-23
  • 2021-12-20
  • 2022-12-23
  • 2021-10-10
相关资源
相似解决方案