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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7144|回复: 9

[解决] ncverilog带SDF后仿反标delay的问题?

[复制链接]
发表于 2018-10-24 11:09:27 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 alexto 于 2018-10-26 23:23 编辑

请教用ncverilog带SDF后仿反标delay的问题,感觉仿真结果里cell delay的值并不是SDF中的delay值0.496ns,反而是用了标准单元库里specify内定义的Unit delay 1.0ns,如下图所示。请问需要加什么参数才能让sdf内的delay值起效果么?

SDF中的内容:
(CELL
  (CELLTYPE "DLY2X1")
  (INSTANCE CKGen/CTSBUFX1_G1B23I1)
  (DELAY
    (ABSOLUTE
    (IOPATH A Y (0.211::0.490) (0.210::0.496))
    )
  )
)


标准单元库内CELL的定义:
`timescale 1ns/1ps
`celldefine
module DLY2X1 (Y, A);
output Y;
input A;
  buf I0(Y, A);
specify
(A => Y) = (1.0,1.0);
endspecify
endmodule // DLY2X1
`endcelldefine
发表于 2018-10-25 11:16:18 | 显示全部楼层
回复 1# alexto
你看一下你的makefile,是否有+annotate_sdf,用于区别是否加入sdf文件
发表于 2018-10-25 15:33:11 | 显示全部楼层
也可以看一下编译LOG里面是否有反标成功的语句。类似“SDF statistic:”、“Annotated”等关键词,可以搜索一下。如果没有,说不定是没有反标上。
 楼主| 发表于 2018-10-25 19:48:23 | 显示全部楼层
回复 2# gavin9520

之前makefile里没有加+annotate_sdf;加了后仿真结果一样,仿真结果还是1ns unit的delay;
 楼主| 发表于 2018-10-25 19:50:15 | 显示全部楼层
回复 3# gaurson

Log资料里Annotation说明如下,虽然只有88.56%的反标率,但至少大部分应该都反标成功了!


Annotation completed with 0 Errors and 1133 Warnings

SDF statistics: No. of Pathdelays = 60261  Annotated = 88.56% -- No. of Tchecks = 15411  Annotated = 0.00%
发表于 2018-10-26 09:01:07 | 显示全部楼层
回复 4# alexto


    你的makefile在中的timescale 1ns/ps有没有加上?
 楼主| 发表于 2018-10-26 14:00:41 | 显示全部楼层
回复 6# gavin9520

testbench和.v里都有加 `timescale 1ns/1ps 了,makefile里不需要特别加了吧?
发表于 2018-10-26 14:53:18 | 显示全部楼层
要是实在没头绪,可以根据你发现stdcell使用的是1.0ns的地方所在的instance,去编译log里面找找有没有这个地方报反标不成功的告警。如果反标不成功,LOG里面应该有告警的。万一你看的正好是那12.2%呢?很难说清。首先排查makefile里面和SDF相关的 选项是不是正确,有没有带上了不进行时序检查的宏?其次再排查编译LOG的反标告警吧。
 楼主| 发表于 2018-10-26 23:21:43 | 显示全部楼层
找到原因了!

SDF中的内容如下:
(CELL
  (CELLTYPE "DLY2X1")
  (INSTANCE CKGen/CTSBUFX1_G1B23I1)
  (DELAY
    (ABSOLUTE
    (IOPATH A Y (0.211::0.490) (0.210::0.496))
    )
  )
)
其中min:typ:max 三个scale中typ值是0,在sdf调用时如果不设定,default会调用typ值,所以需要特别说明要调用max,sdf调用改为如下格式就可以正常调用max timing了:
    $sdf_annotate(“DIG.output.max.sdf",DIG,,,"MAXIMUM",,"FROM_MAXIMUM");
注意其中不用的参数一定要加”,“表示分割,这里搞了好久;
系统函数$sdf_annotate 格式说明如下:
$sdf_annotate ('sdf_file'[, module_instance] [,'sdf_configfile'][,'sdf_logfile'][,'mtm_spec'] [,'scale_factors'][,'scale_type']);
发表于 2021-8-10 09:41:05 | 显示全部楼层
看懂celldefine了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-15 00:17 , Processed in 0.021465 second(s), 7 queries , Gzip On, Redis On.

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