uniquify顾名思义,是为了保证mudule定义的唯一性,首先我们一起来回顾一下,DC针对的八个对象的定义。
DC将设计对象分为8类。
1、design:具有某种或多种逻辑功能的电路描述。即module定义。
2、cell:设计(design)的instance。
3、reference:cell或instance在库中定义的名字。design的instance,也看作是reference。
4、port:block级design的输入、输出。
5、pin:block级design中cell(小的design的instance,以及网表中例化的基本单元库cell、IP.都可统称为cell)的输入、输出。
6、net:ports与pins之间或pins与pins之间的信号。
7、clock:被定义时钟源的pin或port。
8、library:cell的集合。如target_library link_library。
这里最容易迷惑的是reference的定义和判断。可以在综合后dc_shell验证这些对象的定义。
现在回到正题,在某个block综合中,不会有uniquify的问题,因为即使在rtl代码中,某个小的module被例化多次。综合compile时,每个例化的module都会有一个新的定义。这种是采用自顶向下综合策略,当把所有的设计都读入时,进行编译时,DC会做uniquify的处理。那么自底向上综合时会不会出现uniquify的问题,如果各block的name是不同的,也不会出现此问题。那么在什么情况下才会出现uniquify的问题呢。
1、项目组有多个团队,block划分时没有沟通好,导致block的name定义一致,且block内也都调用了某一个module,这样在不同的block内,就会有相同的module的定义。此类问题,属于项目管理问题,一般情况下不会发生。
2、第二种情况是自研逻辑和第三方IP中module定义相同。这种也属于小概率事件。
综上:可以看出DC的uniquify feature只是不得已的情况下一种应对策略。类似保底的修复手段。在项目管理中,代码规范时,就可以避免uniquify的问题,也是项目管理的最基本的要求。故而,uniquify问题是一个棘手但完全可以避免甚至可以忽略的问题,另:link各block的网表时也可以添加uniquify命令,解决全局网表中uniquify问题,如果不设置,网表中有这样的uniquify问题会报Error。
un-uniquify复用
DC中为什么要用Uniquify?
http://bbs.eetop.cn/viewthread.php?tid=355803&extra
为了在layout中进行时钟树的综合,网表在DC中必须被uniquified.所谓uniquified 就是在设计中使子模块的实例和子模块的定义一一对应,消除一个模块的定义被多次引用的现象。因为大部分layout工具以一种flat的方式完成设计的物理实现。对于多次引用同一定义的各个实例的物理模块的位置是不同的,而这些模块内部的flop都需要各自的时钟,从而时钟树上这些模块的clock_net名是不同的。如果Non_ uniquified 网表,来自layout 工具的时钟树的信息和DC中原网表无法对应,因为被多次实例化模块在网表中只有一个定义,所以会出现两个不同的net和一个相同的port连结,这是不允许的。 Uniquify 的方法如下:
dc_shell>remove_attribute find(-hierarchy design,”*”)dont_touch
dc_shell>Uniquify
DC 会认为存储区中的模块都只是被引用一次的,如果各个模块的引用的工作环境各不相同,则使用这种方法可以使得模块的各个引用可以针对他们不同的环境分别进行优化,达到最好的效果。uniquify 命令会将多次引用的模块的个数拷贝需要的数目,然后对他们分别命名而得到不同的模块名。使用的命令如下:
dc_shell-t>current_design TOP
dc_shell-t>uniquify
dc_shell-t>compile
整合转载