在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
楼主: Gary.wang

[求助] 关于lib里面DFF的setup time和hold time!!!

[复制链接]
发表于 2012-11-4 11:50:52 | 显示全部楼层
cell (DFFHQX1) {
  cell_footprint : dffhq;
  area : 53.222400;
  pin(D) {
    direction : input;
    capacitance : 0.002193;
    internal_power() {
      rise_power(passive_energy_template_1x7) {
        index_1 ("0.025, 0.08, 0.3, 0.7, 1.2, 1.7, 2.3");
        values ("0.046422, 0.047950, 0.051254, 0.065027, 0.084779, 0.102433, 0.124810");
      }
      fall_power(passive_energy_template_1x7) {
        index_1 ("0.025, 0.08, 0.3, 0.7, 1.2, 1.7, 2.3");
        values ("0.052953, 0.051399, 0.056175, 0.069996, 0.090363, 0.108792, 0.131087");
      }
    }
    timing() {
      related_pin : "CK";
      timing_type : setup_rising;
      rise_constraint(setup_template_3x3) {
        index_1 ("0.025, 0.7, 2.3");
        index_2 ("0.025, 0.7, 1.7");
        values ( \
          "0.066406, 0.082031, 0.183594", \
          "0.042969, 0.054688, 0.160156", \
          "-0.128906, -0.109375, 0.007812");
      }
      fall_constraint(setup_template_3x3) {
        index_1 ("0.025, 0.7, 2.3");
        index_2 ("0.025, 0.7, 1.7");
        values ( \
          "0.136719, 0.148438, 0.382812", \
          "0.289062, 0.300781, 0.519531", \
          "0.632812, 0.644531, 0.875000");
      }
    }
    timing() {
      related_pin : "CK";
      timing_type : hold_rising;
      rise_constraint(hold_template_3x3) {
        index_1 ("0.025, 0.7, 2.3");
        index_2 ("0.025, 0.7, 1.7");
        values ( \
          "-0.031250, -0.066406, -0.164062", \
          "-0.007812, -0.031250, -0.136719", \
          "0.179688, 0.152344, 0.035156");
      }
      fall_constraint(hold_template_3x3) {
        index_1 ("0.025, 0.7, 2.3");
        index_2 ("0.025, 0.7, 1.7");
        values ( \
          "-0.031250, -0.031250, -0.105469", \
          "-0.183594, -0.171875, -0.238281", \
          "-0.500000, -0.484375, -0.535156");
      }
    }
  }
  pin(CK) {
    direction : input;
    clock : true;
    capacitance : 0.003057;
    internal_power() {
      rise_power(passive_energy_template_1x7) {
        index_1 ("0.025, 0.08, 0.3, 0.7, 1.2, 1.7, 2.3");
        values ("0.031776, 0.034143, 0.041185, 0.062110, 0.088720, 0.115901, 0.148819");
      }
      fall_power(passive_energy_template_1x7) {
        index_1 ("0.025, 0.08, 0.3, 0.7, 1.2, 1.7, 2.3");
        values ("0.042751, 0.044956, 0.054208, 0.073618, 0.100675, 0.128054, 0.160988");
      }
    }
    min_pulse_width_high : 0.075230;
    min_pulse_width_low : 0.114046;
  }
  ff(IQ,IQN) {
    clocked_on : "CK";
    next_state : "D";
  }
  pin(Q) {
    direction : output;
    capacitance : 0.0;
    function : "IQ";
    internal_power() {
      related_pin : "CK";
      rise_power(energy_template_7x7) {
        index_1 ("0.025, 0.08, 0.3, 0.7, 1.2, 1.7, 2.3");
        index_2 ("0.00035, 0.021, 0.0385, 0.084, 0.147, 0.231, 0.3115");
        values ( \
          "0.033199, 0.033746, 0.032558, 0.030537, 0.027979, 0.024713, 0.021577", \
          "0.032740, 0.034635, 0.033725, 0.031806, 0.029280, 0.026016, 0.022889", \
          "0.034468, 0.035408, 0.035415, 0.033527, 0.031093, 0.027857, 0.024743", \
          "0.038458, 0.032936, 0.032171, 0.033302, 0.030833, 0.027592, 0.024479", \
          "0.040797, 0.036192, 0.035824, 0.033104, 0.031157, 0.028073, 0.024993", \
          "0.038872, 0.036537, 0.036396, 0.033005, 0.030987, 0.028233, 0.025296", \
          "0.041415, 0.038962, 0.038802, 0.038611, 0.029142, 0.026985, 0.024677");
      }
      fall_power(energy_template_7x7) {
        index_1 ("0.025, 0.08, 0.3, 0.7, 1.2, 1.7, 2.3");
        index_2 ("0.00035, 0.021, 0.0385, 0.084, 0.147, 0.231, 0.3115");
        values ( \
          "0.024088, 0.031324, 0.031560, 0.031364, 0.031213, 0.031180, 0.031194", \
          "0.023695, 0.030670, 0.030803, 0.030621, 0.030534, 0.030489, 0.030488", \
          "0.030855, 0.031924, 0.032135, 0.031890, 0.031750, 0.031676, 0.031637", \
          "0.037953, 0.034213, 0.033739, 0.033826, 0.033687, 0.033602, 0.033558", \
          "0.042105, 0.039090, 0.038503, 0.037979, 0.037665, 0.037523, 0.037468", \
          "0.044159, 0.040718, 0.039992, 0.039392, 0.039036, 0.038811, 0.038758", \
          "0.048419, 0.043883, 0.042796, 0.042105, 0.041782, 0.041566, 0.041461");
      }
    }
    timing() {
      related_pin : "CK";
      timing_type : rising_edge;
      timing_sense : non_unate;
      cell_rise(delay_template_7x7) {
        index_1 ("0.025, 0.08, 0.3, 0.7, 1.2, 1.7, 2.3");
        index_2 ("0.00035, 0.021, 0.0385, 0.084, 0.147, 0.231, 0.3115");
        values ( \
          "0.126573, 0.193260, 0.248096, 0.390868, 0.588802, 0.852752, 1.105708", \
          "0.134473, 0.201174, 0.255999, 0.398774, 0.596707, 0.860664, 1.113618", \
          "0.145903, 0.212583, 0.267436, 0.410202, 0.608148, 0.872110, 1.125078", \
          "0.136173, 0.202878, 0.257670, 0.400448, 0.598397, 0.862369, 1.115346", \
          "0.106654, 0.173379, 0.228159, 0.370874, 0.568808, 0.832793, 1.085774", \
          "0.068813, 0.135429, 0.190210, 0.332876, 0.530788, 0.794767, 1.047748", \
          "0.017292, 0.083994, 0.138722, 0.281356, 0.479233, 0.743198, 0.996177");
      }
      rise_transition(delay_template_7x7) {
        index_1 ("0.025, 0.08, 0.3, 0.7, 1.2, 1.7, 2.3");
        index_2 ("0.00035, 0.021, 0.0385, 0.084, 0.147, 0.231, 0.3115");
        values ( \
          "0.027426, 0.139885, 0.239102, 0.498684, 0.858777, 1.338964, 1.799138", \
          "0.027074, 0.139903, 0.239145, 0.498683, 0.858781, 1.338962, 1.799146", \
          "0.027321, 0.139903, 0.239034, 0.498673, 0.858772, 1.338957, 1.799135", \
          "0.027371, 0.139905, 0.239140, 0.498719, 0.858770, 1.338958, 1.799132", \
          "0.027538, 0.139925, 0.239117, 0.498658, 0.858797, 1.338970, 1.799139", \
          "0.027138, 0.139912, 0.239130, 0.498635, 0.858748, 1.338958, 1.799150", \
          "0.027804, 0.139953, 0.239140, 0.498599, 0.858731, 1.338930, 1.799137");
      }
      cell_fall(delay_template_7x7) {
        index_1 ("0.025, 0.08, 0.3, 0.7, 1.2, 1.7, 2.3");
        index_2 ("0.00035, 0.021, 0.0385, 0.084, 0.147, 0.231, 0.3115");
        values ( \
          "0.108444, 0.168458, 0.207951, 0.301866, 0.428812, 0.597802, 0.759784", \
          "0.115862, 0.175926, 0.215418, 0.309339, 0.436289, 0.605282, 0.767266", \
          "0.126392, 0.186308, 0.225761, 0.319692, 0.446633, 0.615625, 0.777607", \
          "0.115838, 0.175857, 0.215357, 0.309273, 0.436185, 0.605165, 0.767136", \
          "0.085674, 0.146090, 0.185647, 0.279622, 0.406554, 0.575510, 0.737466", \
          "0.047426, 0.108169, 0.147821, 0.241838, 0.368774, 0.537744, 0.699696", \
          "-0.004643, 0.056835, 0.096590, 0.190669, 0.317555, 0.486505, 0.648467");
      }
      fall_transition(delay_template_7x7) {
        index_1 ("0.025, 0.08, 0.3, 0.7, 1.2, 1.7, 2.3");
        index_2 ("0.00035, 0.021, 0.0385, 0.084, 0.147, 0.231, 0.3115");
        values ( \
          "0.029893, 0.101269, 0.153828, 0.297440, 0.505461, 0.786136, 1.055562", \
          "0.029839, 0.101283, 0.153775, 0.297432, 0.505460, 0.786137, 1.055562", \
          "0.030377, 0.101370, 0.153751, 0.297471, 0.505466, 0.786138, 1.055562", \
          "0.031000, 0.102126, 0.154293, 0.297598, 0.505512, 0.786157, 1.055567", \
          "0.033318, 0.103058, 0.154916, 0.297969, 0.505674, 0.786190, 1.055575", \
          "0.035085, 0.103979, 0.155717, 0.298306, 0.505886, 0.786349, 1.055660", \
          "0.037125, 0.105417, 0.156607, 0.298669, 0.506013, 0.786489, 1.055807");
      }
    }
    max_capacitance : 0.311500;
  }
  cell_leakage_power : 1643.618394;
}
回复 支持 反对

