DesignCompiler(七)——环境、设计规则和面积约束

DesignCompiler(七)——环境、设计规则和⾯积约束
本⽂的主要内容是讲解(约束针对的是逻辑综合下的约束,⽽实战部分则是在DC的拓扑模式下进⾏):
    ·环境属性的约束
    ·设计规则的约束
    ·⾯积的约束
枸骨叶冬青    ·实战(部分)环境属性的约束
1、⼯作环境属性约束
  输⼊/输出端⼝及其驱动属性是设计规格的⼀部分,⼯作环境的约束,是对这个规格约束的⼀部分。
  ⼯作环境约束⼀⽅⾯是设置DC的⼯作环境,也就是DC要从在什么样的环境下对你的设计进⾏约束,举个例⼦,⽐如你的芯⽚要在恶劣的环境中进⾏⼯作,DC如果在优质的环境中对你的设计进⾏约束,你的芯⽚⽣产出来,就很有可能⼯作不了。因此⼀般就要告诉DC,使⽤恶劣的模型对设计进⾏约束。另⼀⽅⾯是为了保证电路的每⼀条时序路径延时计算的精确性,特别是输⼊/输出路径的精确性,单单靠外部的输⼊延时和输出延时的约束是不够,还要提供设计的环境属性。
这个约束可以看成是宏观的、整体的、外在的约束,约束的内容可以从下图看出:
    ·设置环境条件(set_operating_conditions):
  ⽤于描述制造⼯艺、⼯作电压与温度(PVT,process,voltage,temperature)这些周围环境对延时的影响。⼯艺库单元通常
⽤“nominal”电压和温度来描述其默认的特性,例如:
  器件与线⽹上的延时在条件不同的时候呈线性变换。库⽂件中,包含对各种不同条件的具体描述,如slow,fast,typical等,对于芯⽚⼯作的最差、最好及典型的具体描述(具体见标准单元库那⼀节)。通过设置不同的操作条件,可以覆盖到各种不同的情况。
  如果电路在不同于“nominal”电压和或温度的条件下⼯作,我们需要为设计设置⼯作条件(Operating Conditions),我们可以⽤
set_operating_conditions命令把⼯作条件加⼊到设计上。综合时,原来按"nominal”环境计算出的单元延迟和连线延迟,将按⼯作条件作适当的⽐例调整,如下图为为延迟与⼯作条件的关系:
  讲解完⼯作环境条件是什么之后,下⾯就介绍与它有关的常见的命令以及约束。⼯艺库中通常指定⼀个默认的⼯作条件.我们可以
⽤:report_lib  libname命令把⼚商提供的所有⼯作条件列出来。
  设置⼯作条件可⽤下⾯命令举例如下:
  set_operating_conditions  -max $OPERA_CONDITION  -max_library  $LIB_NAME
    ·设置线负载模型(set_wire_load_model):
  在计算时序路径延迟时,除了需要知道门单元延迟外,还需要知道连线的延迟,如下图所⽰:
什么是造型艺术  门单元的延迟⼀般⽤⾮线性延迟模型(non-linear delay model)算出。半导体⼚商提供的⼯艺库中,有两个⼆维表格,根据门单元的输⼊转换时间和输出负载在表中出门单元的延迟以及其输出转换时间。输出转换时间⼜作为下⼀级电路的输⼈转换时间。门单元的延迟在综合库那⼀节详细介绍。
  连线的延迟⽬前⼀般⽤(连)线负载模型( Wire  Load  Model,简称WLM)估算。WLM是⼚商根据多种已经⽣产出来芯⽚的统计结果,在同样的⼯艺下,计算出在某个设计规模范围内(例如门数为0~43478.00、门数为43478.00~86956.00,等等)负载扇出为1的连线的平均长度,负载扇出为2的连线的平均长度,负载扇出为3的连线的平均长度等等。WLM是根据连线的扇出进⾏估算连线的RC寄⽣参数,⼀般情况下,由半导体⼚商建⽴。⼚商根据已⽣产出来的其他设计统计出该⼯艺的连线寄⽣参数。半导体⼚商提供的⼯艺库中包括了线负载模型。通常在⼀个综合库⾥⾯有多种线负载模型,不同的模型模拟不同规模的的模块内的线上负载情况(具体见综合库描述那⼀节)。⽤户也可以⾃⼰创建⾃⼰的线负载模型去更精确地模拟设计内的线上负载。连线负载模型的格式如下图所⽰(上),具体格式由⼯艺库决定(下):
  关于线负载模型的更多内容,可以参考综合库/⼯艺库那⼀节。
  线负载模型为DC提供统计性估算的线⽹负载信息,随后DC使⽤这些线⽹负载信息,以负载的⼤⼩为函数来模拟线上的延时(也就是设置这个约束是⽤来模拟线延时)。因此设置线负载模型。
  如DC遇到连线的扇出⼤于模型中列出的最⼤扇出值,它将使⽤外推斜率(Extrapolation slope)来计算连线的长度。上例格式中,如果连线的扇出为7,⽽连线负载模型中最⼤扇出是5,连线的其长度计算如下:
  讲完线负载模型是什么东西,为什么设置线负载模型约束之后,下⾯介绍与其相关的命令。
  如果要查看⼯艺库中的WLM,可以使⽤命令:report_lib  $lib_name,进⾏综合时,综合⼯具会默认根据设计⾯积和节点处的负载⾃动选择合适的连线负载模型,如果要关掉⾃动选择WLM,那么可以使⽤命令:
    set  auto_wire_load_selection  false
  然后⼿动选择线负载模型的命令是:
    set_wire_load_model  -name  $WIRE_LOAD_MODEL  -library  $LIB_NAME
  如果连线穿越层次边界,连接两个不同的模块,那么有三种⽅式对这种跨模块线连接的类型进⾏建模,set_wire_load_mode命令⽤于设置连线负载模型的模式。有三种模式供选择:top、segment和enclosed。三种模式的⽰意图如下所⽰:
  由图可见, 该设计的顶层设计(top)包括⼀个⼦模块, 该⼦模块⼜包括两个更⼩的模块。 顶层设计对应的连线负载模型为
