欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DC学习(环境与面积)

程序员文章站 2022-05-17 17:19:43
...

1、工作环境约束
一方面是设置DC的工作环境,也就是DC要从在什么样的环境下对你的设计进行约束;另一方面是为了保证电路的每一条时序路径延时计算的精确性,特别是输入/输出路径的精确性,单单靠外部的输入延时和输出延时的约束是不够,还要提供设计的环境属性。

  • 输入管脚:驱动能力,input transition time
  • 输出管脚:RC模型,loading模型
  • PVT conditions
  • parasitic RC:寄生RC
    DC学习(环境与面积)

(1)输出管脚loading模型:
默认情况下,DC假设端口上的外部电容负载为0,我们可以指定电容负载,也可以使用load_of选项明确说明电容负载的值为工艺库中某一单元引脚的负载(一般是选择输入引脚)
DC学习(环境与面积)
左图:set_load [load of my_lib/AN2/A] [get_ports B] ;#采用工艺库my_lib里的AN2,A是cellAN2的pin脚
右图:set_load {expr[load of my_lib/inv1a0/A]*3} [get_ports B] ;#采用工艺库my_lib里的inv1a0,三个并联

(2)input或者inout端口设置驱动强度
默认情况下,激励是理想的,没有transition;也可以直接设置输入端口的转换时间,set_input_transition 0.12 [get_ports A];当不知道输入转换时间时,可以调用库器件模型
DC学习(环境与面积)
set_driving_cell -lib_cell OR3B [get_ports A] ;#调用库lib_cell里的OR3B
set_driving_cell -lib_cell FD1 -pin Qn [get_ports A] ;#调用库lib_cell里的FD1的管脚Qn

(3)PVT(process,voltage,temperature)
工艺库单元通常用“nominal”电压和温度来描述其默认特性;库文件中,包含对各种不同条件的具体描述,如slow,fast,typical等;可以通过使用命令set_operating_conditions命令把工作条件加入到设计上。综合时,原来按“nominal”环境计算出的单元延迟和连线延迟,将按工作条件作适当比例调整。
DC学习(环境与面积)

list_libs ;#查看当前工艺库

report_lib libname;#查看libname的PVT等信息

设置工作条件可用下面命令:

set_operating_conditions -max $OPERA_CONDITION -max_library $LIBNAME

set_operating_conditions -max "wccom"  ;#有wccom,typical,bccom选项

(4)parasitic RC:寄生RC
在计算时序路径延迟时,除了需要知道门单元延迟,还需要知道连线的延迟(线负载模型(wire load model,简称WLM)),WLM是厂商根据多种以及生产出来芯片的统计结果,在同样的工艺下,计算出某个设计规模范围内负载扇出为1的连线平均长度,负载扇出为2的连线平均长度,负载扇出为3的连线平均长度等。WLM根据连线的扇出进行估算连线的RC寄生参数。
具体格式由工艺库决定(下)(也可使用report_lib $lib_name 查看格式):
DC学习(环境与面积)
上图格式中,若连线扇出为7,而连线最大扇出为5,连线的长度计算如下:
232.68 + 50.3104*(7-5) = 333.3008;这条连线的电容和电阻分别为 333.30080.00017=0.0566pf,333.30080.000217=0.0903千欧

DC自动选择线负载模型:set auto_wire_load_selection false
手动选择线负载模型:set_wire_load_model -name $WIRE_LOAD_MODEL -library $LIB_NAME

如果连线穿越层次边界,连接两个不同的模块,那么有三种方式对这种跨模块线连接的类型进行建模,set_wire_load_mode命令用于设置连线负载模型的模式。有三种模式供选择:top、segment和enclosed。三种模式的示意图如下所示:
DC学习(环境与面积)
top模式下,采用50x50;
enclosed模式下,采用40x40;
segmented模式下,sub模块采用本模块的参数;

2、输入驱动,输出负载预算

  • 输入驱动选择弱cell,但不能过弱
  • 输入端口电容限制set_max_capacitance
  • 输出端口load个数估算
    DC学习(环境与面积)

模块输入端口驱动的负载不大于10个“AND2”门的输入引脚的负载,模块输出端口最多允许连接3模块,如果某个输出端需要连接多于3个模块,我们要在代码中复制该输端口

DC学习(环境与面积)

Set  ALL_IN_EXCEPT_CLK  [remove_from_collection [all_inputs]  [get_ports  “$CLK_NAME”]] //DC可以将设计识别成多个对象,比如输入端口、输出端口等等,然后这个就是从all_inputs这个对象集合中,移除掉CLK_NAME这些代表的端口

expr是表达式求值的意思,因为load_of取出了一个端口的负载值(因为load_of这个命令,即命令中有命令,因此需要加[]),这个值*10 是个表达式,因此用expr来指出求值,求值是一个命令,因此用[]括了起来。

LIB_NAME:库的名字,这里使用的恶劣的情况
WIRE_LOAD_MODEL:线负载模型,打开slow.lib这文件,可以找到各种线负载模型
DC学习(环境与面积)
DRIVE_CELL:驱动单元,也就是用来模拟驱动输入端的驱动单元,这要选择库中有的单元,比如反相器
DC学习(环境与面积)
DRIVE_PIN:驱动管脚,为单元的输出管脚,也就是“Y”
OPERA_CONDITION:这个操作环境也是要填写库里面有的:
DC学习(环境与面积)
设置完这些变量之后,还设置了ALL_IN_EXCEPT_CLK和MAX_LOAD变量,其中ALL_IN_EXCEPT_CLK变量代表了除了时钟之外的输入管脚。MAX_LOAD变量就表示了最大的负载,代表的是库中某个单元的输入负载值

3、面积约束
(1)面积的单位

  • 2输入与非门(2-input-NAND-gate)
  • 晶体管数目(Transistors)
  • 平方微米(Square microns)

(2)我们用set_max_area命令为设计作面积的约束
set_max_area 10000
(3)当设计不是很大的时候,根据上面的描述,我们就可以使用下面的命令进行面积约束,让DC做最大的面积优化约束
set_max_area 0

4、实例
(1)设计原理图
DC学习(环境与面积)
(2)设计规范
DC学习(环境与面积)

  • 输入端口的驱动设置:

1、要我们使用库里面的bufbd1来驱动除了clk和Cin*之外的所有输入端口:

 set_driving_cell  -lib_cell  bufbd1  -library  cb13fs120_tsmc_max  [remove_from_collection  [all_inputs]  [get_ports "clk Cin*"]]

(命令的格式为)set_driving_cell -lib_cell 单元的名字 -library 单元所在库的名字 要设置约束的对象
2、Cin*是芯片级的端口,需要加上120ps的最大转化时间

set_input_transition  0.12  [get_ports  Cin*]
  • 输出负载的约束:

1、除了cout输出,其它输出驱动值都是库单元bufbd7的引脚I负载值的两倍,也就是用单元的端口进行约束

set_load [expr 2 * {[load_of cb13fs120_tsmc_max/bufbd7/I]}] [get_ports out*]

2、cout驱动最大值为25pf的负载

set_load 0.025 [get_ports Cout*]
  • 操作环境的设置:
set_operating_conditions -max cb13fs120_tsmc_max
相关标签: DC