使用道具 举报

发表于 2012-11-4 11:51:48 | 显示全部楼层
回复 10# love80238023


   看看上面那个DFF库,咱们研究下,呵呵
回复 支持 反对

使用道具 举报

发表于 2012-11-4 11:59:02 | 显示全部楼层
各个模板:
/* templates */
  lu_table_template(delay_template_7x1) {
    variable_1 : input_net_transition;
    index_1 ("1000, 1001, 1002, 1003, 1004, 1005, 1006");
  }
  power_lut_template(energy_template_7x1) {
    variable_1 : input_transition_time;
    index_1 ("1000, 1001, 1002, 1003, 1004, 1005, 1006");
  }
  lu_table_template(delay_template_7x7) {
    variable_1 : input_net_transition;
    variable_2 : total_output_net_capacitance;
    index_1 ("1000, 1001, 1002, 1003, 1004, 1005, 1006");
    index_2 ("1000, 1001, 1002, 1003, 1004, 1005, 1006");
  }
  power_lut_template(energy_template_7x7) {
    variable_1 : input_transition_time;
    variable_2 : total_output_net_capacitance;
    index_1 ("1000, 1001, 1002, 1003, 1004, 1005, 1006");
    index_2 ("1000, 1001, 1002, 1003, 1004, 1005, 1006");
  }
  power_lut_template(energy_template_1x7) {
    variable_1 : total_output_net_capacitance;
    index_1 ("1000, 1001, 1002, 1003, 1004, 1005, 1006");
  }
  power_lut_template(energy_template_7x3x3) {
    variable_1 : input_transition_time;
    variable_2 : total_output_net_capacitance;
    variable_3 : equal_or_opposite_output_net_capacitance;
    index_1 ("1000, 1001, 1002, 1003, 1004, 1005, 1006");
    index_2 ("1000, 1001, 1002");
    index_3 ("1000, 1001, 1002");
  }
  power_lut_template(passive_energy_template_1x7) {
    variable_1 : input_transition_time;
    index_1 ("1000, 1001, 1002, 1003, 1004, 1005, 1006");
  }
  lu_table_template(setup_template_3x3) {
    variable_1 : constrained_pin_transition;
    variable_2 : related_pin_transition;
    index_1 ("1000, 1001, 1002");
    index_2 ("1000, 1001, 1002");
  }
  lu_table_template(hold_template_3x3) {
    variable_1 : constrained_pin_transition;
    variable_2 : related_pin_transition;
    index_1 ("1000, 1001, 1002");
    index_2 ("1000, 1001, 1002");
  }
  lu_table_template(recovery_template_3x3) {
    variable_1 : constrained_pin_transition;
    variable_2 : related_pin_transition;
    index_1 ("1000, 1001, 1002");
    index_2 ("1000, 1001, 1002");
  }
  lu_table_template(removal_template_3x3) {
    variable_1 : constrained_pin_transition;
    variable_2 : related_pin_transition;
    index_1 ("1000, 1001, 1002");
    index_2 ("1000, 1001, 1002");
  }
