
SDC命令详解
文章平均质量分 92
该专栏针对每一个SDC命令,设计了专门的实验和讲解,尽可能详细说明这些命令
日晨难再
一个想设计芯片的人,目前研二在读,持续学习中。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SDC命令详解:使用write_script命令进行输出
write_script命令用于将设计中的属性设置命令输出为脚本文件(其实它并不是一个SDC命令,归为此类只是为了方便管理),这包括所有的SDC命令(实际上所有的SDC命令都会设置相应属性,例如set_ideal_network命令设置了ideal_network_source属性),但不包括用户自定义属性。对于那些不能直接用特定命令设置的属性,将统一使用set_attribute命令设置。原创 2025-07-30 19:00:24 · 1050 阅读 · 0 评论 -
SDC命令详解:使用set_min_library命令进行约束
set_min_library命令用于设置一组最大与最小条件的库映射关系(其实它并不是一个SDC命令,归为此类只是为了方便管理),可以让Design Compiler在优化时分别使用两组逻辑库来进行最小与最大条件分析。原创 2025-07-22 23:17:48 · 1013 阅读 · 0 评论 -
SDC命令详解:使用read_sdc命令读取约束
在很长一段时间,用户将所有的设计约束Synopsys Design Constraints(SDC)写在一个文件中,并在脚本中使用source命令执行SDC文件。read_sdc命令的诞生让设置约束拥有了专用的命令,功能也更加强大。原创 2025-07-10 15:27:03 · 382 阅读 · 1 评论 -
SDC命令详解:使用write_sdc命令进行输出
write_sdc命令用于将设计中的约束以Synopsys Design Constraints(SDC)格式输出为脚本文件(其实它并不是一个SDC命令,归为此类只是为了方便管理),在某些情况下,需要以文本形式导出一个设计的SDC约束(比如当Design Compiler配合非Synopsys的后端工具时)。原创 2025-06-25 21:23:10 · 1194 阅读 · 0 评论 -
SDC命令详解:使用printvar命令进行报告
Synopsys的EDA工具中存在一类变量,它们能控制工具的行为,被称为应用变量(application variable),与之对应的是用户自定义变量(user-defined variable)。以Design Compiler为例,使用标准Tcl命令标准Tcl命令puts或拓展Tcl命令echo即可显示变量的值,但更建议使用拓展Tcl命令printvar显示变量值,因为它更加强大。原创 2025-04-21 23:52:54 · 612 阅读 · 1 评论 -
SDC命令详解:使用report_app_var命令进行报告
Synopsys的EDA工具中存在一类变量,它们能控制工具的行为,被称为应用变量(application variable),与之对应的是用户自定义变量(user-defined variable)。以Design Compiler为例,使用标准Tcl命令puts或拓展Tcl命令echo即可显示应用变量的值,但更建议使用拓展Tcl命令report_app_var显示应用变量的值,因为它更加强大。原创 2025-06-24 11:16:24 · 469 阅读 · 1 评论 -
SDC命令详解:使用get_app_var命令进行查询
Synopsys的EDA工具中存在一类变量,它们能控制工具的行为,被称为应用变量(application variable),与之对应的是用户自定义变量(user-defined variable)。get_app_var命令将应用变量的值作为字符串返回,它的BNF范式(有关BNF范式,可以参考以往文章)为:原创 2025-06-24 16:39:49 · 967 阅读 · 1 评论 -
SDC命令详解:使用set_app_var命令进行设置
Synopsys的EDA工具中存在一类变量,它们能控制工具的行为,被称为应用变量(application variable),与之对应的是用户自定义变量(user-defined variable)。以Design Compiler为例,使用标准Tcl命令set即可设置应用变量,包括target_library、search_path等常见应用变量,但更建议使用拓展Tcl命令set_app_var设置应用变量,因为它更加安全和强大。原创 2025-02-05 14:47:10 · 781 阅读 · 1 评论 -
SDC命令详解:使用uniquify命令进行唯一化
在了解uniquify命令前,首先需要知道唯一化的定义:唯一化指的是在综合过程中Design Compiler会自动检测当前设计层次结构中对同一设计(或者说模块)的多次引用(例化),并为每个实例生成一个独立的设计副本。原创 2025-06-10 23:46:13 · 1340 阅读 · 2 评论 -
SDC命令详解:使用set_wire_load_model命令进行约束
set_wire_load_model命令用于显式指定一个线负载模型(设置了对象的wire_load_attach_name属性),如果不使用该命令,则会基于设计面积自动选择或使用默认的线负载模型,详情见下面的博客。原创 2025-06-09 22:50:13 · 1046 阅读 · 1 评论 -
SDC命令详解:使用current_design命令设置当前设计
current_design命令用于设置当前工作的设计,当前设计以及当前实例是许多命令的目标对象,关于当前实例,可以参考下面的博客。原创 2025-06-09 15:01:02 · 645 阅读 · 0 评论 -
SDC命令详解:使用set_max_area命令进行约束
set_max_area命令用于设置当前设计的最大面积(设置了输入端口的max_area属性),这是一种优化约束(Optimization Constraint),Design Compiler在综合的门级优化阶段的最后会尝试确保设计的总面积不超过设置的最大面积(优先级小于设计规则约束(Design Rule Constraint)和时序约束等其他优化约束,即不能以设计规则违例、时序违例为代价修复面积违例),如果不设置该约束,Design Compiler只会执行有限的单元尺寸下调和面积清理步骤。如果想要移原创 2025-06-08 19:45:16 · 781 阅读 · 1 评论 -
SDC命令详解:使用set_propagated_clock命令进行约束
传播时钟是在进行了时钟树综合后,使用set_propagated_clock命令可以将一个理想时钟转换为传播时钟(注意,虚拟时钟即无时钟源对象的时钟无法被转换为传播时钟)(设置对象的propagated_clock属性为true),此时的时钟延迟由源延迟和真实网络延迟组成,这里的网络延迟是根据时钟路径上的线延迟和单元延迟真实计算出来的,而不再使用set_clock_latency命令设置网络延时。有关理想时钟和传播时钟的更详细内容,可以参考下面的博客。原创 2025-06-07 18:59:02 · 987 阅读 · 0 评论 -
SDC命令详解:使用set_port_fanout_number命令进行约束
set_port_fanout_number命令用于设置端口的外部扇出数量(设置了端口的fanout_number属性),正如下面关于set_load命令的博客所说,线网的互连电容总量由与其连接的端口、引脚和线网三者的互连电容组成。线网的互连电容如果没有使用set_load命令人为设置,则由线负载模型(非拓扑模式)得到,即根据扇出数量估算连线长度并得到RC参数。原创 2025-06-07 17:42:09 · 1240 阅读 · 0 评论 -
SDC命令详解:使用set_min_capacitance命令进行约束
set_min_capacitance命令用于设置输入端口的最小需驱动电容(设置了输入端口的min_capacitance属性),这是一种设计规则约束(Design Rule Constraint),Design Compiler进行综合时会尝试确保每个输入端口/输出引脚驱动的电容总和(包括引脚电容和互连电容)不小于设置的最小需驱动电容(优先级高于优化约束(Optimization Constraint))。原创 2025-06-06 21:03:22 · 1104 阅读 · 1 评论 -
SDC命令详解:使用set_max_capacitance命令进行约束
set_max_capacitance命令用于设置最大可驱动电容(设置了对象的max_capacitance属性),这是一种设计规则约束(Design Rule Constraint),Design Compiler进行综合时会尝试确保每个输入端口/输出引脚驱动的电容总和(包括引脚电容和互连电容)不超过设置的最大可驱动电容(优先级高于优化约束(Optimization Constraint))。原创 2025-06-06 00:58:45 · 1068 阅读 · 1 评论 -
SDC命令详解:使用set_fanout_load命令进行约束
set_fanout_load命令用于设置扇出负载(设置了输出端口对象的fanout_load属性),这是一种设计规则约束(Design Rule Constraint),Design Compiler进行综合时会尝试确保每个输入端口/输出引脚驱动的扇出负载总和不超过设置的最大扇出负载(优先级高于优化约束(Optimization Constraint)),默认情况下输出端口的扇出负载为0。如果想要移除扇出负载,使用remove_attribute命令。原创 2025-06-05 21:23:48 · 809 阅读 · 1 评论 -
SDC命令详解:使用set_max_fanout命令进行约束
set_max_fanout命令用于设置最大扇出负载(设置了对象的max_fanout属性),这是一种设计规则约束(Design Rule Constraint),Design Compiler进行综合时会尝试确保每个输入端口/输出引脚驱动的扇出负载总和不超过设置的最大扇出负载(优先级高于优化约束(Optimization Constraint))。原创 2025-06-05 19:57:12 · 1104 阅读 · 0 评论 -
SDC命令详解:使用set_max_transition命令进行约束
set_max_transition命令用于设置最大转换时间(设置了对象的max_transition属性),这是一种设计规则约束(Design Rule Constraint),Design Compiler进行综合时会尝试确保每个线网的转换时间小于线网连接的所有引脚和端口上设置的最严格的最大转换时间(优先级高于优化约束(Optimization Constraint)),例如,可能会通过在单元后加入缓冲器来减少转换时间。原创 2025-06-05 00:40:24 · 1262 阅读 · 0 评论 -
SDC命令详解:使用set_logic_zero命令进行约束
set_logic_zero命令可以设置当前设计中的输入端口为0(设置端口的driven_by_logic_zero属性为true),该端口在综合是可以被认为是0以简化逻辑。如果使用了set_logic_zero命令,不能对同一个端口对象使用set_logic_dc命令和set_logic_one命令。如果想要移除设置为0的端口,使用remove_attribute命令。原创 2025-05-26 10:06:42 · 476 阅读 · 0 评论 -
SDC命令详解:使用set_logic_one命令进行约束
set_logic_one命令可以设置当前设计中的输入端口为1(设置端口的driven_by_logic_one属性为true),该端口在综合是可以被认为是1以简化逻辑。如果使用了set_logic_one命令,不能对同一个端口对象使用set_logic_dc命令和set_logic_zero命令。如果想要移除设置为1的端口,使用remove_attribute命令。原创 2025-05-25 15:45:44 · 324 阅读 · 1 评论 -
SDC命令详解:使用set_logic_dc命令进行约束
set_logic_dc命令可以将当前设计中的输入端口为不关心(设置端口的driven_by_dont_care属性为true),该端口在综合是可以被认为是1或0以简化逻辑。如果使用了set_logic_dc命令,不能对同一个端口对象使用set_logic_one命令和set_logic_zero命令。如果想要移除不关心的端口,使用remove_attribute命令。原创 2025-05-24 23:17:16 · 544 阅读 · 1 评论 -
SDC命令详解:使用get_lib_pins命令进行查询
get_lib_pins命令用于创建一个库单元引脚对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_lib_pin命令,它们没有任何差别。原创 2025-05-21 19:12:34 · 918 阅读 · 0 评论 -
SDC命令详解:使用get_lib_cells命令进行查询
get_lib_cells命令用于创建一个库单元对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_lib_cell命令,它们没有任何差别。原创 2025-05-20 16:54:36 · 1134 阅读 · 0 评论 -
SDC命令详解:使用get_libs命令进行查询
get_libs命令用于创建一个库对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_lib命令,它们没有任何差别。原创 2025-05-19 17:26:53 · 962 阅读 · 0 评论 -
SDC命令详解:使用get_pins命令进行查询
get_pins命令用于创建一个引脚对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_pin命令,它们没有任何差别。原创 2025-05-15 21:08:17 · 1258 阅读 · 1 评论 -
SDC命令详解:使用all_registers命令进行查询
all_registers命令用于创建一个时序单元及其引脚对象集合,包含当前实例(注意该命令与其他all_*命令的区别)中的所有时序单元及其引脚原创 2025-05-13 13:19:48 · 1034 阅读 · 1 评论 -
SDC命令详解:使用all_outputs命令进行查询
all_outputs命令用于创建一个输出端口对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。原创 2025-05-10 19:37:19 · 858 阅读 · 0 评论 -
SDC命令详解:使用all_inputs命令进行查询
all_clocks命令用于创建一个输入端口对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。原创 2025-05-09 16:19:58 · 856 阅读 · 0 评论 -
SDC命令详解:使用all_clocks命令进行查询
all_clocks命令用于创建一个时钟对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。原创 2025-05-08 01:45:44 · 496 阅读 · 1 评论 -
SDC命令详解:使用get_ports命令进行查询
get_ports命令用于创建一个端口对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_port命令,它们没有任何差别。原创 2025-05-07 20:01:12 · 925 阅读 · 0 评论 -
SDC命令详解:使用get_nets命令进行查询
get_nets命令用于创建一个线网对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_net命令,它们没有任何差别。原创 2025-04-29 19:52:43 · 1098 阅读 · 0 评论 -
SDC命令详解:使用get_clocks命令进行查询
get_clocks命令用于创建一个时钟对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还存在get_clock命令(其实它是get_clocks命令的别名),它们没有任何差别。原创 2025-04-28 21:02:04 · 973 阅读 · 0 评论 -
SDC命令详解:使用reset_design命令重置设计
reset_design命令用于重置当前设计。本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。重置当前设计会产生广泛的影响,包括移除当前设计设置的所有SDC约束(效果等同于remove_sdc命令)、移除绝大多数设置在对象上的属性、移除用户创建的对象(如时钟和时序组)。原创 2025-04-26 15:57:15 · 1022 阅读 · 0 评论 -
SDC命令详解:使用get_cells命令进行查询
get_cells命令用于创建一个单元对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。Synopsys:设计对象本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。原创 2025-04-25 15:46:46 · 1084 阅读 · 0 评论 -
SDC命令详解:SDC命令大全(持续更新)
Tcl(Tool Command Language)最初是一种用于编写脚本的编程语言,广泛用于电子设计自动化(EDA)工具中,如Cadence的Virtuoso、Synopsys的Design Compiler等。SDC(Synopsys Design Constraints)是一种定义电路设计约束的格式,它用于确保电子设计在时序方面满足规定的要求,由Synopsys基于Tcl命令拓展而来。下面分类给出一些常用的SDC约束命令(以目前的最新版本2.2为例)。原创 2023-11-03 13:35:46 · 2166 阅读 · 1 评论 -
SDC命令详解:使用remove_sdc命令移除约束
remove_sdc命令用于移除当前设计中设置的所有SDC约束,需要注意的是,UPF约束不会被移除,要想移除UPF约束,需要使用remove_upf命令。原创 2025-04-24 15:54:02 · 1062 阅读 · 1 评论 -
SDC命令详解:使用相对路径访问设计对象(current_instance命令)
SDC命令详解在使用get_cells等命令访问设计对象时,需要指定设计对象的名字,这个名字是一个相对路径,本文就将对此进行讨论。原创 2025-04-12 13:23:32 · 773 阅读 · 1 评论 -
SDC命令详解:使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数
在使用SDC命令时,有时直接使用字符串或列表(Tcl中的列表本质上也是用空格分隔的字符串)而不是集合作为命令参数也可以得到正确的结果。例如对于图1所示的电路,下面这些创建时钟的命令是等价的,它们都是以端口clk为源对象创建周期为5的时钟。原创 2025-04-11 18:11:33 · 1000 阅读 · 1 评论 -
SDC命令详解:使用update_timing命令进行更新
update_timing命令用于更新当前设计的时序信息,当设计出现设置变更时,时序信息会变得过时,此时该命令用于在这些变化发生后进行显式更新。原创 2025-04-03 01:47:37 · 1164 阅读 · 0 评论