微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC后端设计交流 > 关于P&R后,仿真时的的RECOVERY和 DFF CK 与 RN 的timing问题

关于P&R后,仿真时的的RECOVERY和 DFF CK 与 RN 的timing问题

时间:10-02 整理:3721RD 点击:

请问大家,我在P&R之后用modelsim仿真遇到点问题,不知道该如何解决,希望哪位大侠能伸出援助之手,谢谢~
-------------------------------------------------------------------------------
----------------------------分割线---------------------------------------------
-------------------------------------------------------------------------------
问题1:
P&R是别人完成的,然后他给我P&R之后的netlist和sdf文件。
当我用modelsim 点simulate时,会有好多这样的error。
# ** Error: (vsim-SDF-3262) IT22_wc.sdf(24090): Failed to find matching specify timing constraint.
每次出现这样的error: 我都会把相对应的IT22_wc.sdf文件中的24090行的:
(RECOVERY (posedge RN) (posedge CK) (0.209138:0.209138:0.209138)) 给注释掉,这样的行有好多,都必须要注释掉的。
有的项目还有REMOVAL所在行也需要注释的。
都注释了后就可以正常仿真了。
请问这是什么问题啊,该如何解决,谢谢。
-------------------------------------------------------------------------------
----------------------------分割线---------------------------------------------
-------------------------------------------------------------------------------
问题2:
还有个问题就是我在P&R后仿真的话,会有setup timing的问题,如下:
# ** Error: D:/WORK/1505/Post_sim/tsmc25_new.v(5729): $setup( posedge RN:489 ps, posedge CK:966 ps, 1 ns );
#Time: 966 psIteration: 0Instance: /tb/U_IT1505/U_RESET/disconnect_counter_reg_5_
# ** Error: D:/WORK/1505/Post_sim/tsmc25_new.v(5729): $setup( posedge RN:489 ps, posedge CK:966 ps, 1 ns );
#Time: 966 psIteration: 0Instance: /tb/U_IT1505/U_RESET/disconnect_counter_reg_6_
# ** Error: D:/WORK/1505/Post_sim/tsmc25_new.v(5729): $setup( posedge RN:484 ps, posedge CK:966 ps, 1 ns );
#Time: 966 psIteration: 0Instance: /tb/U_IT1505/U_RESET/disconnect_counter_reg_13_
..........
其中tsmc25_new.v是我用到的仿真库。 但是此类error我在用DC综合后(P&R之前)仿真时是没有的。请问该error如何解决啊。不知道是不是和我注释掉sdf文件里的RECOVERY 有关系啊。
我要是把相应的tsmc25_new.v里的5729行注释掉啊(我试过,这样的话就没有Timing问题了)。
相对应的RTL code如下:
always @ (posedge osc or posedge por)// osc是input clock, por是input power on reset signal
begin:
if (por)
disconnect_counter <= OSCCOUNTER ;
else if ( cki_8cycle )
disconnect_counter <= disconnect_counter + 1'b1 ;
else
disconnect_counter <= disconnect_counter ;
end

