SDC命令详解:使用insert_buffer和remove_buffer命令进行编辑

发布时间:2026/8/7 8:21:07
SDC命令详解:使用insert_buffer和remove_buffer命令进行编辑 相关阅读SDC编辑命令https://chenzhang.blog.csdn.net/article/details/161986167insert_buffer和remove_buffer命令用于进行增量式编辑操作。其中insert_buffer命令用于在一个或多个指定的线网、引脚或端口上添加缓冲器或反相器对而remove_buffer命令则用于删除指定的缓冲器或反相器对并同时移除其引脚连接关系。这两个命令常用于逻辑替换、局部结构修正以及优化过程中对设计进行快速调整其实它们并不是一个SDC命令归为此类只是为了方便管理。使用create_cell、remove_cell、disconnect_net和connect_net命令可以完成该效果但insert_buffer和remove_buffer命令提供了一种更有效、更可靠的方式。本文针对Design Compiler但该命令同样存在于IC Compiler工具中它们大致相同略有差别。insert_buffer和remove_buffer命令的BNF范式有关BNF范式可以参考以往文章为insert_buffer object_list buffer_lib_cell [-new_net_names new_net_names] [-new_cell_names new_cell_names] [-no_of_cells number] [-inverter_pair] //注该命令的buffer_lib_cell参数一定要放在object_list参数后 remove_buffer -from start_point [-to end_point_list] -net net_list [-level number_of_levels] //注该命令的选项和参数顺序任意insert_buffer指定对象指定一个对象列表/集合包含线网、引脚或端口对象。对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效关于列表和集合的区别可以参考下面的博客。SDC命令详解使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571新的缓冲器或反相器对被放置在指定线网中或连接到指定引脚或端口的线网中并靠近该引脚或端口。如果指定线网则插入的缓冲器或反相器对成为指定现有线网的新负载。如果指定引脚/端口工具会根据引脚所连接的线网对负载引脚/输出端口进行分组工具会插入缓冲器或反相器对以便新的单元可以驱动它们当引脚是驱动引脚/输入端口时工具会插入缓冲器或反相器对使其成为指定驱动引脚/输入端口的负载。指定缓冲器或反相器库单元指定一个对象列表/集合包含库单元对象。如果该库单元是缓冲器则插入的单元数量默认为1或-no_of_cells选项指定的数量如果该库单元是反相器则插入的单元数量默认为2或-no_of_cells选项指定的数量的两倍。如果库单元同时具有反相输出和非反相输出即既可以充当缓冲器也可以充当反相器则-inverter_pair选项用于控制使用哪一种输出。如果库单元具有多个同类型的输出则该命令使用找到的第一个非反相输出或反相输出。如果指定的库单元包含除缓冲器或反相器外的其他类型则会出现NLE-010错误可以使用get_buffers命令查询逻辑库中没有被标记为dont_use的缓冲器或反相器库单元。指定反相器对-inverter_pair选项用于指定插入反相器对该选项在指定反相器库单元时是默认的并会出现NLE-034警告不能在指定缓冲器时使用否则会出现NLE-013错误主要用于同时具有反相输出和非反相输出的库单元。指定单元数量-no_of_cells选项用于指定插入的单元数量如果该库单元是缓冲器则插入的单元数量默认为1如果该库单元是反相器则插入的单元数量默认为2。指定单元名-new_cell_names选项用于指定插入的新单元的名称默认为eco_cell。插入缓冲器时应为每个缓冲器指定一个单元名插入反相器对时可以为每对反相器指定两个单元名也可以只指定一个单元名工具会在该名称后添加唯一的数字后缀以生成新的单元名称。指定的名称可以是任意有效的单元名称但必须是叶级名称不能是层次化名称并且不能包含嵌入的层次分隔符。在当前实例所指定的当前上下文中这些名称必须唯一。如果指定的单元名称已经存在该命令会在单元名称后添加后缀_%d或_%d_%d%d是一个确保名称唯一所需的最小整数。指定线网名简单使用remove_buffer