ldpack工作日记-2016/5/4&5

时间:2021-06-01 04:11:53

这两天把所有case中导致crash的bug修复了,主要有以下bug:

1. 在global placement中,将所有cell分类成movable和fixed两类,其中fixed cell是从movable cell出发找出相连的fixed cell,而有case中出现一种连接情况是in->IBUF->OBUF->out,即两个fixed的BUF无法通过movable cell找到,于是在访问这两个BUF的坐标时会出错。

    解决方法:在实例化IOBUF的cluster前先判断这个IOBUF是否与至少一个movable cell相连,如果有就实例化,否则就不实例化。

2. 在pack的DRC中,在摆放FF时如果对应位置的LUT是空的话,该SLICE的BY(或BX)会被设为FF的D端的net,而再摆放一个RAM32X1S时,会判断BY(或BX)的net和RAM32X1S的A0端的net是否相同,不同则不能pack,而显然RAMD和FF是可以pack在一起的。

    解决方法:在放置RAM32X1S的时候判断FF的D端是否由该RAM32X1S驱动,如果是,则将BY(或BX)端的net清空。

3. 目前的flow不支持SRL chain,要实现SRL chain的支持比较麻烦,而出现SRL chain的case只有一个(quip_bt/15/oc_dct_slow),所以暂时不跑这个case。

4. 关于等价单元无法推开的问题,增加随机扰动:dist += dist / 1000 * (rand() % 100)。max density只能降到1.9,还需要继续debug。


待修复的问题:目前在LUT层的global placement中,IOBUF的坐标都固定在(0,0),对预布局有比较大的影响,应该放置在对布局有利的位置上。