既然是学习数字后端,那么Row的概念相信肯定不会陌生,Row是表征Floorplan横向排列的一个重要网格,我们可以把它理解为“排”。它对std cell的摆放起着限制约束作用。Row是placement的基础,因为凡是需要摆放std cell的地方,就必须先创建Row。那我们就来直观的感受一下Row:
如上图所示,Row是由Site组成的。而Site定义的是最小的布局单元
我们在lef中随意找一个Site,去看它的内容:
我们对第一个Site为例进行解析
SITE CoreSite CoreSite就是此site的名字
CLASS CORE site的类别
SIZE 0.2 BY 1.71 site的宽度,高度
END Coresite 结束符
一般来说,SITE的类别通常分为core和pad,正如我们截取的部分,它们分别对应着std cell的row和io cell的row。但此处截取的部分似乎没有对SITE方向的定义,实际上SITE的方向有X,YR90三个参数。X代表可以沿X轴翻转,Y代表可以沿Y轴翻转,R90代表可以任意翻转。SIZE则是定义site的宽度,BY则是高度,因为site定义的是最小的布局单元,所以std cell都是site的整数倍高度,宽度。现在对SITE应该有一个浅层次的了解了。下面回归正题-----ROW
Row也是有自己的方向,如下图所示:
(1)Floorplan --Row--create core row
(2)create core row(当然也可以create io row,这里以create core row为例)
思考:为什么row有两种类型,IO row Core row?
提示:理解上文:“SITE的类别通常分为core和pad,正如我们截取的部分,它们分别对应着std cell的row和io cell的row。”
Site Name,是不是就是我们定义的site,点开看看:
这里有两种site,所以我们的row可以有两种选择,根据实际情况分析到底选择用哪一个site。
然后我们看Bottom Row Orient:
我们可以选择Bottom的Row的方向
double bacl rows:
相邻两个Row之间怎样摆放,
原图:(其实这里应该先clear Row,待改善。。。。。)
我们先选择第一个看看效果:
然后选择第二个:
通过上面的图理解这句话“相邻的row会相互about并且flip,这样相邻的site可以公用一根电源线,节省Power资源”。所有的std cell都必须snap到row上面,这是基本的place规则。而默认情况下std cell的摆放方向遵从Row的方向(没想到把,Row也有方向),即方向箭头一致,但根据cell本身的symmetry,std cell的摆放位置也可以有如下的选择:
这是最常见的Row,实际的design当中,还存在一些其他种类的Row,例如double height,trible height的Row,用来摆放两倍高,三倍高的cell。
一下子说了好几个内容:site,row,std cell。可能分开说都懂,但是聚在一起它们有什么关系呢?我们上面提到过:“Row是由Site组成的。而Site定义的是最小的布局单元,std cell都是site的整数倍高度,宽度。所有的std cell都必须snap到row上面”
好好理解一下上面的话,从空间的维度去想象它们之间的关系。
黄色框内的就是coresite,红色框一直延申过去就是Row
还有一点值得我们注意:虽然一般情况下,只允许我们创建整数倍高的Row,如上面的double height,trible height的Row。但在Voltage island中,我们允许创建非整数倍高的Row,如默认电压区域用9T单元,而在Voltage island中使用了12T,不是整数倍,那么这时候就需要创建非整数倍高的Row,如图: