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

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4461|回复: 11

[求助] STA无负slack且后仿通过,但.sdf文件中有的单元端口的HOLD 却为负

[复制链接]
发表于 2016-10-9 12:17:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

PT中进行report_constraint –all_violators时无负slack,后仿验证亦通过,但.sdf文件中有的单元端口的HOLD 却为负,如下:

(CELL

  (CELLTYPE "dfcrq1")

  (INSTANCE chip/uut_filter/M3/A1/d1_reg\[25\])

  (DELAY

    (ABSOLUTE

    (IOPATH CDN Q () (0.331::0.719))
//输入CDN输出Q0→1CDNQ的最小延时为0.331ns,最大延时为0.719ns

    (IOPATH (posedge CP) Q (0.465::1.054) (0.452::0.983))

    )

  )

  (TIMINGCHECK

    (WIDTH (negedge CDN) (0.497::1.110))
//不太懂这句,我的理解是:CDN的下降沿的最小延时为0.497ns,最大延时为1.110ns,不知道对不对?

    (HOLD (posedge CDN) (posedge CP) (0.278::0.545))

    (RECOVERY (posedge CDN) (posedge CP) (-0.261::-0.062))
//复位端CDN上升沿相对于时钟CP上升沿的恢复时间最小为-0.261ns,最大为-0.062ns

    (WIDTH (negedge CP) (0.289::0.549))

    (WIDTH (posedge CP) (0.255::0.437))

    (SETUP (posedge D) (posedge CP) (0.204::0.505))
//D上升沿相对于时钟CP上升沿的建立时间最小为0.204ns,最大为0.505ns

    (SETUP (negedge D) (posedge CP) (0.222::0.444))

    (HOLD (posedge D) (posedge CP) (-0.203::-0.096))
//D上升沿相对于时钟CP上升沿的保持时间最小为-0.203ns,最大为-0.096ns

    (HOLD (negedge D) (posedge CP) (-0.221::-0.128))

  )

)

问:这是什么原因导致的?对整个设计有何影响?

发表于 2016-10-9 13:08:15 | 显示全部楼层
检查下你的.lib中DFF的hold是不是负值
 楼主| 发表于 2016-10-9 16:48:47 | 显示全部楼层
回复 2# seulzren

从以下信息可以看出hold为负值,你看对吗:

