SDC命令详解:使用uniquify命令进行唯一化

相关阅读

SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm=1001.2014.3001.5482


唯一化简介

在了解uniquify命令前,首先需要知道唯一化的定义:唯一化指的是在综合过程中Design Compiler会自动检测当前设计层次结构中对同一设计(或者说模块)的多次引用(例化),并为每个实例生成一个独立的设计副本。

该过程首先复制(已设置的约束也会进行复制和调整)并重命名被多次引用的设计(不包括有dont_touch属性的实例和设计),命名规则由uniquify_naming_style变量(默认为%s_%d,其中%s指的是原设计名,%d是一个确保名称唯一所需的最小整数)控制。原始设计将不再可访问,原始设计或其中对象的将从包含它们的集合中删除。复制后Design Compiler可以针对每个唯一副本基于其所在环境进行单独优化,如图1所示。

图1 唯一化的结果

uniquify命令

除了使用综合类命令(如compile和compile_ultra命令)外,用户可以使用uniquify命令显式进行唯一化(其实它并不是一个SDC命令,归为此类只是为了方便管理)。

本文针对Design Compiler,但该命令同样存在于IC Compiler等工具中,它们大致相同,略有差别。uniquify命令的BNF范式(有关BNF范式,可以参考以往文章)为:

复制代码
uniquify
    [-base_name base_name]
    [-force | -cell cell_list [-new_name new_design_name]| -reference design_name]
    [-dont_skip_empty_designs]
    //注:该命令的选项和参数顺序任意

指定基名字

-base_name选项用于指定一个基名字,以取代uniquify_naming_style变量中%s代表的原设计名。

强制唯一化

-force选项用于指定即使实例已唯一或带有dont_touch属性,也强制重命名(顶层设计不受影响)。

-force选项、-cell选项和-reference选项是互斥的,只能使用其中一个。

指定单元列表

-cell选项指定一个列表/集合,包含层次单元对象,为其中每个层次单元进行唯一化(即使实例已唯一或带有dont_touch属性)。对于列表而言,如果有多于一个对象,需要使用引号或大括号包围(对使用集合无效),关于列表和集合的区别,可以参考下面的博客。

SDC命令详解:使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571 需要注意的是,如果层次单元对象的父实例尚未唯一化,则也会进行唯一化。如果使用了-cell选项,则原始设计在复制后不会删除。

-force选项、-cell选项和-reference选项是互斥的,只能使用其中一个。

指定单元名字

只有当使用了-cell选项且只指定了一个层次单元才能使用该选项,指定一个设计名作为该单元唯一化后的名字(若该设计名已被使用,则该选项失效)。

指定设计名

-reference选项用于指定一个设计名,为当前设计中引用此设计的实例进行唯一化(即使设计已唯一或带有dont_touch属性)。

如果使用了-reference选项,则原始设计在复制后不会删除。

-force选项、-cell选项和-reference选项是互斥的,只能使用其中一个。

指定不跳过空设计

-dont_skip_empty_designs选项指定即使是黑盒设计也会进行唯一化;默认情况下黑盒设计保持不变。

简单使用

以图2所示的层次结构为例。

图2 层次结构

综合时的唯一化

首先使用list_designs命令查看内存中的所有设计。

复制代码
dc_shell> list_designs
leaf_module    middle_module    top_module (*)

随后使用compile命令(如果使用compile_ultra命令需要添加-no_autoungroup选项防止自动解组)进行综合并再次使用list_designs命令查看内存中的所有设计,可以发现此时进行了唯一化。

复制代码
dc_shell> compile
dc_shell> list_designs
leaf_module_0    leaf_module_1    middle_module_0    middle_module_1    top_module (*)
用户显式进行唯一化

首先使用list_designs命令查看内存中的所有设计。

复制代码
dc_shell> list_designs
leaf_module    middle_module    top_module (*)

随后使用uniquify命令进行唯一化并再次使用list_designs命令查看内存中的所有设计,可以发现此时进行了唯一化。

复制代码
dc_shell> uniquify
dc_shell> list_designs
leaf_module_0    leaf_module_1    middle_module_0    middle_module_1    top_module (*)
相关推荐
日晨难再6 天前
SDC命令详解:使用set_min_capacitance命令进行约束
数字ic·sdc命令
日晨难再1 个月前
Spyglass:在batch/shell模式下运行目标的顶层是什么?
硬件工程·数字ic
日晨难再2 个月前
Formality:Bug记录
硬件工程·数字ic
日晨难再2 个月前
Design Compiler:库特征分析(ALIB)
硬件工程·数字ic
移知3 个月前
数字IC/FPGA校招笔试题解析(一)
fpga开发·fpga·数字ic
日晨难再3 个月前
静态时序分析:SDC约束命令set_ideal_network详解
硬件工程·数字ic
日晨难再4 个月前
Formality:探针(Probe Point)的设置与使用
硬件工程·数字ic
日晨难再5 个月前
Formality:时序变换(二)(不可读寄存器移除)
硬件工程·数字ic
移知5 个月前
备战春招—数字IC、FPGA笔试题(2)
fpga开发·数字ic