后端在floorplan阶段,如何摆放macro是一个很重要的问题。如果采用层次化设计,对于每一个block来说都需要在block内部把所分配的macro摆好。
如果某一个block里的macro很多,又很大,std cell再多一些,utilization就会很大,相应的这个block的floorplan就比较难做,而其他block的utilization很小,这样的design就不太好。
我们总是希望所有的block都能有差不多的utilization,平均且充分地利用芯片的每一块面积,这就需要在block划分初期就做好预估。
这个问题需要前端与后端协调配合,block的划分是需要前端提供带有hierarchical结构的netlist,然而前端在做hierarchical的综合的时候,并不会过多考虑后端物理层面的信息,因此可能综合出的netlist各个block物理上不是那么均衡。
当然,这种netlist也是可以物理实现的,只是对于有些要求比较高的design来说,最后出来的芯片性能可能会有所不足。
这个时候后端工程师就可以反馈,比如说,把某个block的某个macro综合到另一个block里去,或者两个block就直接merge变为综合成一个block。收到反馈以后,前端工程师就可以重新综合,再给我们新的netlist来做物理实现。
以上这个过程可能需要迭代几次才能达到最佳效果,但这样会需要花费很多时间,导致芯片设计周期变长。一种更快速的方案是,前端首先综合出flatten的netlist,就是不带任何hierarchical信息的,出这种netlist的速度应该相对快一点。
后端拿到flatten的netlist之后,就知道了macro以及有关的std cell的面积了,这样后端就可以直接通过这些物理信息和逻辑信息来划分block,再把分配好的结果给前端,前端就可以参考这样的分配来做hierarchical层级。
不管是flatten的综合还是hierarchical的综合,出来的cell的count或area是差不多的,因此后端在拿到hierarchical的netlist之后,做出来的block物理情况应该也与之前用flatten netlist的预估差不多。
有一个可能疑惑的地方是,这里前端给的netlist永远是总的芯片的所有的netlist,不管是flatten还是带hierarchical结构的netlist都是一个file。
我们后端也会做netlist的划分,不过是根据前端给的那份netlist切割成好多个netlist给不同的block来用,相当于把一个文件变成多个文件,每个block拿一个,分割的依据是总的netlist的hierarchical结构。
有的时候资本家觉得上面的方法还是慢,并且还想追求比较好的芯片性能,就有人想出了更为讨巧的办法。这个方法牺牲了一定的准确度,但大大提高了速度。
就是说前端在综合之前就把ip和所用macro的信息提供给后端,而后专门有工程师来利用大数据机器学习的方法预估出每个ip相关的std cell的area和count。
没错,机器学习也应用到芯片领域了,一个ip在之前的芯片中用的越多,样本量就越大,学习的效果就越好。
后端就可以根据这一份预估的结果来进行block划分,然后把划分结果反馈给前端,前端就可以直接按这个方案综合,综合次数最少仅需一次!芯片设计周期大大缩短,但相应的划分的准确度也较难保证。
-
芯片设计
+关注
关注
15文章
1013浏览量
54867 -
STD
+关注
关注
0文章
36浏览量
14356 -
机器学习
+关注
关注
66文章
8401浏览量
132536
发布评论请先 登录
相关推荐
评论