首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >综合对象及环境属性

综合对象及环境属性

作者头像
数字芯片社区
发布2022-09-19 11:30:45
5680
发布2022-09-19 11:30:45
举报
文章被收录于专栏:数字芯片数字芯片

本节主要介绍: 设计对象 物集(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—

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字ICer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DC设计对象
  • collection
  • list
  • 其他
  • 面积约束
  • 环境属性
    • 设置环境条件(set_operating_conditions):
      • 设置线负载模型(Wire Load Model)
        • 设置电容负载(set_load、set_load load of)
          • 设置输入端口转换时间(input transition)
            • 设置驱动强度(set_drive、set_driving_cell)
              • 总结
              • 综合
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档