综合对象及环境属性
本节主要介绍: 设计对象 物集(collection) 列表(List) 面积约束 环境属性
DC设计对象
DC的设计对象:Design、cell、Port、pin、net及clock;
- Design: 具有某种或多种逻辑功能的电路描述;
- Cell:设计的instance;
- Port:design的输入、输出;
- Pin:design中cell的输入、输出;
- Net:ports和pins之间或pins和pins之间的信号名;
- Clock:被定义为时钟源的pin或port;
TOP.v
这里TOP.v讲解相关概念:
- 顶层模块TOP为Design;
- 设计顶层的IO:input、output为Port;
- CLK为时钟clock;
- INV1、INV10、bus1、bus0为Net;
- 子模块例化U1、U2、U3、U4为Cell;
- Cell的引脚为Pin;
schematic图
get_designs //获取所有design
get_clocks //获取所有clock
get_pins //获取所有pin
get_cells //获取所有cell
get_nets //获取所有net
get_ports //获取所有port
report_clock:
report_cell:
report_port:
report_net:
all_inputs //获取所有input
all_outputs //获取所有output
all_clocks //获取所有clock
all_registers //获取所有register
collection
dc根据设计提取出来的;
查看大小:
sizeof_collection $all_input_port
从集合中剔除某个端口:
remove_from_collection [all_inputs] [get_ports CLK]
遍历集合的所有元素:
foreach_in_collection cell [get_cells -hier * -filter "is_hierarchical == true"] {echo "Instance [get_object_name $cell] is hierarchical"}
list
用于存放用户自己定义的;
llength //返回长度;
lindex //返回索引值;
foreach //循环;
其他
找出周期小于20的时钟:
set fastclks [get_clocks * -filter "period < 20"]
访问环境变量:
1.array names env
echo $env(Verdi_HOME)
2.get_unix_variable Verdi_HOME
3.getenv Verdi_HOME
显示对象的属性:port、pin、cell、clock、net等:
list_attributes -application -class <object_type>
面积约束
面积约束,就是告诉DC综合的电路面积要在多少范围以内。
如果不设置面积的约束,DC将做最小限度的面积优化。
设置了面积的约束后,DC将在达到面积约束目标时退出的面积优化。
如果设置面积的约束为0, DC将为面积做优化直到再继续优化也不能有大的效果,这时,DC将中止优化。
注意,对于很大,如百万门电路的设计,如将面积的约束设置为0 , DC可能要花很长的时间为设计做面积优化,综合运行的时间很长。
面积约束:set_max_area
set_max_area 15000
当设计不是很大的时候,可以使用下面的命令进行面积约束,让DC做最大的面积优化约束。
set_max_area 0
环境属性
工作环境约束一方面是设置芯片的工作环境,一般就要告诉DC,使用恶劣的或者理想的环境模型对设计进行约束。
另一方面是为了保证电路的每一条时序路径延时计算的精确性,仅靠外部的输入延时和输出延时约束并不够,还要提供设计的环境属性。
约束内容如下:
设置环境条件(set_operating_conditions):
用于描述制程工艺、工作电压与温度(PVT,process,voltage,temperature)这些对延时的影响。
工艺库单元通常用nominal
电压和温度来描述其默认的特性,如工艺库:
set LIB_NAME ss_1v62_125c
set OPERA_CONDITION ss_1v62_125c
set_operating_conditions -max $OPERA_CONDITION -max_library $LIB_NAME
设置线负载模型(Wire Load Model)
线负载模型为DC提供估算的线网负载信息,然后DC使用这些线网负载信息,以负载的大小为函数来模拟线上的延时。
综合时,综合工具会默认根据设计面积和节点处的负载自动选择合适的连线负载模型,如果要关掉自动选择线负载模型,可以使用命令:
set auto_wire_load_selection false
线负载模型工艺库:
手动选择线负载模型:
set LIB_NAME ss_1v62_125c
set WIRE_LOAD_MODEL smic18_wl10
set_wire_load_model -name $WIRE_LOAD_MODEL -library $LIB_NAME
在top模式下,采用top层的连线负载模型,此时连线延迟最大;
通常选用top模式:
set_wire_load_mode top
设置电容负载(set_load、set_load load of)
准确指定输入或输出端口的外部电容负载。对于输出端,为了精确地计算输出电路的延时时间,DC需要知道输出单元所驱动的总负载;
反向器cell工艺库:
默认情况下,DC假设端口上的外部电容负载为0。
我们可以指定电容负载为某些常数,也可以通过用loacl_of选项准确指定电容负载的值为工艺库中某一单元引脚的负载:
由图可以看到B输出端口,驱动了三个反向器A,对应约束为:
set LIB_NAME ss_1v62_125c
set MAX_LOAO [expr [load_of $LIB_NAME/INVX1M/A]] //负载电容大小
set_load [expr $MAX_LOAO*3 ] [all_outputs]
与门cell工艺库:
上图设计的输入端口驱动的负载为10个AND2门组成输入引脚负载,模块输出端口有3个模块,对应约束为:
set LIB_NAME ss_1v62_125c
set MAX_LOAO [expr [load_of $LIB_NAME/AND2X1M/A]*10] //负载电容大小
set_load [expr $MAX_LOAO*3 ] [all_outputs]
设置输入端口转换时间(input transition)
在默认情况下,DC假设输入端口上的外部信号转换时间是0 ,也就是从上升沿跳变到下降沿或者下降沿跳变到上升沿的时间是0,这是不符合实际情况的。
实际的波形是斜坡状的,通过input transition 设置后就是斜上斜下;
对应约束为:
set CLK_NAME Clk
set CLK_PERIOD 10
set CLK_TRAN [expr $CLK_PERIOD*0.01]
set_clock_transition -max $CLK_TRAN [get_clocks $CLK_NAME]
设置驱动强度(set_drive、set_driving_cell)
为input或者inout的端口设定驱动;
set_drive以电阻值为计量,0表示最大驱动强度,通常为时钟端口;
set CLK_NAME Clk
set_drive 0 [get_ports $CLK_NAME]
而set_driving_cell则以模拟端口驱动的器件形式计量,说明输入端口是由一个真实的外部单元驱动。
为input或者inout的端口设定驱动,是因为,对于输入端,为了精确计算输入电路的延时时间,DC需要知道到达输入端口的转换时间:
通过设置驱动强度,告诉DC这个设计的输入端口实际上是由一个真实的外部单元驱动的,不是理想的,DC就会计算输入信号的实际转换时间,指定某一个库单元正在驱动输入端。
下面是输入端B,由反向器Y的输出引脚驱动的例子:
set_driving_cell -lib_cell INVX1M -pin Y [get_potrs B]
总结
本节环境约束脚本如下:
TOP2.con
上图中,LIB_NAME、WIRE_LOAD_MODEL、DRIVE_CELL 、DRIVE_PIN、OPERA_CONDITION等变量需要根据工艺更改。
综合
在之前脚本中更改及添加如下:
run2.tcl
dc_shell -f ../scripts/run_2.tcl | tee -i run.log
查看面积:report_area:
查看报告:report
report_constraint -all_violators
report_timing
report_timing -delay_type max
—END—
相关文章
- 【javascript】hasOwnProperty()方法检查对象是否有该属性
- JavaScript CSS Style属性对照表「建议收藏」
- 基于JPA的属性转换器AttributeConverter
- 【说站】js中hasOwnProperty的属性用法
- js获取服务器控件DropDownList所选中的各项属性
- navigator对象属性_javascript构造函数
- 对象的属性表达式
- 初识: 对象的属性特征
- 【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)
- Linux如何改变只读属性(linux修改只读属性)
- input标签设置disabled=”disabled”属性的效果详解编程语言
- Linux文件基本属性
- PHP5.0对象模型深度探索之属性和方法
- JavaScript对象、属性、事件手册集合方便查询
- Asp.net内置对象之Cookies(简介/属性方法/基本操作及实例)
- javascript检测对象中是否存在某个属性判断方法小结
- js自动生成对象的属性示例代码
- javascript动态添加、修改、删除对象的属性与方法详解
- JavaScript中对象属性的添加和删除示例
- Javascript学习笔记之对象篇(一):对象的使用和属性