天下之物皆有其位。得位则曰正,曰顺;失位则曰偏,曰逆。使失者皆得其位,曰天下太平。
基于标准单元的数字IC设计(下文中简称为数字IC设计)中的 legalize 关心的就是 cell 是否被放置在正确的位置上。有时我们也称 Legalize 为 Detail Placement
在数字IC设计中,标准单元(cell)的高度通常是相等的,宽度则是某一宽度的整数倍。用数学来表示就是
我们将宽度为 Wunit, 高度为 Hunit 的矩形称之为 Site。这样我们也可以说 标准单元(cell)的大小是Site大小的整数倍。
一个设计(Design)中有成千上万的标准单元(cell),如何将这么多的Cell简单高效的排布在一起,就成了一个重要问题。
想象一下一个大型停车场,如果没有任何规划,任由每辆车随意停放,那一定会出现很多麻烦。于是我们在现实生活中看到的是空地被划分成很多停车位,这些停车位连成一排一排的。每辆车必须要停在停车位内。
在数字IC设计中采用的也是类似的办法,我们把Site连成一排一排的,要求每个 Cell 必须放在Site内。这就像把车停在停车位内一样。
当然了,你可能已经想到了,一个Cell可能需要占据连续的好几个Site。是的,我们就把它当作一辆加宽的汽车吧(别跟我较真说现实中没有这么宽的车)。
这里所讲的其实就是判断“得位”与否的第一条原则:Cell 必须被放在Site内(车辆必须停放在车位内)。
我们这里说得停车也好,Cell的放置也好,其实都可以看作是一个二维平面上的几何问题。想象一个二维平面上的确定大小的几何图形,除了位置,还有那些其他因素呢。“方向”算是一个,“对称”或者说“镜像”应该也算一个。
停车可以这样要求,放置Cell 也可以这样要求。而且考虑到“镜像”其实也可以算作一种方向,我们可以归纳为第二条原则:Cell 的方向必须符合要求(车辆在停车位内的方向必须符合要求,否则罚款)
不就是停个车吗,还这么多规矩。别急,还没完呢。这两天领导来视察,那几个离你最近的车位被征用了,旁人不得使用。做人不容易,做一个Cell也不容易的。
在数字IC设计中,我们是通过 Blockage 圈定一些区域是不可以用来放置Cell的,这就形成了第三条原则:Cell 不能放在Blockage下面。
那么,能不能把两辆车放在同一个车位内呢?这不是废话吗(你心想)。对,是废话,但在严谨的表述中,这就不能当作废话一样不列出来了。第四条原则:两个Cell不可以重叠(Overlap)。
可以说上面的四条就构成了判断是否“得位”(legality) 的基本原则:
在 Synopsys的 IC Compiler中,命令check_legality
基本上就是根据上面的原则进行检查的。
所谓“规矩在,方圆成”。直到了如何是正确的,自然也就知道如何把不正确的编程正确的。数字IC设计中,legalize 就是指把 cell 放置到正确的位置上的过程。
IC Compiler中,命令legalize_placement
就是用来做这件事情的。
大千世界,变化万千。这世上之物要都是一个模子刻出来那样一致,这世界倒是简单了。你看这天下之物,大体上无不是共性之中透着特质,常规之外存有特例。
上面说了加宽的车,大家可能没见过,这加长的应该就不稀奇了。Cell 也是一样,有的时候,有些Cell偏偏就是要比那些普通Cell高出一倍甚至两倍。既然存在例外,处理方法就要考虑到。我们称这种Cell高度是 Site 高度一倍以上的情况为“Multi-Height”。
Cell可以不一样,Site可以不一样(终生平等嘛)。一个Design中也可以有多余一种 Site,这称为 “Multi-Site”。
但无论怎样,只要记得让各个Cell“得其位”就好。这样你也可以去做 legalize 的活了—— 用你的双手把Cell们正确地放到他们对应的Site上去。