家校网50×50; ⼦模块对应的连线负载模型为40×40;更⼩的两个模块对应的负载模型为20×20和30×30。
钱塘江漩涡原因  假设有⼀个连线贯穿两个⼩模块, 但没有超出⼦模块的范围。 对于这种连线, 在三种模式下, 所⽤的连线负载模型是不同的,下⾯是介绍:
  ⽐较悲观的形式:这时,top为顶层设计,电路的规模⽐SUB模块⼤,连线负载模型最悲观。在top模式下, 采⽤top层的连线负载模型, 即50×50;因此,连线的延迟最⼤。我们⼀般选⽤这种⽅式,命令如下:
北美市场        set_wire_load_mode  top 
  ⽐较不悲观⽅式:⽤enclosed的⽅式选择WLM,该W LM对应的设计完全地包住这条连线,这时DC将选择SUB模块对应的连线负载模型。在enclosed模式下, 采⽤⼦模块的连线负载模型, 即40×40;因SUB模块⽐较TOP设计⼩,所以连线的延迟⽐较短(不悲观,就是连线延时⼩)。对应的命令为:
      set_wire_load_mode  enclosed
  在segmented模式下, 位于两个⼩模块中的部分采⽤这两个⼩模块对应的连线负载模型,  中间部分采⽤⼦模块的连线负载模型。
  驱动强度、电容负载这些约束是要经验的,⼀⽅⾯是对I/O⼝进⾏约束,属于I/O⼝的约束,为时序约束与时序分析提供了路径,更是为输⼊/输出路径延时约束的精确性提供保证;⼀⽅⾯是对I/O⼝对外的环境进⾏约束,可以算是属于环境约束,因此放在这⾥进⾏讲解。
    ·设置驱动强度(set_drive与set_driving_cell):
  为input或者inout的端⼝设定驱动。Set_drive以电阻值为计量,0表⽰最⼤驱动强度,通常为时钟端⼝;⽽set_driving_cell则以模拟端⼝驱动的器件形式计量,说明输⼊端⼝是由⼀个真实的外部单元驱动。
  为什么要需要为input或者inout的端⼝设定驱动?这是因为,对于输⼊端,为了精确计算输⼊电路的
延时时间,DC需要知道到达输⼊端⼝的转换时间:
  在默认情况下,DC假设输⼊端⼝上的外部信号转换时间是0 ,也就是从上升沿跳变到下降沿或者下降沿跳变到上升沿的时间是0,这是不符合实际情况的。通过设置驱动强度,就告诉DC这个设输⼊端⼝实际上是由⼀个真实的外部单元驱动的,不是理想的;DC就会计算输⼊信号的实际转换时间,仿佛指定某⼀个库单元正在驱动输⼊端,下⾯是输⼊端IN1 由FD1的输出引脚驱动的例⼦:
  对应的约束可以这样写:
      set_driving_cell  -lib_cell  FD1  -pin  Q  [get_potrs  IN1]
如果不⽤开关选项“-pin",DC将使⽤所到的第⼀只引脚(库中这个单元的第⼀个引脚,这个驱动引脚貌似是要选择输出的引脚)。
   此外,除了通过这两种⽅式,还可以直接设置输⼊端⼝的转换时间,如下所⽰:
        set_input_transition  时间    [get_ports 设计对象]
    ·设置电容负载(set_load与set_load load of):
  明确说明端⼝(输⼊或输出)上的外部电容负载。对于输出端,为了精确地计算输出电路的延时时间,DC需要知道输出单元所驱动的总负载:
  默认情况下,DC假设端⼝上的外部电容负载为0。我们可以指定电容负载为某些常数值,也可以通
过⽤loacl_ of选项明确说明电容负载的值为⼯艺库中某⼀单元引脚的负载(⼀般是选择输⼊引脚):
  跟设计输⼊输出延时⼀样,设计者往往并不知道每个模块输⼊端⼝的外部驱动单元和/或输出端⼝的外部输出负载。因此我们要通过负载预算(Load Budget),为输⼊/输出端⼝设置环境的约束。产⽣负载的原则如下:
    1.保守起见,假设输⼊端⼝为驱动能⼒弱的单元驱动(即转换时间长);
    2.限制每⼀个输⼊端⼝的输⼊电容(负载);
    3.估算输出端⼝的驱动模块数⽬。
  例如:(只是举例)对于下⾯的电路图:
  其规格为:模块输⼊端⼝驱动的负载不⼤于10个“AND2”门的输⼊引脚的负载,模块输出端⼝最多允许连接3模块,如果某个输出端需要连接多于3个模块,我们要在代码中复制该输端⼝。
对应的约束为:
  环境约束举例如下所⽰:
方俊明

本文发布于:2024-09-22 01:35:38,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/453340.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:负载   约束   连线   模型   设计   模块
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议