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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6434|回复: 3

[求助] 某cell部分module path sdf反标不上

[复制链接]
发表于 2012-7-31 16:05:39 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 my2817 于 2012-7-31 16:21 编辑

--------------小弟在此开贴求助------------------------------------还请各位赐教-----------------------
--------------内容看着挺多,但关键问题没多少--------

NC-verilog在某Design的后仿中,发现某一cell的部分 module path SDF反标不成功,,现在将该cell及其在design中的SDF信息摘录出来分析,详情如下:

该cell的function 定义如下:




  1. module HDR_MUX3_1( I0, I1, S0, S1, I2, Z);
  2. input I0, I1, S0, S1, I2;
  3. output Z;
  4.    `ifdef FUNCTIONAL  //  functional //
  5.    `else
  6.         HDR_MUX3_1$func HDH_MUX3_1_inst(.I0(I0),.I1(I1),.S0(S0),.S1(S1),.I2(I2),.Z(Z));
  7.    `endif
  8.    `ifdef FUNCTIONAL  //  functional //
  9.         HDR_MUX3_1$func HDH_MUX3_1_inst(.I0(I0),.I1(I1),.S0(S0),.S1(S1),.I2(I2),.Z(Z));
  10.    `endif
  11.    `ifdef FUNCTIONAL // functional  //
  12.    `else

  13. // specify block begins

  14.    specify

  15.         if(I1===1'b0 && I2===1'b0)
  16.         // arc I0 --> Z
  17.          (I0 => Z) = (1.0,1.0);

  18.         if(I1===1'b0 && I2===1'b1)
  19.         // arc I0 --> Z
  20.          (I0 => Z) = (1.0,1.0);

  21.         if(I1===1'b1 && I2===1'b0)
  22.         // arc I0 --> Z
  23.          (I0 => Z) = (1.0,1.0);

  24.         if(I1===1'b1 && I2===1'b1)
  25.         // arc I0 --> Z
  26.          (I0 => Z) = (1.0,1.0);

  27.         ifnone
  28.         // arc I0 --> Z
  29.          (I0 => Z) = (1.0,1.0);

  30.         if(I0===1'b0 && I2===1'b0)
  31.         // arc I1 --> Z
  32.          (I1 => Z) = (1.0,1.0);

  33.         if(I0===1'b0 && I2===1'b1)
  34.         // arc I1 --> Z
  35.          (I1 => Z) = (1.0,1.0);

  36.         if(I0===1'b1 && I2===1'b0)
  37.         // arc I1 --> Z
  38.          (I1 => Z) = (1.0,1.0);

  39.         if(I0===1'b1 && I2===1'b1)
  40.         // arc I1 --> Z
  41.          (I1 => Z) = (1.0,1.0);

  42.         ifnone
  43.         // arc I1 --> Z
  44.          (I1 => Z) = (1.0,1.0);

  45.         if(I0===1'b0 && I1===1'b0 && S0===1'b0)
  46.         // arc I2 --> Z
  47.          (I2 => Z) = (1.0,1.0);

  48.         if(I0===1'b0 && I1===1'b0 && S0===1'b1)
  49.         // arc I2 --> Z
  50.          (I2 => Z) = (1.0,1.0);

  51.         if(I0===1'b0 && I1===1'b1 && S0===1'b0)
  52.         // arc I2 --> Z
  53.          (I2 => Z) = (1.0,1.0);

  54.         if(I0===1'b0 && I1===1'b1 && S0===1'b1)
  55.         // arc I2 --> Z
  56.          (I2 => Z) = (1.0,1.0);

  57.         if(I0===1'b1 && I1===1'b0 && S0===1'b0)
  58.         // arc I2 --> Z
  59.          (I2 => Z) = (1.0,1.0);

  60.         if(I0===1'b1 && I1===1'b0 && S0===1'b1)
  61.         // arc I2 --> Z
  62.          (I2 => Z) = (1.0,1.0);

  63.         if(I0===1'b1 && I1===1'b1 && S0===1'b0)
  64.         // arc I2 --> Z
  65.          (I2 => Z) = (1.0,1.0);

  66.         if(I0===1'b1 && I1===1'b1 && S0===1'b1)
  67.         // arc I2 --> Z
  68.          (I2 => Z) = (1.0,1.0);

  69.         ifnone
  70.         // arc I2 --> Z
  71.          (I2 => Z) = (1.0,1.0);

  72.         if(I2===1'b0)
  73.         // arc posedge S0 --> (Z:S0)
  74.          (posedge S0 => (Z:S0)) = (1.0,1.0);

  75.         if(I2===1'b0)
  76.         // arc negedge S0 --> (Z:S0)
  77.          (negedge S0 => (Z:S0)) = (1.0,1.0);

  78.         if(I2===1'b1)
  79.         // arc posedge S0 --> (Z:S0)
  80.          (posedge S0 => (Z:S0)) = (1.0,1.0);

  81.         if(I2===1'b1)
  82.         // arc negedge S0 --> (Z:S0)
  83.          (negedge S0 => (Z:S0)) = (1.0,1.0);

  84.         // arc posedge S0 --> (Z:S0)
  85.          (posedge S0 => (Z:S0)) = (1.0,1.0);

  86.         // arc negedge S0 --> (Z:S0)
  87.          (negedge S0 => (Z:S0)) = (1.0,1.0);

  88.         if(I0===1'b0 && I1===1'b1 && S0===1'b1)
  89.         // arc S1 --> Z
  90.          (S1 => Z) = (1.0,1.0);

  91.         if(I0===1'b1 && I1===1'b0 && S0===1'b0)
  92.         // arc S1 --> Z
  93.          (S1 => Z) = (1.0,1.0);

  94.         if(I0===1'b1 && I1===1'b1 && S0===1'b0)
  95.         // arc S1 --> Z
  96.          (S1 => Z) = (1.0,1.0);

  97.         if(I0===1'b1 && I1===1'b1 && S0===1'b1)
  98.         // arc S1 --> Z
  99.          (S1 => Z) = (1.0,1.0);

  100.         // arc posedge S1 --> (Z:S1)
  101.          (posedge S1 => (Z:S1)) = (1.0,1.0);

  102.         // arc negedge S1 --> (Z:S1)
  103.          (negedge S1 => (Z:S1)) = (1.0,1.0);

  104.         if(I0===1'b0 && I1===1'b0 && S0===1'b0)
  105.         // arc S1 --> Z
  106.          (S1 => Z) = (1.0,1.0);

  107.         if(I0===1'b0 && I1===1'b0 && S0===1'b1)
  108.         // arc S1 --> Z
  109.          (S1 => Z) = (1.0,1.0);

  110.         if(I0===1'b0 && I1===1'b1 && S0===1'b0)
  111.         // arc S1 --> Z
  112.          (S1 => Z) = (1.0,1.0);

  113.         if(I0===1'b1 && I1===1'b0 && S0===1'b1)
  114.         // arc S1 --> Z
  115.          (S1 => Z) = (1.0,1.0);

  116.    endspecify

  117.    `endif

  118. endmodule