回复 支持 反对

使用道具 举报

发表于 2012-11-4 12:05:27 | 显示全部楼层
本帖最后由 wlbce 于 2012-11-4 12:06 编辑

回复 1# Gary.wang


   我发的库是确定了输入的。
我想问问库里面怎么hold有负值???

我学识较浅,求解~~~
回复 支持 反对

使用道具 举报

发表于 2012-11-4 13:55:36 | 显示全部楼层
本帖最后由 sjtusonic 于 2012-11-4 13:58 编辑

回复 14# wlbce


    It is interesting to note that in discussion of such a model, if the input
transition delay is large compared to the total cell delay, then the propagation
delay becomes negative. This negative time evaluation might
occur when the output changes before the input reaches the logic switching
threshold voltage. Although this negative value is alarming, it is not a
problem as long as the cell delay is a positive value. Therefore a careful
model validation is required when using this type of models.

--摘自 physical design essential

Physical_Design_Essentials.pdf (2.63 MB , 下载次数: 570 )


我的理解是:因为delay是50%至50%的时间,当input tran比较大时,确实有可能在输入不到50%时,输出已经到50%,这时候是Propagation delay是负的。


另外对于某些特殊单元,hold确实可以一直是负的(因为cell内部,clock pin的路径较短;D pin的路径较长)。
回复 支持 反对

使用道具 举报

发表于 2012-11-4 20:33:06 | 显示全部楼层
回复 9# wlbce

我的理解是这个表是个二维表,表的x方向和y方向代表了clock的transition时间和D的transition时间。
回复 支持 反对

使用道具 举报

发表于 2012-11-4 23:02:08 | 显示全部楼层
回复 16# lc113xd


   呵呵,我也是这么理解的,但莫名其妙楼主的库 没有 写这个模板。
回复 支持 反对

使用道具 举报

发表于 2012-11-4 23:04:57 | 显示全部楼层
回复 15# sjtusonic


  哈哈~ 非常感谢!!理解了!真是好资料~~我好好研究研究~~
回复 支持 反对

使用道具 举报

发表于 2015-3-21 16:21:09 | 显示全部楼层
我也下载来看看
回复 支持 反对

使用道具 举报

发表于 2015-12-21 16:40:34 | 显示全部楼层
回复 8# chaobeyond


   大神,请教一下,为什么setup 和 hold值 取决于: clk 信号的transition 和 D 信号的transition,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-9-11 23:20 , Processed in 2.356555 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表