-------------------------------------------------------------------------------
----------------------------分割线---------------------------------------------
-------------------------------------------------------------------------------
问题3:
还有点就是FF的CK和RN之间的timing是如何定义的啊,FF的RN信号一有效就立马执行了,为啥还要和CK定义Timing啊,谢谢。
下面是仿真库tsmc25_new.v里关于DFFRX1的定义:
那位大侠能帮我解释一下我加粗的那行的timing定义啊,谢谢啦~~
`timescale 1ns/1ps
`celldefine
module DFFRX1 (Q, QN, D, CK, RN);
output Q, QN;
inputD, CK, RN;
reg NOTIFIER;
supply1 xSN;
bufXX0 (xRN, RN);
bufIC (clk, CK);
udp_dff I0 (n0, D, clk, xRN, xSN, NOTIFIER);
andI4 (flag, xRN, xSN);
bufI1 (Q, n0);
notI2 (QN, n0);
specify
specparam
tplh$RN$Q= 1.0,
tphl$RN$Q= 1.0,
tplh$RN$QN= 1.0,
tphl$RN$QN= 1.0,
tplh$CK$Q = 1.0,
tphl$CK$Q = 1.0,
tplh$CK$QN = 1.0,
tphl$CK$QN = 1.0,
tsetup$D$CK = 1.0,
thold$D$CK = 0.5,
tsetup$RN$CK= 1.0,
thold$RN$CK= 0.5,
tminpwl$RN= 1.0,
tminpwl$CK= 1.0,
tminpwh$CK= 1.0;
if (flag)
(posedge CK *> (Q +: D)) = (tplh$CK$Q,tphl$CK$Q);
if (flag)
(posedge CK *> (QN -: D)) = (tplh$CK$QN,tphl$CK$QN);
$setuphold(posedge CK &&& (flag == 1), posedge D, tsetup$D$CK, thold$D$CK, NOTIFIER);
$setuphold(posedge CK &&& (flag == 1), negedge D, tsetup$D$CK, thold$D$CK, NOTIFIER);
(negedge RN *> (Q +: 1'b0)) = (tphl$RN$Q);
(negedge RN *> (QN -: 1'b0)) = (tplh$RN$QN);
$setuphold(posedge CK, posedge RN, tsetup$RN$CK, thold$RN$CK, NOTIFIER);
$width(negedge RN, tminpwl$RN, 0, NOTIFIER);
$width(negedge CK &&& (flag == 1), tminpwl$CK, 0, NOTIFIER);
$width(posedge CK &&& (flag == 1), tminpwh$CK, 0, NOTIFIER);
endspecify
endmodule // DFFRX1
`endcelldefine
-------------------------------------------------------------------------------
----------------------------分割线---------------------------------------------
-------------------------------------------------------------------------------
这几个问题我一直不理解,烦请大哥大姐们帮帮忙,小弟不胜感激~
谢谢啦!

异步set/reset有相对于CK的recovery/removal时序要求,类似于D上的setup/hold要求。
--〉“但是此类error我在用DC综合后(P&R之前)仿真时是没有的。”
此类问题一般在CTS之后开始关注,所以DC综合的时候是不考虑的
LZ有没有跑Post layout STA?
确认一下这些问题是否在PR时已经修复。

异步set/reset有相对于CK的recovery/removal时序要求,类似于D上的setup/hold要求。
---------可是modelsim报错啊,所以我在sdf中注释掉recovery/removal了,仿真时却会有CK和RN的setup问题。
那么是我注释掉的原因吗?
我没有跑过Post layout STA,因为我觉得我的这个项目很小,应该不会有问题。
谢谢你的回答,谢谢~~~

good experience

同步复位置位才有recovery/removal时序要求。建议看看库里面的定义。
你的设计timing应该有问题的

谢谢你的回答,可是我相应的RTL已经帖出来了,我用的是异步复位啊。
烦请详解~~谢谢哦

查看约束文件,是否对rst设置了false path

看上去问题像是有recovery/removal的问题在PR阶段没有解决,却被后仿发现了。
没被PR解决时有可能的,比如Astro中修removal/recovery是要在timing setup中打开开关才会修,缺省是关闭不修的。
个人觉得还是先确保Post layout sta没问题再跑后仿吧。项目小不能成为不跑post layout sta的理由。

啊?同步?分特了。
哥们你再翻翻教科书吧

哦,这边P&R的工具是enconter,我不知道有没有你说的那个选项,因为不是我R&P的。好的,我会先STA看看,那么请问假如STA没有问题的话,RECOVERY该如何办啊,注释吗(问题1),还有 DFF CK 与 RN 的timing的问题该如何解决啊,需要在仿真库里同样注释吗?(问题2)
感谢你的回答,谢谢



不好意思,我将一个概念理解错了,是异步复位才有recovery和removal的timing的,同步复位没有的。
库里面会有相关定义的。

时序电路本身就需要必须满足设计的时序要求,跟模块大小无关
在做post-sim前,确保STA是通过的,no timing violations
对于async signals, input signals(port), 经过第一级DFF时,可能存在亚稳态,而仿真工具就会一直处于亚稳态(也就是一直X态, 红色显示),所以这个时候需要针对这些信号,修改.sdf文件中,相应的timing constraints,可以全部修改为(0,0,0)
post-sim说白了,也就是验证timing
现在再说,你的问题:
问题一,理论上说,你注释掉,问题不大,但最好在PNR时,修复这些
问题二,最好不要修改foundry提供的工艺文件,看起来,更像是你模块本身就存在timing violations

哦,我刚看了一下DC中的contrain,没有对rst设置set_false_path.
那么我要设置的话,是在rst和clk之间set_false_path吗? 谢谢
这个对recovery有影响吗?

既然是异步复位,我的理解是不需要检查时序的。所以false 掉

谢谢你的回帖,谢谢
“对于async signals, input signals(port), 经过第一级DFF时,可能存在亚稳态,而仿真工具就会一直处于亚稳态(也就是一直X态, 红色显示),所以这个时候需要针对这些信号,修改.sdf文件中,相应的timing constraints,可以全部修改为(0,0,0)”
也就是说,修改.sdf文件和我在仿真库里mark掉 recovery 是不是一个道理啊?
“问题一,理论上说,你注释掉,问题不大,但最好在PNR时,修复这些”
你说的修复是如何修复啊,是在encounter里有相应的修改项吗,如同8楼所说。(因为我在P&R之前,综合后在sdf文件里是没有该encovery 的时序的)

“问题二,最好不要修改foundry提供的工艺文件,看起来,更像是你模块本身就存在timing violations”
这个仿真库,包括综合时用到的库,都是我们单位人自己做的。

好纠结啊,关于第二个问题的:
# ** Error: D:/WORK/1505/Post_sim/tsmc25_new.v(5729): $setup( posedge RN:489 ps, posedge CK:966 ps, 1 ns );
#Time: 966 psIteration: 0Instance: /tb/U_IT1505/U_RESET/disconnect_counter_reg_5_
到底该如何修正啊,RN和CK的setup timing如何解决啊,谁帮帮我,谢谢~~

可是仿真库里包含有RN和CK的timing啊,就算是异步也有timing啊

我也遇到了同样的问题,encounter中没有violations,导出的sdf文件用modelsim后方就报错,查看sdf文件后发现就是在有recovery和removal的对应行报的错,怎么办啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top