saber酱的抱枕

生于忧患,死于安乐

04/4
13:20
学习

新手的High Fan-out陷阱

High Fan-out(高扇出)是什么其实大家应该清楚,总之就是1个cell带太多……

对,现代综合器一般都能自动插buff,为啥前端(指数字前端233)要这么关心?

首先说个新手须知,综合器的优化能力是有限的,假如某个关键路径花了很多力气也优化不好,就会进入破罐破摔模式胡来了,到处都是timing violation。

这和High Fan-out的关系其实也很清楚……
插入Buff越多timing越危险,优化越难。如果出现严重的High Fan-out,很可能那一块就会有timing问题。
因此如果不注意,就会导致整个design sta fail,而你却搞不明白为什么——明明路径都很短。然后误以为是别处fail了。
所以说是新手的陷阱。

新手陷阱的另一个原因是这个:
你写了一个类似fifo的玩意。

buff_cnt(reg out)
位宽省略,下同
buff_1[99:0](reg out)
buff_2[99:0](reg out)
buff_3[99:0](reg out)
buff_4[99:0](reg out)

assign out_1 = buff_1[buff_cnt];
assign out_2 = buff_2[buff_cnt];
assign out_3 = buff_3[buff_cnt];
assign out_4 = buff_4[buff_cnt];
接下来做运算,省略

新手第一眼看上去,这没啥呀,都是dff out, timing很好。
然而经验丰富的前辈会向你指出一个问题:你数数这个buff_cnt带了多少个东西。

High Fan-out

然后在sta中你就会看到各种buff/INV对占用了许多时间,最后timing violation。

这种不经意间的High Fan-out恐怕是个新人杀手吧233

等下,这么大的buff不该用sram吗!sram自带解决这个问题。
没错。这也是bad design带来的问题。
当然了就算buff没那么大的时候这个问题仍然可能存在,需要(新手)DIC关注。

新手的High Fan-out陷阱