一、什么是“设计的多实例引用”
在层次化的设计中,我们会将一个设计例化多份,这些例化的instances就是设计的多实例引用。
比如在下图中,设计C被引用了两次(U2/U3和U2/U4)。
使用check_design -multiple_designs命令可以打印出设计中的多实例引用。
二、为什么要解决多实例引用
对于设计的实例而言,最终是要映射到物理单元上去的,因此它们工作环境可能是不相同的。如果我们只提供原始蓝图,显然是不够的。我们还需要为每个实例建立它们自己的数据库,存储属于它们自己的特有的信息。因此,DC在综合前,就必须要解决多实例引用的问题。
三、DC怎么解决多实例引用
1、uniquify命令
- uniquify命令会将原始设计拷贝并重新命名。命名完成后,DC会将原始设计从内存中删除。因此,uniquify之后无法访问原始设计。
- 在执行compile命令时,DC会自动地去调用uniquify。并基于当前的current_design的层次进行uniquify(dont_touch的优先级高于uniquify)。
-
设计人员可以通过uniquify的-reference或-cell选项来主动生成unique copies。当然,此时会忽略dont_touch属性。
- DC使用uniquify_naming_style变量(string类型)存储命名规则,默认的命名约定为%s_%d:
%s:subdesign的原始名字,或使用-base_name选项指定的名字。
%d:从小往大的计数值(0,1,2...)。
example:
prompt> current_design top
prompt> compile_ultra
- 工具在compile时会自动调用uniquify,当然我们也可以手动执行uniquify。但是由于工具调用uniquify这一步骤是无法被关闭的。所以相当于uniquify被执行了两次,因此会导致工具运行更长的时间。所以手动uniquify意义不大。
2、Compile-Once-Don't-Touch方法
如果多个引用的工作环境基本相同。那么我们可以先将其中一个实例进行编译,在顶层编译时重复例化即可。
具体的步骤人如下:
- 挑选出多个引用中环境最差的那个作为代表;
- 编译它;
- 将所有引用设置set_dont_touch属性;
- 编译顶层设计。
example:
prompt> current_design top
prompt> characterize U2/U3
prompt> current_design C
prompt> compile_ultra
prompt> current_design top
prompt> set_dont_touch {U2/U3 U2/U4}
prompt> compile_ultra
- 这种方式主要的缺点在于需要所有引用(instances)的环境基本相同;且设置set_dont_touch属性后不能ungroup。
3、ungroup命令
ungroup命令和uniquify命令比较类似,只不过更加暴力。它将设计的层次化结构全部去掉,输出一个flattened netlist。
example:
prompt> current_design B
prompt> ungroup {U3 U4}
prompt> current_design top
prompt> compile_ultra
- ungroup命令消耗更多的内存和更多的时间。
- 提供了最好的综合结果。
-
显然,坏处就是破化了设计的层次化结构。
PS1.折腾大半天终于把innovus18安装好了,相对S家的软件安装,C家算是比较友好了。