Chinaunix首页 | 论坛 | 博客
  • 博客访问: 204875
  • 博文数量: 45
  • 博客积分: 945
  • 博客等级: 准尉
  • 技术积分: 360
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-19 10:36
文章分类

全部博文(45)

文章存档

2016年(1)

2015年(1)

2014年(2)

2013年(4)

2012年(8)

2011年(29)

我的朋友

分类: IT业界

2012-11-01 17:29:38

本文引自:

 

第一次做后仿,就出现了问题,发现如果不加SDF,波形也会有延时:

后来发现,这些延时都是仿真库中定义的,而且加载SDF后的延时就是实际的延时了,而不是库中定义的延时,但出现了好多违例,modelsim波形如下:

箭头处出现了hold time违例,原来是仿真库中含有时序检查函数:

$setuphold(posedge CK &&& (SandR == 1), posedge J, tsetup$J$CK, thold$J$CK, NOTIFIER);
$setuphold(posedge CK &&& (SandR == 1), negedge J, tsetup$J$CK, thold$J$CK, NOTIFIER);
$setuphold(posedge CK &&& (SandR == 1), posedge K, tsetup$K$CK, thold$K$CK, NOTIFIER);
$setuphold(posedge CK &&& (SandR == 1), negedge K, tsetup$K$CK, thold$K$CK, NOTIFIER);


而我有几条路径不满足仿真库中定义的hold time(500ps),但我奇怪:SDF中不是也有时序检查函数吗?为什么仿真库中也有,不是多此一举吗,不会覆盖SDF中的函数吗,后来发现SDF中并没有检查hold time:

(TIMINGCHECK
    (WIDTH (posedge CK) (0.211::0.211))
    (WIDTH (negedge CK) (0.386::0.386))
    (SETUPHOLD (posedge D) (posedge CK) (0.258::0.258) ())
    (SETUPHOLD (negedge D) (posedge CK) (0.494::0.494) ())
    (SETUPHOLD (posedge RN) (posedge CK) (0.243::0.243) ())
    (SETUPHOLD (negedge RN) (posedge CK) (0.501::0.501) ())


后来我针对违例的cell在SDF中手动加入了保持时间的定义 :(SETUPHOLD (posedge D) (posedge CK) (0.258::0.258) (0.123::0.123)),然后再仿真,modelsim没有报错了,可见如果SDF和仿真库中都有时序检查函数,那么SDF具有高的优先级。

但是不明白encounter为什么生成的SDF中没有检查hold time,只好先修改布局布线,将encounter的hold time的threshold设置为仿真库中的500ps(options——set mode——mode setup),如下图:

 

,生成新的版图和SDF,网表,再仿真,modelsim就没有报错了

阅读(6842) | 评论(0) | 转发(0) |
0

上一篇:亚稳态

下一篇:altera cpld spi master verilog

给主人留下些什么吧!~~