Design Compiler:逻辑库名与逻辑库文件名及其指定方式
相关阅读
Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm=1001.2014.3001.5482
逻辑库的定义
逻辑库由半导体供应商维护和分发,包含每个单元的特性和功能信息,例如单元名称、引脚名称、面积、时序弧和引脚负载。它们还定义了设计规则约束(如线网的最大转换时间)等条件。此外,逻辑库还指定特定工艺技术的工作条件和线负载模型(只用于线负载模式)。
Design Compiler支持使用非线性延迟模型(NLDM)和复合电流源模型(CCS),或同时使用两者。Design Compiler会根据逻辑库的内容自动选择使用的时序模型。如果库同时包含NLDM和CCS模型,Design Compiler会使用CCS模型。在逻辑综合和预布线优化期间,工具可能不会使用所有的CCS数据以节省运行时间。
Design Compiler需要逻辑库是.db格式。通常情况下,半导体供应商会提供.db格式的逻辑库。如果只有逻辑库的源代码(例如.lib格式),则需要首先使用Library Compiler(以前集成在Design Compiler中,后脱离变成单独的工具)将其编译为.db格式。
逻辑库的读取
逻辑库可以使用两种方式读取,第一种方式是自动读取,第二种是显式读取,下面将分别介绍这两种方式。
自动读取
使用target_library和link_library变量可以指定目标库和链接库,该变量中可以包含逻辑库文件名的绝对路径、相对路径或简单路径(相对search_path变量的路径),如下所示,这些逻辑库会在必要时(如显式/隐式链接、综合)自动读取。
dc_shell> set_app_var link_library /home/zhangchen/topo/slow.db // 使用绝对路径
dc_shell> set_app_var link_library ./slow.db // 使用相对路径dc_shell> set search_path /home/zhangchen
dc_shell> set_app_var link_library topo/slow.db // 使用简单路径
Design Compiler会记录被读取的逻辑库名及其所属的逻辑库文件名的绝对路径,如下所示。
dc_shell> list_libs
Logical Libraries:
-------------------------------------------------------------------------
Library File Path
------- ---- ----gtech gtech.db /opt/Synopsys/syn/W-2024.09-SP2/libraries/synstandard.sldb standard.sldb /opt/Synopsys/syn/W-2024.09-SP2/libraries/synslow slow.db /home/zhangchen/topo
记录逻辑库文件名的绝对路径可以避免自动读取时出现覆盖,如果发现逻辑库文件之前已读取则不会重复读取,即使逻辑库文件的内容更改,或target_library和link_library变量修改了(例如用绝对路径和相对路径描述同一个逻辑库文件)。
尽管逻辑库文件名和逻辑库名一般相同,但这不是强制性的,如下所示。
dc_shell> list_libs
Logical Libraries:
-------------------------------------------------------------------------
Library File Path
------- ---- ----gtech gtech.db /opt/Synopsys/syn/W-2024.09-SP2/libraries/synstandard.sldb standard.sldb /opt/Synopsys/syn/W-2024.09-SP2/libraries/synslow1 slow.db /home/zhangchen/topo
显式读取
使用read_db命令可以显式读取逻辑库,直接指定绝对路径、相对路径或简单路径(相对search_path变量的路径)形式的逻辑库文件名即可,如下所示。
dc_shell> read_db ./slow.db
Design Compiler会记录被读取的逻辑库名及其所属的逻辑库文件名的绝对路径,如果强行重复读取则会出现覆盖,Design Compiler需要保证内存中的逻辑库文件名的绝对路径唯一,即使它们中的逻辑库名不同。
逻辑库的指定
逻辑库可以使用两种方式指定,第一种方式是间接指定(即通过逻辑库文件名间接指定逻辑库),第二种是直接指定(即指定逻辑库名),下面将分别介绍这两种方式。
间接指定
最常见的间接指定的方式就是用target_library和link_library变量指定目标库和链接库,目标库会在综合时使用,而链接库则会在显式/隐式链接、默认约束选择(例如默认线负载模型和默认工作环境等)或某些命令不添加库选项时使用(例如set_wire_load_model命令和set_operating_condition命令)。
直接指定
最常见的直接指定的方式是使用某些命令时添加库选项指定逻辑库名(例如set_wire_load_model命令和set_operating_condition命令),如下所示。
dc_shell> set_wire_load_model -name wl20 -library slow
有些情况下,仅仅指定逻辑库名不足以唯一确定逻辑库,这时就要求使用其所属的逻辑库文件名的基本名(注意这与简单路径不同)作为前缀,如果还是不能唯一确定(即基本名相同),则需使用其所属的逻辑库文件名的绝对路径或相对路径作为前缀,如下所示。
dc_shell> set_wire_load_model -name wl20 -library slow // 不使用前缀
Error: 'slow' doesn't specify a unique libraryPlease use complete specification: full_file_name:library_name (UID-15)dc_shell> set_wire_load_model -name wl20 -library slow.db:slow // 使用基本名前缀
Error: 'slow.db:slow' doesn't specify a unique libraryPlease use complete specification: full_file_name:library_name (UID-15)dc_shell> set_wire_load_model -name wl20 -library /home/zhangchen/topo/slow.db:slow // 使用绝对路径前缀
dc_shell> set_wire_load_model -name wl20 -library ./slow.db:slow // 使用相对路径前缀
逻辑库的保存
如果将设计保存为ASCII格式的网表,则逻辑库信息会丢失,这依赖用户在之后进行额外设置;如果将设计保存为二进制格式(例如ddc)的网表,其中会包含所有SDC约束,某些SDC约束需要使用逻辑库信息(例如set_wire_load_model命令和set_operating_condition命令),因此其中还会包含逻辑库名(并以基本名作为前缀)。
当用户之后再次读取保存为二进制格式的网表时,会基于search_path变量和基本名自动读取逻辑库并恢复SDC约束。
写在最后
需要注意的是,逻辑库的读取和指定是两个不同的步骤,因此可以混合使用,但自动读取的使用情况较多,如下所示。
// 自动读取、直接指定
dc_shell> set_app_var link_library ./slow.db
dc_shell> set_wire_load_model -name wl20 -library slow // 该命令会导致自动读取
// 自动读取、间接指定
dc_shell> set_app_var target_library ./slow.db
dc_shell> compile_ultra // 该命令会导致自动读取
// 显式读取、间接指定
dc_shell> read_db ./slow.db
dc_shell> set_app_var target_library ./slow.db
dc_shell> compile_ultra // 自动读取不会进行,因为已读取
// 显式读取、直接指定
dc_shell> read_db ./slow.db
dc_shell> set_wire_load_model -name wl20 -library slow