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

Tao涛 数字后端IC芯片设计 今天

处处吻 杨千嬅 - 电光幻影

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


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



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

 

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



上左图的两个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:



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


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

【数字后端基本概念介绍<Pin Group>】


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

【数字后端基本概念介绍<Pin Guide>】


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

【数字后端基本概念介绍——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. 




往期回顾


静态时序分析STA合集一

静态时序分析STA合集二

时序基本概念介绍<sdc合集>

数字后端基本概念合集(一)

数字后端基本概念合集(二)

数字后端基本概念合集(三)

Low Power概念介绍合集

数字后端dbGet使用方法合集

号外,数字后端交流群招人啦

IC圈的世界杯 | 论芯片设计的胜利十一人

知否?知否?Block PD应该提交哪些数据?

Timing ECO手修攻略

数字后端面试100问(2019全新版)


简历请戳邮箱:taozhang3260@163.com

觉得有用的话,给我点个好看吧

    已同步到看一看