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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 10530|回复: 19

[求助] 后仿真反标SDF问题

[复制链接]
发表于 2019-10-21 20:58:57 | 显示全部楼层 |阅读模式
100资产
请问有人在做综合后仿真时,有没有遇到这样的问题呐?
ncelab: *W,SDFNET: Unable to annotate to non-existent timing check (REMOVAL (posedge RB) (posedge CK) (103174)) of instance test_aes_128.uut.inst_Core.a2.\k0a_reg[26]  of module DFQRXM1RA <../synthesis/gate/aes_128_split_na.sdf, line 143466>.

这种反标不上是怎么回事呐?
首先说明的是,在我的lib文件中是有关于改触发器的removal时序的,
另外在提供的verilog model中,也有specify。
寻求各位的帮助!!!

发表于 2019-10-22 08:22:53 来自手机 | 显示全部楼层
會不會是define沒選擇正確?
发表于 2019-10-22 15:30:50 | 显示全部楼层
确认一下报错的寄存器路径在网表和SDF里面是不是都存在?
 楼主| 发表于 2019-10-22 15:41:30 | 显示全部楼层


jasper0608 发表于 2019-10-22 08:22
會不會是define沒選擇正確?


这个怎么看他是不是正确啊?
 楼主| 发表于 2019-10-22 17:44:51 | 显示全部楼层


gaurson 发表于 2019-10-22 15:30
确认一下报错的寄存器路径在网表和SDF里面是不是都存在?


报错的寄存器在.lib和verilog model,以及SDF中都是存在的
(1) SDF中
  (CELL
     (CELLTYPE "DFQRXM4RA")
     (INSTANCE inst_Core.a1.S4_0.S_0.out_reg[0])
     (DELAY
        (ABSOLUTE
          (PORT RB (::0.0))
          (PORT CK (::0.0))
          (PORT D (::0.0))
          (IOPATH RB Q () (::87068))
          (IOPATH CK Q (::169104) (::204988))
        )
     )
     (TIMINGCHECK
        (REMOVAL (posedge RB) (posedge CK) (::96023))
        (RECOVERY (posedge RB) (posedge CK) (::-37630))
        (SETUPHOLD (negedge D) (COND adacond_RB (posedge CK)) (::56220) (::17686))
        (SETUPHOLD (posedge D) (COND adacond_RB (posedge CK)) (::100124) (::-43486))
     )
  )


(2)Verilog model中
        specify
                (negedge RB => (Q+:1'b0)) = 0;
                (posedge CK => (Q+)) = 0;
                $setuphold (posedge CK &&& adacond_RB, posedge D &&& adacond_RB, 0, 0, notifier,,, delayed_CK, delayed_D);
                $setuphold (posedge CK &&& adacond_RB, negedge D &&& adacond_RB, 0, 0, notifier,,, delayed_CK, delayed_D);
                $recovery (posedge RB, posedge CK, 0, notifier);
                $hold (posedge CK, posedge RB, 0, notifier);
                $width (negedge RB, 0, 0, notifier);
                $width (posedge CK, 0, 0, notifier);
                $width (negedge CK, 0, 0, notifier);
        endspecify


(3)lib中
                         rise_constraint (constraint_template_3x3) {
                                 index_1 ("2, 20, 200");
                                 index_2 ("2, 20, 200");
                                 values ( \
                                         "-39.9499, -51.6369, -168.385", \
                                         "-49.1528, -60.9628, -176.849", \
                                         "31.9458, 19.5018, -105.14" \
                                 );
                         }
                 }
                 timing () {
                         related_pin : "CK";
                         sdf_edges : both_edges;
                         timing_type : removal_rising;
                         rise_constraint (constraint_template_3x3) {
                                 index_1 ("2, 20, 200");
                                 index_2 ("2, 20, 200");
                                 values ( \
                                         "97.5979, 107.965, 213.6", \
                                         "101.4, 111.749, 217.04", \
                                         "159.54, 170.01, 275.754" \
                                 );
                         }

发表于 2019-10-28 15:27:24 | 显示全部楼层
檢查 verilog model 是否有 define 可選擇,再試著改變看看。
 楼主| 发表于 2019-10-29 19:30:25 | 显示全部楼层


jasper0608 发表于 2019-10-28 15:27
檢查 verilog model 是否有 define 可選擇,再試著改變看看。


不是很明白您的意思,上面我显示的有verilog中该时序部分
发表于 2019-10-31 09:45:45 | 显示全部楼层
你的SDF中有remoal的时序检查,但是specify块中没有,就导致SDF无法反标到对应的specify块中了。
 楼主| 发表于 2019-11-1 22:29:22 | 显示全部楼层


xuxiangfeng014 发表于 2019-10-31 09:45
你的SDF中有remoal的时序检查,但是specify块中没有,就导致SDF无法反标到对应的specify块中了。 ...


你好,你说的specify块是verilog model中的吗,我的那里是有的啊,类似下面这样:
        specify
                (negedge RB => (Q+:1'b0)) = 0;
                (posedge CK => (Q+:1’b1)) = 0;
                $setuphold (posedge CK &&& adacond_RB, posedge D &&& adacond_RB, 0, 0, notifier,,, delayed_CK, delayed_D);
                $setuphold (posedge CK &&& adacond_RB, negedge D &&& adacond_RB, 0, 0, notifier,,, delayed_CK, delayed_D);
                $recovery (posedge RB, posedge CK, 0, notifier);
                $hold (posedge CK, posedge RB, 0, notifier);
                $width (negedge RB, 0, 0, notifier);
                $width (posedge CK, 0, 0, notifier);
                $width (negedge CK, 0, 0, notifier);
        endspecify
发表于 2019-11-3 00:33:34 | 显示全部楼层
Verilog model 有些问题。

  $recovery (posedge RB, posedge CK, 0, notifier);  //this statement is fine
  $hold (posedge CK, posedge RB, 0, notifier);  //this statement doesn't look right.  Probably should change to $removal (...)


Removal is a special type of hold check -- it checks that there is sufficient time from clock edge to the de-assertion edge of reset/preset.  It is an essential timing check of a flop.  



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

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-10 23:38 , Processed in 0.028052 second(s), 5 queries , Gzip On, Redis On.

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