pin (D) {

      direction : input;

      nextstate_type : data;

      related_ground_pin : VSS;

      related_power_pin : VDD;

      max_transition : 3;

      capacitance : 0.0069663;

      rise_capacitance : 0.0069663;

      rise_capacitance_range (0.00563004, 0.0069663);

      fall_capacitance : 0.00683772;

      fall_capacitance_range (0.00522153, 0.00683772);

      timing () {

        related_pin : "CP";

        timing_type : setup_rising;

        rise_constraint (constraint_template_7x7) {

          index_1 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          index_2 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          values ( \

            "0.416633, 0.329487, 0.309022, 0.297606, 0.294431, 0.302398, 0.334312", \

            "0.481208, 0.402052, 0.381587, 0.36702, 0.359007, 0.366973, 0.398887", \

            "0.517904, 0.430757, 0.410292, 0.395725, 0.387712, 0.395679, 0.427593", \

            "0.538613, 0.456087, 0.427632, 0.415609, 0.413042, 0.421009, 0.447736", \

            "0.57578, 0.488633, 0.468168, 0.453601, 0.445588, 0.445565, 0.477479", \

            "0.594826, 0.507679, 0.487214, 0.472647, 0.464634, 0.464611, 0.496525", \

            "0.624378, 0.537231, 0.508776, 0.496472, 0.486196, 0.486173, 0.518087" \

          );

        }

        fall_constraint (constraint_template_7x7) {

          index_1 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          index_2 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          values ( \

            "0.378176, 0.317057, 0.30272, 0.286396, 0.271682, 0.2673, 0.266525", \

            "0.480078, 0.418959, 0.396633, 0.385957, 0.373585, 0.361212, 0.368428", \

            "0.531359, 0.47024, 0.447913, 0.437238, 0.424865, 0.420483, 0.419708", \

            "0.583701, 0.520292, 0.505956, 0.489844, 0.474918, 0.470535, 0.473467", \

            "0.685821, 0.624701, 0.602375, 0.591699, 0.579327, 0.566955, 0.57417", \

            "0.777326, 0.716207, 0.693881, 0.683205, 0.670833, 0.658461, 0.657686", \

            "0.937607, 0.876488, 0.862152, 0.846738, 0.831114, 0.826732, 0.825957" \

          );

        }

      }

timing () {

        related_pin : "CP";

        timing_type : hold_rising;

        rise_constraint (constraint_template_7x7) {

          index_1 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          index_2 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          values ( \

            "-0.204539, -0.150111, -0.143671, -0.145762, -0.154354, -0.167645, -0.210207", \

            "-0.279382, -0.224954, -0.218513, -0.215905, -0.221206, -0.234497, -0.277059", \

            "-0.30859, -0.254162, -0.239732, -0.245113, -0.250414, -0.263705, -0.298277", \

            "-0.330586, -0.279527, -0.265097, -0.266582, -0.26779, -0.281081, -0.320547", \

            "-0.365167, -0.310739, -0.296308, -0.2937, -0.299001, -0.312292, -0.346864", \

            "-0.388996, -0.326578, -0.312148, -0.30954, -0.314841, -0.328132, -0.362704", \

            "-0.41451, -0.352092, -0.337662, -0.332002, -0.332365, -0.345656, -0.380228" \

          );

        }

        fall_constraint (constraint_template_7x7) {

          index_1 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          index_2 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          values ( \

            "-0.260244, -0.203022, -0.182191, -0.17043, -0.151256, -0.145846, -0.151006", \

            "-0.357534, -0.300312, -0.279481, -0.269936, -0.256536, -0.243136, -0.248296", \

            "-0.410192, -0.35297, -0.332139, -0.322594, -0.309194, -0.303784, -0.300954", \

            "-0.467061, -0.404138, -0.391298, -0.379199, -0.360363, -0.354953, -0.356406", \

            "-0.567218, -0.509996, -0.489166, -0.479621, -0.458231, -0.45282, -0.44999", \

            "-0.659127, -0.593915, -0.581075, -0.56354, -0.550139, -0.544729, -0.541899", \

            "-0.825068, -0.759856, -0.747016, -0.734219, -0.716081, -0.71067, -0.70784" \

          );

        }

      }


发表于 2016-10-9 18:15:03 | 显示全部楼层
虽然没有对sdf仔细研究过,但是sdf是给仿真用的反标文件,类似于寄生参数,你看到的负数应该他的hold 值是负数,可以看看lib文件中hold的大小,而不是hold violation,个人觉得
 楼主| 发表于 2016-10-9 20:16:41 | 显示全部楼层
回复 2# seulzren

lib库中该单元的部分信息,您看看是不是可以解释.sdf为负的情况:

pin (D) {

     。。。。。

timing () {

        related_pin : "CP";

        timing_type : hold_rising;

        rise_constraint (constraint_template_7x7) {

          index_1 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          index_2 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          values ( \

            "-0.204539, -0.150111, -0.143671, -0.145762, -0.154354, -0.167645, -0.210207", \

            "-0.279382, -0.224954, -0.218513, -0.215905, -0.221206, -0.234497, -0.277059", \

            "-0.30859, -0.254162, -0.239732, -0.245113, -0.250414, -0.263705, -0.298277", \

            "-0.330586, -0.279527, -0.265097, -0.266582, -0.26779, -0.281081, -0.320547", \

            "-0.365167, -0.310739, -0.296308, -0.2937, -0.299001, -0.312292, -0.346864", \

            "-0.388996, -0.326578, -0.312148, -0.30954, -0.314841, -0.328132, -0.362704", \

            "-0.41451, -0.352092, -0.337662, -0.332002, -0.332365, -0.345656, -0.380228" \

          );

        }

        fall_constraint (constraint_template_7x7) {

          index_1 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          index_2 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          values ( \

            "-0.260244, -0.203022, -0.182191, -0.17043, -0.151256, -0.145846, -0.151006", \

            "-0.357534, -0.300312, -0.279481, -0.269936, -0.256536, -0.243136, -0.248296", \

            "-0.410192, -0.35297, -0.332139, -0.322594, -0.309194, -0.303784, -0.300954", \

            "-0.467061, -0.404138, -0.391298, -0.379199, -0.360363, -0.354953, -0.356406", \

            "-0.567218, -0.509996, -0.489166, -0.479621, -0.458231, -0.45282, -0.44999", \

            "-0.659127, -0.593915, -0.581075, -0.56354, -0.550139, -0.544729, -0.541899", \

            "-0.825068, -0.759856, -0.747016, -0.734219, -0.716081, -0.71067, -0.70784" \

          );

        }

      }

 楼主| 发表于 2016-10-9 20:18:28 | 显示全部楼层
回复 4# zhanggd
lib库中dfcrq1单元的部分信息如下,您看是否可以解释该现象:

pin (D) {

  ..............................................

timing () {

        related_pin : "CP";

        timing_type : hold_rising;

        rise_constraint (constraint_template_7x7) {

          index_1 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          index_2 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          values ( \

            "-0.204539, -0.150111, -0.143671, -0.145762, -0.154354, -0.167645, -0.210207", \

            "-0.279382, -0.224954, -0.218513, -0.215905, -0.221206, -0.234497, -0.277059", \

            "-0.30859, -0.254162, -0.239732, -0.245113, -0.250414, -0.263705, -0.298277", \

            "-0.330586, -0.279527, -0.265097, -0.266582, -0.26779, -0.281081, -0.320547", \

            "-0.365167, -0.310739, -0.296308, -0.2937, -0.299001, -0.312292, -0.346864", \

            "-0.388996, -0.326578, -0.312148, -0.30954, -0.314841, -0.328132, -0.362704", \

            "-0.41451, -0.352092, -0.337662, -0.332002, -0.332365, -0.345656, -0.380228" \

          );

        }

        fall_constraint (constraint_template_7x7) {

          index_1 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          index_2 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");

          values ( \

            "-0.260244, -0.203022, -0.182191, -0.17043, -0.151256, -0.145846, -0.151006", \

            "-0.357534, -0.300312, -0.279481, -0.269936, -0.256536, -0.243136, -0.248296", \

            "-0.410192, -0.35297, -0.332139, -0.322594, -0.309194, -0.303784, -0.300954", \

            "-0.467061, -0.404138, -0.391298, -0.379199, -0.360363, -0.354953, -0.356406", \

            "-0.567218, -0.509996, -0.489166, -0.479621, -0.458231, -0.45282, -0.44999", \

            "-0.659127, -0.593915, -0.581075, -0.56354, -0.550139, -0.544729, -0.541899", \

            "-0.825068, -0.759856, -0.747016, -0.734219, -0.716081, -0.71067, -0.70784" \

          );

        }

      }

 楼主| 发表于 2016-10-9 20:20:59 | 显示全部楼层
.lib中该单元的部分信息,是否可以解释该现象?
pin (D)
...........
timing () {
        related_pin : "CP";
        timing_type : hold_rising;
        rise_constraint (constraint_template_7x7) {
          index_1 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");
          index_2 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");
          values ( \
            "-0.204539, -0.150111, -0.143671, -0.145762, -0.154354, -0.167645, -0.210207", \
            "-0.279382, -0.224954, -0.218513, -0.215905, -0.221206, -0.234497, -0.277059", \
            "-0.30859, -0.254162, -0.239732, -0.245113, -0.250414, -0.263705, -0.298277", \
            "-0.330586, -0.279527, -0.265097, -0.266582, -0.26779, -0.281081, -0.320547", \
            "-0.365167, -0.310739, -0.296308, -0.2937, -0.299001, -0.312292, -0.346864", \
            "-0.388996, -0.326578, -0.312148, -0.30954, -0.314841, -0.328132, -0.362704", \
            "-0.41451, -0.352092, -0.337662, -0.332002, -0.332365, -0.345656, -0.380228" \
          );
        }
        fall_constraint (constraint_template_7x7) {
          index_1 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");
          index_2 ("0.02, 0.5, 0.75, 1, 1.5, 2, 3");
          values ( \
            "-0.260244, -0.203022, -0.182191, -0.17043, -0.151256, -0.145846, -0.151006", \
            "-0.357534, -0.300312, -0.279481, -0.269936, -0.256536, -0.243136, -0.248296", \
            "-0.410192, -0.35297, -0.332139, -0.322594, -0.309194, -0.303784, -0.300954", \
            "-0.467061, -0.404138, -0.391298, -0.379199, -0.360363, -0.354953, -0.356406", \
            "-0.567218, -0.509996, -0.489166, -0.479621, -0.458231, -0.45282, -0.44999", \
            "-0.659127, -0.593915, -0.581075, -0.56354, -0.550139, -0.544729, -0.541899", \
            "-0.825068, -0.759856, -0.747016, -0.734219, -0.716081, -0.71067, -0.70784" \
          );
        }
      }
发表于 2016-10-10 08:41:15 | 显示全部楼层
回复 6# 1027199631

刚搜了一下,上面sdf中的SETUP/HOLD 不是violation的意思,而是STA工具从lib中提取出来setup/hold的大小,你看一下这个附件中的解释就都明白了
发表于 2016-10-10 08:42:53 | 显示全部楼层
sdf解释.pdf (77.82 KB, 下载次数: 93 )
 楼主| 发表于 2016-10-10 11:46:32 | 显示全部楼层
回复 9# zhanggd

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

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-20 05:31 , Processed in 0.032815 second(s), 9 queries , Gzip On, Redis On.

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