当前位置:首页 > > 艾思后端实现


这个原理其实也简单,就是将之前full-chip的工作,分解到各个partition,大家来并行设计,最终顶层设计人员会把所有的partition的结果,封装到一起。从而产生最终的full-chip数据库。这样做的好处显而易见:每个partition的设计都是并行,省时省力。只是需要跟更多的PR工程师(一个典型的串 -> 并转化,通过加入人力来加速项目设计)。每个模块的内部时序,物理问题都在模块级别搞定。只有interface留到了顶层。模块内部的问题迭代周期短,并且效率高,最终的项目的收敛都会相对容易。一步一个脚印,一起携手走向最终的TO。

对于后端的顶层设计人员,根据full-chip的规划,会下发所有partition的物理约束信息,这里边包括:

· Die/boundary:    模块的边框信息。

· Terminal:        模块的pin放置信息

· PG:              电源地网络的需求信息

· Hardmacro:       特殊macro的在partition的放置信息

具体参看下面的示例图,来一起直观的体会partition 设计带来的的变化

如果采用了partiton流程,就是下面这个情况了:

有了上边的概念,这里就要有请这篇文章的主角登场:Design Planning(DP)。这个就是帮助顶层人员,合理规划partition的物理信息,甚至timing budget的强大武器了。

在ICC2里边,DP是一套流程,可以使用icc2内建的命令来高效完成,下面就以此来体会DP带给大家的给成强大的功能了吧。

通常的hierarchy 设计流程,无论是从RTL,synthesis还是layout,都是遵循bottom-up的设计方式的,一个简明的流程如下图所示:

可以看出,要想开始顶层DP,就必须要有底层的综合数据库,从而产生顶层的综合数据库,DP就可以基于这个顶层的综合结果,来开始DP工作了。

Icc2给出了一个非常完备的DP解决方案,如下图

在顶层做DP的时候,主要的目的是给sub-partition提供boundary,terminal和PG等等,大部分时候,是不需要把这个复杂流程全部走完,这里,艾斯秀给大家的是一个体现DP核心功力的实用流程,如下示意图:

1. 第一步:建立icc2物理库

打开icc2,创建NDM,这个是常规操作,为了创建整个DP流程需要的物理库来使用。

2. 第二步:读入网表

读入top-level的netlist。这个阶段的网表有两个特点。第一:网表需要包含sub-partition的声明。第二:由于只关注于创建partition的boundary和terminal,sub-partition的网标完全可以是一个sub 的top-only,来加快DP的速度。一个示例如下:

3. 第三步:UPF的准备

在做DP的时候,需要充分考虑到PG和VA的影响,因为这个很有可能会影响到partition的PG mesh和floorplan。通常的情况下,可以使用一个top-level的UPF来满足这个要求。但是要注意的是,这个UPF文件,必须包含top-level的VA信息和声明top-level和partition之间的PG连接关系,这是规划具体floorplan和PG push-down的必要条件。

4. 第四步:top-level的initialfloorplan

要开始DP的工作,还是要先定义好top-level的基础floorplan,例如:boundary,hardmacro , terminal,VA等等,有了这个初始的布局,就可以逐步规划partition的布局信息了。

5. 第五步:partition commit:

为了让DP可以意识到,哪些instance是可以被操作的,这是一个非常必要的手段。在这个步骤结束后,就可以对partition进行真是的物理操作了,这里完成的重要标志,如下图所示

6. 第六步:partition 的boundary规划

从这个步骤开始,就是真是的partition的操作了,首先,根据sub-partition的真实synthesis面积和内部hard-macro的需求(高低、宽窄、数量等等信息),来规划partition的大小和形状。

第一要素:面积大小要给够。

根据不同工艺和项目目标值,一般整体的std-cell区域的利用率不要过高,要给后期的power-switch,tap-cell,optimization的器件留够空间。当然,对于特殊形状的hardmacro也要预先布置好。

第二要素:形状要可用

尽量做到拐角不浪费,高宽比例不失调。少边角,多正方区域,给partition的layout留够足够的物理空间。还有数以边沿区域,集中放置partition的terminal。

以上两点,处理得越好,返工迭代越少,top-level的push-down才可以进展的顺利不磕绊。

至此,floorplan的partition的boundary创建完成,如下图所示

7. 第七步:PG网络的创建和pushdown

如前面所说,PG net已经创建成功了,这里,需要根据工艺和项目PG的需求,在顶层开始创建真实的PG网络了。通常来讲,最高两层会成为PG主要mesh的横、这两个布线的板层。每一版层都是使用固定步进来实现电源地的PG-mesh创建。

Top-level创建完成后,整个core区域,默认都会被铺满,当然,在那些创建partition的区域,也会铺满了PGmesh,如图所示(这些密密麻麻的就是PG-mesh):

这个时候,需要做的事情就是将这个top-level的PG-mesh打到partition里边(push-down),最终所有的partition都以这样的PG网络来规划mesh,拼接到一起的时候,就会完美融合,这就是PG mesh的push-down的主要目的。Push-down后的结果:

可以看到,push-down后,只有top-only的PG-mesh可以被顶层看到,穿过partiton的PGmesh,就以及被打到partition里边了

8. 第八步:partition的terminal规划和创建

这一步骤,在partition的boundary,origin,以及PG-mesh的信息存在下,就可已创建partition的terminal信息了。

通过探索netlist,通常都会得到partition之间的穿线、直接互联关系,同时,由于顶层的macro,VA的布局也已经完备,所有的terminal的创建,都要考虑到它们之间相互关系,从而将对应的terminal朝着它们的倾向性连接的方向放置。这个小细节,可以充分的提高interface timing的在物理位置、距离上的优化。

此外,尽量把terminal都规划到一个区域,从而间接的知道partition的placement可以把相关的逻辑放置的足够近而不会产生乒乓放置的潜在隐患。如图所示,如下就是partitionterminal 创建完成的结果:

9. 第九步:partition的abutterminal的处理

实际的项目网标中,总会碰到一些partition之间的连接是直通的,例如:

Partition_A.data_o[63:0] ->   Partition_B.data_i[63:0]

如果恰巧Partiton_A和Partiton_B在floorplan里边,有一条abut在一起的一条边,这就给了一次terminalabut的机会,top layouter可以根据实际情况,选择把这些terminalabut(贴合)在一起,从而让这些直连的穿线在物理上拿到理论上的最短距离

10.第十步:partition的terminal的检查

Icc2提供了一个非常好用的命令,来检查terminal的状态;有没有port没有创建terminal,有哪些port的terminal的spacing违背了layer或者spacing的约束。通过这个都能价差出来,强烈建议在release之前,使用这个命令来检查partition terminal的QoR。正常的情况下,会得到如下的信息:

11.第十一步:partition的物理信息的导出

在上边十步的处理完成后,就可以把下面罗列的partition物理信息逐一导出了。

· Boundary

· Terminal

· PGnet

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