复制代码



当然还有其HDR_MUX3_1$func就不在些贴出来了,然后是design中关于该cell的sdf描述:






  1. (DELAYFILE
  2.   (SDFVERSION "3.0")
  3.   (DESIGN "tchip_hlmc55lp_top")
  4.   (DATE "Fri Feb 24 11:31:01 2012")
  5.   (VENDOR "Cadence Design Systems, Inc.")
  6.   (PROGRAM "Encounter")
  7.   (VERSION "v10.11-s096_1 ((64bit) 03/23/2011 02:21 (Linux 2.6))")
  8.   (DIVIDER /)
  9.   (VOLTAGE 1.200000::1.200000)
  10.   (PROCESS "1.000000::1.000000")
  11.   (TEMPERATURE 25.000000::25.000000)
  12.   (TIMESCALE 1.0 ns)

  13. (CELL
  14.     (CELLTYPE  "HDR_MUX3_1")
  15.     (INSTANCE  )
  16.       (DELAY
  17.         (ABSOLUTE
  18.         (IOPATH (negedge S1) Z  (0.208::0.208) (0.226::0.226))        
  19.         (IOPATH (posedge S1) Z  (0.232::0.232) (0.195::0.195))
  20.         (COND I0===1'b1&&I1===1'b1&&S0===1'b1 (IOPATH S1 Z  (0.208::0.208) (0.195::0.195)))
  21.         (COND I0===1'b1&&I1===1'b1&&S0===1'b0 (IOPATH S1 Z  (0.208::0.208) (0.195::0.195)))
  22.         (COND I0===1'b1&&I1===1'b0&&S0===1'b0 (IOPATH S1 Z  (0.208::0.208) (0.195::0.195)))
  23.         (COND I0===1'b0&&I1===1'b1&&S0===1'b1 (IOPATH S1 Z  (0.208::0.208) (0.195::0.195)))
  24.         (COND I0===1'b1&&I1===1'b0&&S0===1'b1 (IOPATH S1 Z  (0.232::0.232) (0.226::0.226)))
  25.         (COND I0===1'b0&&I1===1'b1&&S0===1'b0 (IOPATH S1 Z  (0.232::0.232) (0.226::0.226)))
  26.         (COND I0===1'b0&&I1===1'b0&&S0===1'b1 (IOPATH S1 Z  (0.232::0.232) (0.226::0.226)))
  27.         (COND I0===1'b0&&I1===1'b0&&S0===1'b0 (IOPATH S1 Z  (0.232::0.232) (0.226::0.226)))
  28.         (IOPATH (posedge S0) Z  (0.219::0.219) (0.257::0.257))
  29.         (IOPATH (negedge S0) Z  (0.254::0.254) (0.237::0.237))
  30.         (COND I2===1'b1 (IOPATH (posedge S0) Z  (0.210::0.210) (0.257::0.257)))
  31.         (COND I2===1'b1 (IOPATH (negedge S0) Z  (0.245::0.245) (0.237::0.237)))
  32.         (COND I2===1'b0 (IOPATH (posedge S0) Z  (0.219::0.219) (0.253::0.253)))
  33.         (COND I2===1'b0 (IOPATH (negedge S0) Z  (0.254::0.254) (0.233::0.233)))
  34.         (IOPATH I2 Z  (0.215::0.215) (0.213::0.213))
  35.         (COND I0===1'b1&&I1===1'b1&&S0===1'b1 (IOPATH I2 Z  (0.197::0.197) (0.208::0.208)))
  36.         (COND I0===1'b1&&I1===1'b1&&S0===1'b0 (IOPATH I2 Z  (0.197::0.197) (0.208::0.208)))
  37.         (COND I0===1'b1&&I1===1'b0&&S0===1'b1 (IOPATH I2 Z  (0.215::0.215) (0.213::0.213)))
  38.         (COND I0===1'b1&&I1===1'b0&&S0===1'b0 (IOPATH I2 Z  (0.197::0.197) (0.208::0.208)))
  39.         (COND I0===1'b0&&I1===1'b1&&S0===1'b1 (IOPATH I2 Z  (0.197::0.197) (0.208::0.208)))
  40.         (COND I0===1'b0&&I1===1'b1&&S0===1'b0 (IOPATH I2 Z  (0.215::0.215) (0.213::0.213)))
  41.         (COND I0===1'b0&&I1===1'b0&&S0===1'b1 (IOPATH I2 Z  (0.215::0.215) (0.213::0.213)))
  42.         (COND I0===1'b0&&I1===1'b0&&S0===1'b0 (IOPATH I2 Z  (0.215::0.215) (0.213::0.213)))
  43.         (IOPATH I1 Z  (0.279::0.279) (0.301::0.301))
  44.         (COND I0===1'b1&&I2===1'b1 (IOPATH I1 Z  (0.271::0.271) (0.301::0.301)))
  45.         (COND I0===1'b1&&I2===1'b0 (IOPATH I1 Z  (0.279::0.279) (0.297::0.297)))
  46.         (COND I0===1'b0&&I2===1'b1 (IOPATH I1 Z  (0.262::0.262) (0.267::0.267)))
  47.         (COND I0===1'b0&&I2===1'b0 (IOPATH I1 Z  (0.270::0.270) (0.263::0.263)))
  48.         (IOPATH I0 Z  (0.309::0.309) (0.306::0.306))
  49.         (COND I1===1'b1&&I2===1'b1 (IOPATH I0 Z  (0.301::0.301) (0.306::0.306)))
  50.         (COND I1===1'b1&&I2===1'b0 (IOPATH I0 Z  (0.309::0.309) (0.301::0.301)))
  51.         (COND I1===1'b0&&I2===1'b1 (IOPATH I0 Z  (0.299::0.299) (0.289::0.289)))
  52.         (COND I1===1'b0&&I2===1'b0 (IOPATH I0 Z  (0.308::0.308) (0.285::0.285)))
  53.         )
  54.       )
  55.   )
  56. )



复制代码



对该cell建单独的仿真模型如下:





  1. module HDR_MUX3_1_test_Z;

  2.   HDR_MUX3_1 instance0(.I0(I0), .I1(I1), .I2(I2), .S0(S0), .S1(S1), .Z(Z));

  3.   HDR_MUX3_1_stim_Z instance1(.I0(I0), .I1(I1), .I2(I2), .S0(S0), .S1(S1), .Z(Z));

  4.         initial begin
  5.                 $sdf_annotate("./mux3_1.sdf",instance0,,"lsdf.og.log","MAXIMUM");
  6.         end
  7. endmodule

  8. module HDR_MUX3_1_stim_Z(I0,I1,I2,S0,S1,Z);

  9.         output I0,I1,I2,S0,S1;
  10.         reg I0,I1,I2,S0,S1;
  11.         input Z;
  12.         reg [0:5] vectors[0:431];
  13.         reg [0:5] ivector;
  14.         integer i_Y;
  15. initial begin

  16.         
  17.         vectors[0] = 6'b000000;
  18.         vectors[1] = 6'b100001;
  19.         vectors[2] = 6'b001000;
  20.         vectors[3] = 6'b101001;
  21.         vectors[4] = 6'b010000;
  22.         vectors[5] = 6'b110001;
  23.         vectors[6] = 6'b011000;
  24.         for(i_Y = 0; i_Y <432; i_Y = i_Y + 1)
  25.         begin
  26.                 ivector = vectors[i_Y];
  27.                 {I0,I1,I2,S0,S1} = ivector[0:4];
  28.                 #20 ;  
  29.                 if( ivector[5] !== Z && ivector[5] !==1'bx)
  30.                 $display("verify ERROR : HDR_MUX3_1:Z output mismatch at vector no. %d, %b != %b ",
  31.                                 i_Y,ivector[5], Z);
  32.         end
  33. end
  34. endmodule


复制代码



NC在执行 ncelab后,出现如下warning




  1. ncelab: *W,SDFNEP: Unable to annotate to non-existent path (IOPATH (negedge S1) Z) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 19>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (COND (((I0===1)&&(I1===1))&&(S0===1)) (IOPATH S1 Z)) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 21>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (COND (((I0===1)&&(I1===1))&&(S0===0)) (IOPATH S1 Z)) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 22>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (COND (((I0===1)&&(I1===0))&&(S0===0)) (IOPATH S1 Z)) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 23>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (COND (((I0===0)&&(I1===1))&&(S0===1)) (IOPATH S1 Z)) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 24>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (COND (((I0===1)&&(I1===0))&&(S0===1)) (IOPATH S1 Z)) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 25>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (COND (((I0===0)&&(I1===1))&&(S0===0)) (IOPATH S1 Z)) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 26>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (COND (((I0===0)&&(I1===0))&&(S0===1)) (IOPATH S1 Z)) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 27>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (COND (((I0===0)&&(I1===0))&&(S0===0)) (IOPATH S1 Z)) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 28>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (IOPATH (negedge S0) Z) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 30>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (COND (I2===1) (IOPATH (negedge S0) Z)) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 32>.ncelab: *W,SDFNEP: Unable to annotate to non-existent path (COND (I2===0) (IOPATH (negedge S0) Z)) of instance HDR_MUX3_1_test_Z.instance0 of module HDR_MUX3_1 <./net/mux3_1.sdf, line 34>.


复制代码


目前还没分析出是什么原因造成的,还请赐教,
 楼主| 发表于 2012-7-31 16:25:56 | 显示全部楼层




   我尝试用 modelsim仿真,其log如下



  1. # ** Warning: (vsim-3010) [TSCALE] - Module 'HDR_MUX3_1' has a `timescale directive in effect, but previous modules do not.
  2. #         Region: /HDR_MUX3_1_test_Z/instance0
  3. # Loading work.HDR_MUX3_1$func
  4. # Loading work.HDR_MUX3_1_stim_Z
  5. # ** Warning: (vsim-3009) [TSCALE] - Module 'HDR_MUX3_1_stim_Z' does not have a `timescale directive in effect, but previous modules do.
  6. #         Region: /HDR_MUX3_1_test_Z/instance1
  7. # ** Warning: (vsim-PLI-3028) /home/users/heyun/Desktop/els/modelsim/MUX3_1_SIM.v(8): $sdf_annotate : 4th argument (log file) is not supported.
  8. #         Region: /HDR_MUX3_1_test_Z
  9. # Loading instances from ./mux3_1.sdf
  10. # Loading work.TT_HDR_MUX3_1_UDP_0
  11. # Loading timing data from ./mux3_1.sdf
  12. # ** Note: (vsim-3587) SDF Backannotation Successfully Completed.
  13. #    Time: 0 ps  Iteration: 0  Region: /HDR_MUX3_1_test_Z  File: /home/users/heyun/Desktop/els/modelsim/MUX3_1_SIM.v


复制代码



这是不是说明在modelsim中是反标成功了?
发表于 2014-3-18 15:21:40 | 显示全部楼层
大哥,一楼的问题解决了吗?我也遇到了。
发表于 2018-4-17 14:51:07 | 显示全部楼层
还有回复么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-14 11:57 , Processed in 0.023343 second(s), 8 queries , Gzip On, Redis On.

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